Juniper的SSL VPN系列产品可为用户提供安全的远程接入服务。 Juniper的SSL-VPN客户端ActiveX控件中存在远程溢出漏洞,远程攻击者可能利用此漏洞在客户机器上执行任意指令。 JuniperSetupDLL.dll是从JuniperSetup.ocx ActiveX控件加载的。如果在ProductName参数中指定了如下的超长字符串的话,就会在JuniperSetupDLL.dll函数中触发栈溢出: --- object classid=\"clsid:E5F5D008-DD2C-4D32-977D-1A0ADF03058B\" id=NeoterisSetup codebase=\"path_to_JuniperSetup.cab#version=1,0,0,3\"> ..... ---PARAM NAME=\"ProductName\" VALUE=\"AAAAAAA (long \'\'A\'\')\"> ..... script language=javascript NeoterisSetup.startSession(); end script 有漏洞的函数如下: .text:04F15783 ; int __stdcall sub_4F15783_ilvdlp(char *szProductName,LPCSTR lpValueName,LPBYTE lpData,LPDWORD lpcbData) .text:04F15783 sub_4F15783_ilvdlp proc near .text:04F15783 .text:04F15783 SubKey = byte ptr -10Ch .text:04F15783 Type = dword ptr -8 .text:04F15783 hKey = dword ptr -4 ... .text:04F157BF lea eax, [ebp+SubKey] .text:04F157C5 push offset szUninstallRegistryKey .text:04F157CA push eax .text:04F157CB call strcpy .text:04F157D0 push [ebp+szProductName] .text:04F157D3 lea...
Juniper的SSL VPN系列产品可为用户提供安全的远程接入服务。 Juniper的SSL-VPN客户端ActiveX控件中存在远程溢出漏洞,远程攻击者可能利用此漏洞在客户机器上执行任意指令。 JuniperSetupDLL.dll是从JuniperSetup.ocx ActiveX控件加载的。如果在ProductName参数中指定了如下的超长字符串的话,就会在JuniperSetupDLL.dll函数中触发栈溢出: --- object classid=\"clsid:E5F5D008-DD2C-4D32-977D-1A0ADF03058B\" id=NeoterisSetup codebase=\"path_to_JuniperSetup.cab#version=1,0,0,3\"> ..... ---PARAM NAME=\"ProductName\" VALUE=\"AAAAAAA (long \'\'A\'\')\"> ..... script language=javascript NeoterisSetup.startSession(); end script 有漏洞的函数如下: .text:04F15783 ; int __stdcall sub_4F15783_ilvdlp(char *szProductName,LPCSTR lpValueName,LPBYTE lpData,LPDWORD lpcbData) .text:04F15783 sub_4F15783_ilvdlp proc near .text:04F15783 .text:04F15783 SubKey = byte ptr -10Ch .text:04F15783 Type = dword ptr -8 .text:04F15783 hKey = dword ptr -4 ... .text:04F157BF lea eax, [ebp+SubKey] .text:04F157C5 push offset szUninstallRegistryKey .text:04F157CA push eax .text:04F157CB call strcpy .text:04F157D0 push [ebp+szProductName] .text:04F157D3 lea eax, [ebp+SubKey] .text:04F157D9 push eax .text:04F157DA call strcat .data:04F1EA10 ; char szUninstallRegistryKey[] .data:04F1EA10 szUninstallRegistryKey db \'\'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\\'\',0 这个函数的第一个参数(szProductName)是用于创建卸载注册表项的产品名。ProductName参数的值字段传送给szProductName,未经任何边界检查便使用strcat()函数拷贝到了本地缓冲区SubKey。因此,如果能够传送特制的ProductName参数的话,就可以覆盖栈中的返回地址并执行任意代码。