Анализ принципа уязвимости SSRF [легко понять]
Анализ принципа уязвимости SSRF [легко понять]

Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.

Каталог статей

0x01 Базовые знания
1、SSRFлазейкиВведение:

Полное название SSRF: Server-Side Request Forgery, то есть подделка запроса на стороне сервера. Это уязвимость безопасности, при которой злоумышленник создает запрос и выполняет его на целевом сервере. Злоумышленник может воспользоваться этой уязвимостью, чтобы заставить сервер отправлять запросы к любому домену, созданному злоумышленником. Целью обычно является внутренняя система, недоступная из внешней сети. Проще говоря, это использование уязвимости сервера для отправки сконструированного запроса в качестве сервера во внутреннюю сеть, где находится сервер, для атаки.

2. Основные методы атаки:

Когда злоумышленник хочет получить доступ к службам на сервере B, но из-за существования брандмауэра или из-за того, что сервер B является узлом интрасети, злоумышленник не может получить к нему прямой доступ. Если сервер A имеет уязвимость SSRF, злоумышленник может использовать сервер A для запуска SSRF-атаки и инициировать запрос к хосту B через сервер A для атаки на внутреннюю сеть.

Пример:

Сценарий уязвимости: на определенном веб-сайте есть функция онлайн-загрузки, которая может загружать определенные удаленные статьи локально. Ссылка следующая:

Язык кода:javascript
копировать
http://www.xxx.com/article.php?url=https://blog.csdn.net/qq_43531669/article/details/112498646

Если система не выполняет никаких проверок параметров URL, она может формировать другие запросы, например:

Язык кода:javascript
копировать
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)
...
3. Принцип формирования уязвимостей:

Многие сайты предоставляют функцию получения данных с других серверов. По указанному URL-адресу веб-сайт может получать изображения, загружать файлы, читать содержимое файлов и т. д. из других мест. Суть SSRF заключается в использовании дефектного веб-сайта в качестве прокси-сервера для атаки на удаленные и локальные серверы.

Уязвимости SSRF в основном вызваны тем, что сервер обеспечивает функцию получения данных с других серверов, но не фильтрует и не ограничивает целевой адрес. Злоумышленник может использовать эту уязвимость для получения некоторой информации о внутренней системе (поскольку она инициируется сервером, он может запросить внутреннюю систему, подключенную к нему и изолированную от внешней сети).

4. Вред лазеек:
  1. Выполните сканирование портов во внешней сети, интрасети, где расположен сервер, и локальной сети.
  2. Отправьте полезную нагрузку на любой порт любого внутреннего хоста для атаки на службы интрасети.
  3. DOS-атака (запросить большой файл, всегда поддерживать соединение Keep-Alive Always)
  4. Атаковать веб-приложения в интрасети, например прямое внедрение SQL, XSS-атаки и т. д.
  5. Используйте протоколы file, gopher, dict для чтения локальных файлов, выполнения команд и т. д.
  6. CDN сайта можно игнорировать

Защита интранет-сервисов, как правило, слабее, чем у внешних сетевых сервисов. Некоторые интранет-сервисы даже не устанавливают проверку разрешений на доступ к интрасети для удобства эксплуатации и обслуживания. Поэтому при наличии SSRF обычно наносится больший вред.

0x02 Обнаружение уязвимостей
1. Проверка уязвимостей:

Поскольку уязвимость SSRF представляет собой уязвимость безопасности, которая создает запросы, отправленные сервером, мы можем определить, существует ли уязвимость SSRF, перехватывая пакеты и анализируя, отправлен ли запрос сервером.

Найдите адрес ресурса, к которому осуществляется доступ, в исходном коде страницы.,Если тип адреса ресурсаhttp://www.xxx.com/a.php?image=Адресможет существоватьSSRFлазейки。

2. Возможные точки возникновения уязвимостей:

(1) Функция обмена: делитесь статьями и т. д. через URL-адреса, например следующий адрес:

Язык кода:javascript
копировать
http://share.xxx.com/index.php?url=http://www.xxx.com

Получив параметры URL-адреса, вы можете перейти к указанной общей статье при нажатии на ссылку. Если в этой функции не будет фильтрации и ограничения диапазона целевых адресов, будет SSRF-уязвимость.

(2) Загрузка/скачивание изображений. Загружайте или скачивайте изображения по URL-адресу:

Язык кода:javascript
копировать
http://image.xxx.com/image.php?image=http://www.xxx.com

Загрузка изображений существует во многих редакторах. Когда редактор загружает изображения, он загружает заданный адрес изображения на удаленном сервере. Если нет ограничений на параметры загрузки, может возникнуть SSRF.

(3) Функция сбора изображений/статей:

Язык кода:javascript
копировать
http://title.xxx.com/title?title=http://title.xxx.com/xxx

Например, параметр title — это адрес заголовка статьи, который представляет адресную ссылку статьи. Если функция сбора использует эту форму для сохранения статей, SSRF может существовать в форме без ограничивающих параметров.

(4) Служба перекодирования: оптимизируйте веб-контент исходного адреса с помощью URL-адреса, чтобы сделать его пригодным для просмотра на экране мобильного телефона.

(5) Онлайн-перевод: переведите содержимое соответствующей веб-страницы по адресу веб-сайта.

(6) Почтовая система: например, адрес принимающего почтового сервера.

(7) Используйте поиск по ключевым словам в параметрах:

Ключевые слова:

Язык кода:javascript
копировать
share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain...

В общем, любой веб-сайт, которому необходимо запрашивать ресурсы с удаленного сервера, может иметь уязвимости SSRF.

Метод обхода 0x03:

Некоторые функции, которые имеют уязвимости или могут генерировать SSRF, были внесены в белый или черный список для предотвращения атак и доступа к службам и ресурсам интрасети. Поэтому, если вы хотите осуществить атаку SSRF, вам необходимо выполнить соответствующую обработку обхода адреса параметра запроса. Ниже приведены общие методы обхода.

1. Обойти ограничение на определенное доменное имя:

(1) Используйте @, когда доступ к веб-сайту ограничен. http://www.xxx.comТип доменного имени,Его можно обойти с помощью базовой аутентификации http.,нравиться: http://www.xxx.com@www.xxxc.com

При разрешении доменных имен для @ существуют различия в обработке между различными функциями обработки, например:

Язык кода:javascript
копировать
http://www.aaa.com@www.bbb.com@www.ccc.com

www.ccc.com будет распознаваться в PHP parse_url, а libcurl распознает www.bbb.com.

2. Обойти ограничение и запрашиваемый IP не является адресом интрасети:

(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.

3. Ограничьте запросы только протоколом http:

(1) Используйте прыжок 302.

(2) Используйте короткий адрес

0x04 Эксплуатация уязвимости
1. Функция, генерирующая уязвимость:

В зависимости от функций, используемых в фоновом режиме, соответствующие методы воздействия и использования также различаются. Неправильное использование следующих функций в PHP приведет к SSRF:

Язык кода:javascript
копировать
file_get_contents()
fsockopen()
curl_exec()       

file_get_contents()

Эта функция считывает весь файл в строку и является предпочтительным методом чтения содержимого файла в строку.

Например: Результатом выполнения следующего кода является вывод строки в файле test.txt.

Язык кода:javascript
копировать
<?php
echo file_get_contents(“test.txt”);
?>

fsockopen()

Используйте функцию fsockopen для получения данных (файла или HTML) URL-адреса, указанного пользователем.

curl_exec()

Эта функция может выполнить данный сеанс Curl.

Протоколы, поддерживаемые Curl:

2. Тир уязвимостей:

Здесь для демонстрации мы используем ssrf-модуль тира Пикачу.

2.1、SSRF(curl)

Сначала давайте посмотрим на использованиеcurl_exec()Функциональныйssrfдиапазон,Нажатие на ссылку страницы вернет стихотворение,Обратите внимание, что он передает запрос URL-адреса в фоновый режим.

Глядя на внутренний код, вы можете видеть, что он использует get для получения запроса URL-адреса внешнего интерфейса, функция Curl_exec выполняет запрос и, наконец, возвращает результат запроса во внешний интерфейс.

Язык кода:javascript
копировать
curl_init //Начальный сеанс cURL
curl_exec //Выполняем сеанс cURL

Измените загруженный URL-адрес на http://www.badiu.com, и вы увидите, что на странице отображаются данные Baidu.

Мы можем изменить содержимое URL-адреса на адрес и порт других серверов в интрасети, чтобы обнаружить информацию в интрасети, например об открытии портов. Например, на следующем рисунке показано, что узел интрасети 192.168.50.130 открыл порт 22:

Его можно использовать со скриптами или Burp для более эффективного обнаружения портов, например:

Откройте Burp, перехватите пакет и отправьте его Intrumer, а также установите полезную нагрузку.

Как видите, обнаружено, что порт 80 хоста интрасети открыт.

Мы также можем прочитать файлы интранет-сервера через уязвимость SSRF, например, изменить URL-адрес на

Язык кода:javascript
копировать
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Функция может читать локальные файлы,Удаленные файлы также можно читать,Например:

Язык кода:javascript
копировать
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-файла). Подробное объяснение

Язык кода:javascript
копировать
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=test.php

После расшифровки base64 получается исходный код:

0x05 Как защититься от SSRF

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

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода