Доброго времени суток, уважаемые форумчане!
Продолжаю писать статьи, в помощь студентам курса WAPT от Академии Codeby. На днях один из учеников спросил, как найти нужный пейлоад для эксплуатации уязвимости. Посоветовал ему профаззить потенциально уязвимое место в Burp Suite при помощи одного из списков из Seclists. Не зря же люди старались и компоновали все эти списки для того, чтобы облегчить жизнь нам с вами. В ответ услышал кучу непонятных слов, по поводу того, что фаззить долго, непонятно, как после этого найти то, что нужно и вообще список уж очень большой и наверняка есть гораздо более «умные» способы для эксплуатации уязвимости. Хотел спросить человека, как его с такими мыслями затянуло на довольно сложный курс, да и вообще в достаточно сложную сферу деятельности, где нужно неимоверное терпение и внимательность. Потом решил этого не делать, потому что большинство людей, которые сталкиваются с темой пентеста впервые, рассматривают фаззинг только в качестве средства поиска каталогов, файлов, а также перебора логинов и паролей.
В этой статье я хочу немного расширить диапазон задач, к которым можно приметить фаззинг. Это будет далеко не полный список, потому что он ограничивается только фантазией человека.
Итак, приступим.
В этой статье я хочу немного расширить диапазон задач, к которым можно приметить фаззинг. Это будет далеко не полный список, потому что он ограничивается только фантазией человека.
Итак, приступим.
Поиск файлов и папок
Начнем с банальщины. Для пентеста веб-приложений бывает необходимо получить список файлов и папок, которые имеются на сайте. Уязвимость может затаиться где-то в глубине приложения, поэтому этот этап должен быть на втором месте после изучения исходного кода. Для этой процедуры хорошо подходят такие следующие инструменты: dirb. dirsearch, dirbuster, gobuster, wfuzz, ffuf, Burp Suite. Каждый из них имеет свои достоинства и недостатки. Тут каждый сможет выбрать инструмент в зависимости от своих предпочтений. Мне для поиска файлов и папок нравится использовать ffuf из-за его многофункциональности, на нем и продемонстрирую. Имеем сайт, фаззим файлы и папки:
ffuf -t 300 -u "
,где
-recursion – параметр запуска рекурсивного просмотра папок (поиск вложенных значений)
-e – параметр в котором указываются расширения искомых файлов
-recursion-depth=2 – показатель вложенности
-recursion-strategy– если не пройдет рекурсия, нужно сменить стратегию на greedy
В принципе, все это вы можете прочитать в справке к программе.
ffuf -t 300 -u "
Ссылка скрыта от гостей
" -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
В принципе, все это вы можете прочитать в справке к программе.
Думаю, тут все понятно. Идем дальше.
Брут формы авторизации
Еще одна достаточно распространенная сфера применения фаззинга – это взлом админок. Здесь тоже все не сложно, если прочитать мануал по инструменту. Фаззить можно как по одному параметру, так и по нескольким. Чтобы не повторяться проведем перебор сразу по двум полям: логину и паролю. Как отфильтровать вывод работы программы и отобразить только нужные данные, думаю вы разберетесь сами, для этого есть help, в котором все написано.
ffuf -u "
ffuf -u "
Ссылка скрыта от гостей
" -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 Тоже без комментариев.
Как правило на этом фантазия заканчивается и народ думает, что фаззинг больше ни для чего не нужен. Попробуем доказать обратное. Покажем еще несколько дополнительных вариантов использования этой технологии.
Как правило на этом фантазия заканчивается и народ думает, что фаззинг больше ни для чего не нужен. Попробуем доказать обратное. Покажем еще несколько дополнительных вариантов использования этой технологии.
Фаззинг параметров
Предположим есть приложение и в нем используются GET-параметры для обращения к нужным страницам, файлам или еще к чему. Очевидный параметр id здесь отсутствует, а других мы не знаем. Давайте попробуем сфаззить нужный параметр. Перехватываем запрос, отправляем его в модуль Burp Suite – Intruder. Ставим ? (знак, после которого идет параметр) значки §§ в месте, в котором мы будем перебирать значения.
В коллекции Seclists-master присутствует полезный список burp-parameter-names.txt, который вы найдете по приведенному ниже пути:
В коллекции Seclists-master присутствует полезный список burp-parameter-names.txt, который вы найдете по приведенному ниже пути:
Запускаем фаззинг. Получаем результат:
Поиск уязвимостей
Допустим у вас есть предположение, что в каком-то месте может находиться уязвимость, но вы не знаете какая. Можно конечно подставлять своеобразные детекторы уязвимостей (‘ или “ для SQL-injection, <script>alert(‘xss’)</script> для XSS и т.д). Однако это может не привести ни к какому результату, если, например, кавычка или какая-либо команда на сервере фильтруется. Перебирать все детекторы вручную будет очень долго. Попробуем автоматизировать этот процесс при помощи Burp Suite. Конечно полностью универсального списка для тестирования всех уязвимостей нам не найти, но что-то подобное я увидел в коллекции fuzzdb-master:
Используем его.
Нашли Command injection
Фаззинг фильтруемых символов
Бывают ситуации, когда приложение фильтрует отдельные символы или целые команды. Как определить то, что ему не нравится и оно просто вырезает это из пейлоадов.
Допустим, имеем сайт, который который имеет нас и не пропускает никакие команды и в месте предполагаемой инъекции как будто удаляет все, что мы вводим. Давайте найдем это с помощью фаззинга. Для начала создадим словарик в каждую строчку которого введем буквы по алфавиту, цифры и спецсимволы, обзовем его, например, alphabet. Стараемся ничего не упустить, будет обидно, если не внесем в него один единственный символ и будем гадать, почему не проходит команда. В коллекции Seclists-master можно подобрать список с командами, например, Linux и прогнать его, но мы начнем с символов. Приступим.
Допустим, имеем сайт, который который имеет нас и не пропускает никакие команды и в месте предполагаемой инъекции как будто удаляет все, что мы вводим. Давайте найдем это с помощью фаззинга. Для начала создадим словарик в каждую строчку которого введем буквы по алфавиту, цифры и спецсимволы, обзовем его, например, alphabet. Стараемся ничего не упустить, будет обидно, если не внесем в него один единственный символ и будем гадать, почему не проходит команда. В коллекции Seclists-master можно подобрать список с командами, например, Linux и прогнать его, но мы начнем с символов. Приступим.
Фаззинг приложения показал, что фильтруется почти весь алфавит, за исключением нескольких букв. Любой человек, знакомый с программированием скажет, что приложение пропускает спецсимволы, цифры и буквы, которые могут использоваться в hex-кодировке, соответственно для обхода фильтрации нужно использовать эту кодировку. Аналогичную методику можно применить к поиску фильтруемых команд.
Поиск подходящего пейлоада
Часто случается, что мы нашли уязвимое место и даже определили, что это конкретная уязвимость, но что характерно, не можем подобрать подходящий пейлоад. Попробуем его профаззить. В коллекции Seclists-master есть интересная папочка, в которой собраны пейлоады на все случаи жизни. Я долгое время обходил ее стороной, думая что это фуфло, потом долго рвал волосы на ж@$е, когда понял, сколько времени я ПРОтеряЛ.
Допустим нашли SSTI, но без уверенных знаний Python не можем подобрать нужный пейлоад. Можно сесть и гуглить разные Cheat Sheets, а можно сначала попробовать пофаззить, вдруг повезет. Выбираем из вышеуказанной папки директорию Server Side Template Injection и там лежит готовый лист с пейлоадами. Запускаем.
Как видим нашли то, что нужно. Теперь осталось немного подработать его и создать, к примеру, reverse shell.
Фаззинг также можно применять для подбора cookie, значений параметров, численных значений функций, пейлоадов, да в принципе все можно фаззить, было бы желание и отсутствовало пренебрежительное отношение к этому элементу пентеста. При желании можно автоматизировать любую рутинную работу. Использование Интрудера для эксплуатации слепой sql-инъекции – это ведь тоже фаззинг.
На этом заканчиваю свою бредятину. Пожелания или дополнения приветствуются. Критика тоже, но в разумных пределах.
На этом заканчиваю свою бредятину. Пожелания или дополнения приветствуются. Критика тоже, но в разумных пределах.
Последнее редактирование: