Анализ принципа уязвимости 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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose