Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.
Полное название SSRF: Server-Side Request Forgery, то есть подделка запроса на стороне сервера. Это уязвимость безопасности, при которой злоумышленник создает запрос и выполняет его на целевом сервере. Злоумышленник может воспользоваться этой уязвимостью, чтобы заставить сервер отправлять запросы к любому домену, созданному злоумышленником. Целью обычно является внутренняя система, недоступная из внешней сети. Проще говоря, это использование уязвимости сервера для отправки сконструированного запроса в качестве сервера во внутреннюю сеть, где находится сервер, для атаки.
Когда злоумышленник хочет получить доступ к службам на сервере B, но из-за существования брандмауэра или из-за того, что сервер B является узлом интрасети, злоумышленник не может получить к нему прямой доступ. Если сервер A имеет уязвимость SSRF, злоумышленник может использовать сервер A для запуска SSRF-атаки и инициировать запрос к хосту B через сервер A для атаки на внутреннюю сеть.
Пример:
Сценарий уязвимости: на определенном веб-сайте есть функция онлайн-загрузки, которая может загружать определенные удаленные статьи локально. Ссылка следующая:
http://www.xxx.com/article.php?url=https://blog.csdn.net/qq_43531669/article/details/112498646
Если система не выполняет никаких проверок параметров URL, она может формировать другие запросы, например:
http://www.xxx.com/article.php?url=http://127.0.0.1:22
http://www.xxx.com/article.php?url=file:///etc/passwd
http://www.xxx.com/article.php?url=dict://127.0.0.1:22/data:data2 (dict может запрашивать данные из сервисного порта data2)
http://www.xxx.com/article.php?url=gopher://127.0.0.1:2233/_test (Отправьте тест данных на порт 2233, вы также можете отправить запрос POST)
...
Многие сайты предоставляют функцию получения данных с других серверов. По указанному URL-адресу веб-сайт может получать изображения, загружать файлы, читать содержимое файлов и т. д. из других мест. Суть SSRF заключается в использовании дефектного веб-сайта в качестве прокси-сервера для атаки на удаленные и локальные серверы.
Уязвимости SSRF в основном вызваны тем, что сервер обеспечивает функцию получения данных с других серверов, но не фильтрует и не ограничивает целевой адрес. Злоумышленник может использовать эту уязвимость для получения некоторой информации о внутренней системе (поскольку она инициируется сервером, он может запросить внутреннюю систему, подключенную к нему и изолированную от внешней сети).
Защита интранет-сервисов, как правило, слабее, чем у внешних сетевых сервисов. Некоторые интранет-сервисы даже не устанавливают проверку разрешений на доступ к интрасети для удобства эксплуатации и обслуживания. Поэтому при наличии SSRF обычно наносится больший вред.
Поскольку уязвимость SSRF представляет собой уязвимость безопасности, которая создает запросы, отправленные сервером, мы можем определить, существует ли уязвимость SSRF, перехватывая пакеты и анализируя, отправлен ли запрос сервером.
Найдите адрес ресурса, к которому осуществляется доступ, в исходном коде страницы.,Если тип адреса ресурсаhttp://www.xxx.com/a.php?image=Адрес
может существоватьSSRFлазейки。
(1) Функция обмена: делитесь статьями и т. д. через URL-адреса, например следующий адрес:
http://share.xxx.com/index.php?url=http://www.xxx.com
Получив параметры URL-адреса, вы можете перейти к указанной общей статье при нажатии на ссылку. Если в этой функции не будет фильтрации и ограничения диапазона целевых адресов, будет SSRF-уязвимость.
(2) Загрузка/скачивание изображений. Загружайте или скачивайте изображения по URL-адресу:
http://image.xxx.com/image.php?image=http://www.xxx.com
Загрузка изображений существует во многих редакторах. Когда редактор загружает изображения, он загружает заданный адрес изображения на удаленном сервере. Если нет ограничений на параметры загрузки, может возникнуть SSRF.
(3) Функция сбора изображений/статей:
http://title.xxx.com/title?title=http://title.xxx.com/xxx
Например, параметр title — это адрес заголовка статьи, который представляет адресную ссылку статьи. Если функция сбора использует эту форму для сохранения статей, SSRF может существовать в форме без ограничивающих параметров.
(4) Служба перекодирования: оптимизируйте веб-контент исходного адреса с помощью URL-адреса, чтобы сделать его пригодным для просмотра на экране мобильного телефона.
(5) Онлайн-перевод: переведите содержимое соответствующей веб-страницы по адресу веб-сайта.
(6) Почтовая система: например, адрес принимающего почтового сервера.
(7) Используйте поиск по ключевым словам в параметрах:
Ключевые слова:
share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain...
В общем, любой веб-сайт, которому необходимо запрашивать ресурсы с удаленного сервера, может иметь уязвимости SSRF.
Некоторые функции, которые имеют уязвимости или могут генерировать SSRF, были внесены в белый или черный список для предотвращения атак и доступа к службам и ресурсам интрасети. Поэтому, если вы хотите осуществить атаку SSRF, вам необходимо выполнить соответствующую обработку обхода адреса параметра запроса. Ниже приведены общие методы обхода.
(1) Используйте @, когда доступ к веб-сайту ограничен. http://www.xxx.com
Тип доменного имени,Его можно обойти с помощью базовой аутентификации http.,нравиться: http://www.xxx.com@www.xxxc.com
При разрешении доменных имен для @ существуют различия в обработке между различными функциями обработки, например:
http://www.aaa.com@www.bbb.com@www.ccc.com
www.ccc.com будет распознаваться в PHP parse_url, а libcurl распознает www.bbb.com.
(1) Используйте короткий URL-адрес для обхода
(2) Используя специальное доменное имя, xip.io может указывать на любое доменное имя (принцип разрешения DNS), то есть 127.0.0.1.xip.io, которое можно разрешить в 127.0.0.1.
(3) Использование базового преобразования: 127.0.0.1. Восьмеричный:0177.0.0.1
;шестнадцатеричный:0x7f.0.0.1
;десятичный:2130706433
(4)использовать[::]
,http://[::]:80/
будет проанализирован как http://127.0.0.1
(5) Добавьте номер порта http://127.0.0.1:8080.
(6) Используйте периоды,127。0。0。1
будет проанализирован как 127.0.0.1
(7) Используйте прыжок 302.
(1) Используйте прыжок 302.
(2) Используйте короткий адрес
В зависимости от функций, используемых в фоновом режиме, соответствующие методы воздействия и использования также различаются. Неправильное использование следующих функций в PHP приведет к SSRF:
file_get_contents()
fsockopen()
curl_exec()
file_get_contents()
Эта функция считывает весь файл в строку и является предпочтительным методом чтения содержимого файла в строку.
Например: Результатом выполнения следующего кода является вывод строки в файле test.txt.
<?php
echo file_get_contents(“test.txt”);
?>
fsockopen()
Используйте функцию fsockopen для получения данных (файла или HTML) URL-адреса, указанного пользователем.
curl_exec()
Эта функция может выполнить данный сеанс Curl.
Протоколы, поддерживаемые Curl:
Здесь для демонстрации мы используем ssrf-модуль тира Пикачу.
2.1、SSRF(curl):
Сначала давайте посмотрим на использованиеcurl_exec()
Функциональныйssrfдиапазон,Нажатие на ссылку страницы вернет стихотворение,Обратите внимание, что он передает запрос URL-адреса в фоновый режим.
Глядя на внутренний код, вы можете видеть, что он использует get для получения запроса URL-адреса внешнего интерфейса, функция Curl_exec выполняет запрос и, наконец, возвращает результат запроса во внешний интерфейс.
curl_init //Начальный сеанс cURL
curl_exec //Выполняем сеанс cURL
Измените загруженный URL-адрес на http://www.badiu.com, и вы увидите, что на странице отображаются данные Baidu.
Мы можем изменить содержимое URL-адреса на адрес и порт других серверов в интрасети, чтобы обнаружить информацию в интрасети, например об открытии портов. Например, на следующем рисунке показано, что узел интрасети 192.168.50.130 открыл порт 22:
Его можно использовать со скриптами или Burp для более эффективного обнаружения портов, например:
Откройте Burp, перехватите пакет и отправьте его Intrumer, а также установите полезную нагрузку.
Как видите, обнаружено, что порт 80 хоста интрасети открыт.
Мы также можем прочитать файлы интранет-сервера через уязвимость SSRF, например, изменить URL-адрес на
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=file:///c:/windows/system.ini
2.2、SSRF(file_get_content):
Также нажмите на метку страницы и обнаружите, что протокол файла используется для чтения файла.
Посмотреть внутренний код
Почти то же самое, что и выше,Разница в том, что здесь используетсяfile_get_contents
Функция чтения и выполнения файлов,иfile_get_contents
Функция может читать локальные файлы,Удаленные файлы также можно читать,Например:
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=http://192.168.50.130/index.html
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=file:///c:/windows/system.ini
Или используйте filter Получите исходный код страницы (прямой доступ будет осуществляться только в виде php-файла). Подробное объяснение)
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=test.php
После расшифровки base64 получается исходный код:
1. Прыжки запрещены.
2. Отключите протоколы, кроме http и https.,нравиться:file://
、gopher://
、dict://
ждать。
3. Ограничьте запрошенные порты широко используемыми портами http, например 80, 443 и 8080.
4. Унифицируйте информацию об ошибках, чтобы пользователи не могли судить о состоянии порта удаленного сервера на основе информации об ошибках.
5. Установите белый список для адреса запроса или ограничьте IP-адрес интрасети, чтобы предотвратить атаки на интрасеть.
Справочная статья: https://cloud.tencent.com/developer/article/1561355 https://www.cnblogs.com/DxyG/p/13742430.html https://www.cnblogs.com/dogecheng/p/11652022.html#2605005798 https://cloud.tencent.com/developer/article/1587012
Издатель: Full stack программист и руководитель стека, укажите источник для перепечатки: https://javaforall.cn/152821.html Исходная ссылка: https://javaforall.cn