Статья Полезный фаззинг

banner.jpg

Доброго времени суток, уважаемые форумчане!
Продолжаю писать статьи, в помощь студентам курса WAPT от Академии Codeby. На днях один из учеников спросил, как найти нужный пейлоад для эксплуатации уязвимости. Посоветовал ему профаззить потенциально уязвимое место в Burp Suite при помощи одного из списков из Seclists. Не зря же люди старались и компоновали все эти списки для того, чтобы облегчить жизнь нам с вами. В ответ услышал кучу непонятных слов, по поводу того, что фаззить долго, непонятно, как после этого найти то, что нужно и вообще список уж очень большой и наверняка есть гораздо более «умные» способы для эксплуатации уязвимости. Хотел спросить человека, как его с такими мыслями затянуло на довольно сложный курс, да и вообще в достаточно сложную сферу деятельности, где нужно неимоверное терпение и внимательность. Потом решил этого не делать, потому что большинство людей, которые сталкиваются с темой пентеста впервые, рассматривают фаззинг только в качестве средства поиска каталогов, файлов, а также перебора логинов и паролей.

В этой статье я хочу немного расширить диапазон задач, к которым можно приметить фаззинг. Это будет далеко не полный список, потому что он ограничивается только фантазией человека.
Итак, приступим.

Поиск файлов и папок
Начнем с банальщины. Для пентеста веб-приложений бывает необходимо получить список файлов и папок, которые имеются на сайте. Уязвимость может затаиться где-то в глубине приложения, поэтому этот этап должен быть на втором месте после изучения исходного кода. Для этой процедуры хорошо подходят такие следующие инструменты: dirb. dirsearch, dirbuster, gobuster, wfuzz, ffuf, Burp Suite. Каждый из них имеет свои достоинства и недостатки. Тут каждый сможет выбрать инструмент в зависимости от своих предпочтений. Мне для поиска файлов и папок нравится использовать ffuf из-за его многофункциональности, на нем и продемонстрирую. Имеем сайт, фаззим файлы и папки:

ffuf -t 300 -u "http://testphp.vulnweb.com/FUZZ" -w /ПУТЬ/SecLists-master/Discovery/Web-Content/directory-list-2.3-medium.txt -recursion -e .php,.html,.txt


,где
-recursion – параметр запуска рекурсивного просмотра папок (поиск вложенных значений)
-e – параметр в котором указываются расширения искомых файлов
-recursion-depth=2 – показатель вложенности
-recursion-strategy– если не пройдет рекурсия, нужно сменить стратегию на greedy


В принципе, все это вы можете прочитать в справке к программе.

1658090125305.png


Думаю, тут все понятно. Идем дальше.

Брут формы авторизации
Еще одна достаточно распространенная сфера применения фаззинга – это взлом админок. Здесь тоже все не сложно, если прочитать мануал по инструменту. Фаззить можно как по одному параметру, так и по нескольким. Чтобы не повторяться проведем перебор сразу по двум полям: логину и паролю. Как отфильтровать вывод работы программы и отобразить только нужные данные, думаю вы разберетесь сами, для этого есть help, в котором все написано.

ffuf -u "login page" -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "uname=HFUZZ&pass=WFUZZ" -w /ПУТЬ/users.txt:HFUZZ -w /ПУТЬ/pass.txt:WFUZZ -c -t 100 -mc all

1658090210842.png


Тоже без комментариев.

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


Фаззинг параметров

Предположим есть приложение и в нем используются GET-параметры для обращения к нужным страницам, файлам или еще к чему. Очевидный параметр id здесь отсутствует, а других мы не знаем. Давайте попробуем сфаззить нужный параметр. Перехватываем запрос, отправляем его в модуль Burp Suite – Intruder. Ставим ? (знак, после которого идет параметр) значки §§ в месте, в котором мы будем перебирать значения.

1658090362097.png


В коллекции Seclists-master присутствует полезный список burp-parameter-names.txt, который вы найдете по приведенному ниже пути:

1658090388451.png


Запускаем фаззинг. Получаем результат:

1658090461291.png



Поиск уязвимостей
Допустим у вас есть предположение, что в каком-то месте может находиться уязвимость, но вы не знаете какая. Можно конечно подставлять своеобразные детекторы уязвимостей (‘ или “ для SQL-injection, <script>alert(‘xss’)</script> для XSS и т.д). Однако это может не привести ни к какому результату, если, например, кавычка или какая-либо команда на сервере фильтруется. Перебирать все детекторы вручную будет очень долго. Попробуем автоматизировать этот процесс при помощи Burp Suite. Конечно полностью универсального списка для тестирования всех уязвимостей нам не найти, но что-то подобное я увидел в коллекции fuzzdb-master:

1658090532906.png


Используем его.

1658090569876.png


Нашли Command injection

1658090596304.png



Фаззинг фильтруемых символов
Бывают ситуации, когда приложение фильтрует отдельные символы или целые команды. Как определить то, что ему не нравится и оно просто вырезает это из пейлоадов.

Допустим, имеем сайт, который который имеет нас и не пропускает никакие команды и в месте предполагаемой инъекции как будто удаляет все, что мы вводим. Давайте найдем это с помощью фаззинга. Для начала создадим словарик в каждую строчку которого введем буквы по алфавиту, цифры и спецсимволы, обзовем его, например, alphabet. Стараемся ничего не упустить, будет обидно, если не внесем в него один единственный символ и будем гадать, почему не проходит команда. В коллекции Seclists-master можно подобрать список с командами, например, Linux и прогнать его, но мы начнем с символов. Приступим.


1658090657076.png
1658090666034.png



Фаззинг приложения показал, что фильтруется почти весь алфавит, за исключением нескольких букв. Любой человек, знакомый с программированием скажет, что приложение пропускает спецсимволы, цифры и буквы, которые могут использоваться в hex-кодировке, соответственно для обхода фильтрации нужно использовать эту кодировку. Аналогичную методику можно применить к поиску фильтруемых команд.

Поиск подходящего пейлоада

Часто случается, что мы нашли уязвимое место и даже определили, что это конкретная уязвимость, но что характерно, не можем подобрать подходящий пейлоад. Попробуем его профаззить. В коллекции Seclists-master есть интересная папочка, в которой собраны пейлоады на все случаи жизни. Я долгое время обходил ее стороной, думая что это фуфло, потом долго рвал волосы на ж@$е, когда понял, сколько времени я ПРОтеряЛ.


1658090792349.png


Допустим нашли SSTI, но без уверенных знаний Python не можем подобрать нужный пейлоад. Можно сесть и гуглить разные Cheat Sheets, а можно сначала попробовать пофаззить, вдруг повезет. Выбираем из вышеуказанной папки директорию Server Side Template Injection и там лежит готовый лист с пейлоадами. Запускаем.

1658090940449.png


Как видим нашли то, что нужно. Теперь осталось немного подработать его и создать, к примеру, reverse shell.

Фаззинг также можно применять для подбора cookie, значений параметров, численных значений функций, пейлоадов, да в принципе все можно фаззить, было бы желание и отсутствовало пренебрежительное отношение к этому элементу пентеста. При желании можно автоматизировать любую рутинную работу. Использование Интрудера для эксплуатации слепой sql-инъекции – это ведь тоже фаззинг.

На этом заканчиваю свою бредятину. Пожелания или дополнения приветствуются. Критика тоже, но в разумных пределах.
 
Последнее редактирование:

samadhi

New member
13.08.2020
1
0
Спасибо за труд! Очень информативно и полезно.
 

p00h

One Level
23.01.2020
9
5
  • Нравится
Реакции: Paladin

Paladin

Red Team
10.10.2021
28
168
В таком виде поиск файлов с расширениями не сработает, нужно вручную добавлять точку перед каждым расширением, например, -e .php,.html,.txt
Спасибо за конструктивное замечание. Действительно без точки перед расширением не всегда проходит нормальный поиск, хотя бывает, что проходит, но не везде и на малом значении потоков. В общем вы правы, лучше точку ставить, лишней точно не будет. Вношу изменение. Еще рас спасибо.
 
  • Нравится
Реакции: p00h

p00h

One Level
23.01.2020
9
5
Спасибо за конструктивное замечание. Действительно без точки перед расширением не всегда проходит нормальный поиск, хотя бывает, что проходит, но не везде и на малом значении потоков. В общем вы правы, лучше точку ставить, лишней точно не будет. Вношу изменение. Еще рас спасибо.
Скорее всего дело не в количестве потоков: репо ffuf недавно обновлялся и значительно. У меня как раз свежая версия.
Изменения построчно не сравнивал, но все сорцы, где идет работа с расширениями (/pkg/ffuf/optionsparser.go, /pkg/ffuf/config.go и т.д.) - обновлялись 3 месяца назад.
Если у тебя раньше все отрабатывало (в чем не сомневаюсь), скорее всего в свежих версиях поменяли формат передачи расширений в ffuf.
Спасибо за статью!
 
Мы в соцсетях: