• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Детальный гайд по Wfuzz

yashechka

Генератор контента.Фанат Ильфака и Рикардо Нарвахи
Эксперт
Регистрация
24.11.2012
Сообщения
2 344
Реакции
3 563
Было разработано множество инструментов, которые создают HTTP-запрос и позволяют пользователю изменять его содержимое. Фаззинг работает так же. Пользователь может несколько раз отправить на сервер один и тот же запрос с изменением определенного запроса. Когда этот определенный раздел заменяется переменной из списка или каталога, это называется фаззингом.

В этой статье мы узнаем, как мы можем использовать wfuzz, что означает "фаззер веб-приложений", который является интересным инструментом веб-фаззинга с открытым исходным кодом. С момента его выпуска многие люди тяготели к wfuzz, особенно в сценарии Bug Bounty. Итак, давайте погрузимся в процесс обучения.

Введение в Wfuzz

Wfuzz — это написанное на Python приложение для фаззинга веб-приложений с множеством опций. Он предлагает различные фильтры, которые позволяют заменить простой веб-запрос на требуемое слово, заменив его на переменную "FUZZ".

Настройка

Чтобы установить wfuzz с помощью pip, нам нужно сделать так:

pip3 install wfuzz

1646929017291.png


То же самое может быть достигнуто путем установки из исходного кода с помощью git.

git clone https://github.com/xmendez/wfuzz.git

1646929045079.png


Меню справки для просмотра всех рабочих опций выглядит следующим образом:

wfuzz -h
wfuzz --help


1646929067732.png


Wfpayload и Wfencode

При установке инструмента из исходного кода доступны скомпилированные исполняемые файлы с именами wfpayload и wfencode. Они отвечают за генерацию и кодирование полезной нагрузки. Их можно использовать индивидуально. Например, команда для генерации цифр от 0 до 15 выглядит следующим образом:

./wfpayload -z range,0-15

1646929099326.png


Как видите, есть ошибка pycurl. Её можно убрать так:

apt --purge remove python3-pycurl && apt install libcurl4-openssl-dev libssl-dev

1646929117044.png


Теперь, когда вы запускаете wfencode, который представляет собой модуль для кодировки предоставленного ввода с использованием хеш-алгоритма, теперь нет ошибки pycurl.

./wfencode -e md5 ignite

1646929135787.png


Докер запускает wfuzz

Wfuzz также можно запустить с помощью докера следующим образом, используя репозиторий ghcr.io. Соответствующую команду можно запустить, заменив последнюю переменную wfuzz.

docker run -v $(pwd)/wordlist:/wordlist/ -it ghcr.io/xmendez/wfuzz wfuzz

1646929162487.png


Полезная нагрузка

Полезная нагрузка в Wfuzz является источником входных данных. Доступные полезные нагрузки можно просмотреть, выполнив команду:

wfuzz -e payloads

1646929180228.png


Детальный вид также можно просмотреть с помощью фильтра slice :

wfuzz -z help --slice "list"

1646929196902.png

Фаззинг поддоменов

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

Здесь -c цвет кодирует коды выходных ответов

-Z указывает URL-адрес для ввода в режиме сканирования и игнорирует любую ошибку подключения.
-w указывает использование списка слов при переборе поддоменов.

wfuzz -c -Z -w subdomains.txt http://FUZZ.vulnweb.com

1646929223310.png


То же самое может быть достигнуто путем предоставления встроенного списка поддоменов. Только полезная нагрузка (опция -z) должна поставляться со "списком" в качестве входных данных. Список предоставляется в формате ITEM1-ITEM2-ITEM3, например:

wfuzz -z list,CVS-testphp-admin-svn http://testphp.vulnweb.com/FUZZ
wfuzz -z list,CVS-testphp-admin-svn http://FUZZ.vulnweb.com/


1646929246330.png


Фаззинг каталогов

Каталоги могут быть пронумерованы с помощью wfuzz точно так же, как и с gobuster, с помощью прилагаемого списка слов. Это можно сделать с помощью флага -w и ввода пути к списку слов:

wfuzz -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ

1646929268166.png


Как вы можете видеть на снимке экрана выше, все результаты, включая ненайденную страницу, были сдамплены, что делает утомительным просмотр результатов. Поэтому для сортировки результатов мы можем видеть флаг показа кода (-sc).Другие флаги такие:

–hc/sc CODE #Скрыть/показать по коду в ответе
–hl/sl NUM #ide/Показать по количеству строк в ответе
–hw/sw NUM #ide/Показать по количеству слов в ответе
–hc/sc NUM #ide/Показать по количеству символов в ответе

wfuzz -w wordlist/general/common.txt --sc 200,301 http://testphp.vulnweb.com/FUZZ

1646929295929.png


Сохранение результатов фаззинга

Вывод Wfuzz также можно сохранить в нескольких форматах с помощью параметра -f.

Параметр -f позволяет пользователю ввести путь к файлу и указать printer (который форматирует вывод) после запятой.

wfuzz -w wordlist/general/common.txt -f /tmp/output,csv --sc 200,301 http://testphp.vulnweb.com/FUZZ
cat /tmp/output


1646929317567.png


Вместо csv можно указать любой из принтеров

wfuzz -e printers

1646929335874.png


Основные фильтры списка слов
Есть определенные подаргументы, которым может предшествовать фильтр -z или -w, чтобы поэкспериментировать с ними. Эти фильтры:

–zP <params>: аргументы для указанной полезной нагрузки.
–zD <по умолчанию>: параметр по умолчанию для указанной полезной нагрузки.
–zE <энкодер>: кодировщик для указанной полезной нагрузки.

Итак, чтобы указать список слов с полезной нагрузкой, мы можем сделать это так:

wfuzz -z file --zD wordlist/general/common.txt --sc 200,301 http://testphp.vulnweb.com/FUZZ

1646929367749.png


Чтобы скрыть код ответа HTTP 404, можно сделать так:

wfuzz -z file --zD wordlist/general/common.txt --hc 404 http://testphp.vulnweb.com/FUZZ

1646929391016.png


Двойной фаззинг

Подобно тому, как параметр полезной нагрузки может быть профазен использованием ключевого слова «FUZZ», множественный фаззинг также возможен с указанием ключевых слов:

FUZ2Z — 2-й параметр
FUZ3Z — 3-й параметр
FUZ4Z — 4-й параметр


И каждому параметру может быть выделен свой собственный список слов. Первый "-w" означает первый FUZZ. Второй "-w" соответствует второму FUZ2Z и так далее.

wfuzz -w wordlist/general/common.txt -w wordlist/general/common.txt --hc 404 http://testphp.vulnweb.com/FUZZ/FUZ2Z

1646929428640.png


Брутфорс логина

HTTP-ответы можно взломать с помощью wfuzz. Например, веб-сайт testphp делает запрос POST к серверной части и передает "uname" и "pass" в качестве аргументов на страницу userinfo.php.

1646929446264.png


То же самое можно реализовать с помощью wfuzz следующим образом: Аргумент -d указывает данные сообщения, которые будут отправлены вместе с запросом.

wfuzz -z file,wordlist/others/common_pass.txt -d "uname=FUZZ&pass=FUZZ" --hc 302 http://testphp.vulnweb.com/userinfo.php

1646929474493.png


Как видите, правильные учетные данные "тест-тест" были найдены. Мы использовали общий файл как для имени пользователя, так и для пароля. То же самое можно сделать, предоставив разные файлы для имен пользователей и паролей, например:

-c предназначен для цветового кодирования выходного ответа, который можно пропустить.

wfuzz -z file,users.txt -z file,pass.txt --sc 200 -d "uname=FUZZ&pass=FUZ2Z" http://testphp.vulnweb.com/userinfo.php

1646929508846.png


Фаззинг файлов cookie


Чтобы отправить пользовательский файл cookie вместе с запросом в разные каталоги, мы можем использовать плагин "-b". Это добавит файл cookie к отправленному HTTP-запросу.

Полезный сценарий:

- Отравление печеньками
- Перехват сеанса
- Повышение привилегий

wfuzz -z file,wordlist/general/common.txt -b cookie=secureadmin -b cookie2=value2 --hc 404 http://testphp.vulnweb.com/FUZZ

1646929562809.png


В приведенном выше сценарии мы добавили 2 статических файла cookie в несколько каталогов. Теперь мы также можем фаззить параметр cookie следующим образом:

wfuzz -z file,wordlist/general/common.txt -b cookie=FUZZ http://testphp.vulnweb.com/

1646929579128.png


Фаззинг заголовка


Заголовок HTTP может быть добавлен в запрос, отправляемый wfuzz. Заголовки HTTP могут изменить поведение всей веб-страницы. Пользовательские заголовки могут быть изменены или введены в исходящий запрос.

Полезные сценарии:

- Внедрение заголовков HTTP
- SQL-инъекции
- Внедрение заголовка хоста

wfuzz -z file,wordlist/general/common.txt -H "X-Forwarded-By: 127.0.0.1" -H "User-Agent: Firefox" http://testphp.vulnweb.com/FUZZ


1646929614541.png



HTTP ОПЦИИ для фазинга

Существуют различные доступные методы HTTP-запроса/параметров, которые можно указать с помощью флага "-X". В следующем примере мы вставили следующие параметры в текстовый файл с именем options.txt.

GET
HEAD
POST
PUT
DELETE
CONNECT
OPTIONS
TRACE
PATCH

wfuzz -c -w options.txt --sc 200 -X FUZZ “http://testphp.vulnweb.com”


1646929657942.png


Как вы могли видеть, три допустимых варианта вернули код ответа 200.

То же самое можно ввести в строке с помощью полезной нагрузки «list» следующим образом:

wfuzz -z list,GET-HEAD-POST-TRACE-OPTIONS -X FUZZ http://testphp.vulnweb.com/

1646929678197.png


Фаззинг через прокси


Wfuzz также может направлять запросы через прокси. В следующем примере прокси-сервер Burp активен на порту 8080, и, как вы можете видеть, запрос перехвачен в перехвате burp.

wfuzz -z file,wordlist/general/common.txt -p localhost:8080 http://testphp.vulnweb.com/FUZZ

1646929697926.png


То же самое может быть достигнуто с помощью прокси-сервера SOCKS следующим образом:

wfuzz -z file,wordlist/general/common.txt -p localhost:9500:SOCKS5 http://testphp.vulnweb.com/FUZZ

1646929717677.png


Фаззинг аутентификации

Wfuzz также может устанавливать заголовки аутентификации и предоставлять средства аутентификации через HTTP-запросы.

Флаги:

–basic: обеспечивает базовую аутентификацию по имени пользователя и паролю.
–ntlm: проверка подлинности Windows
--digest: согласование с веб-сервером через дайджест-доступ



В следующем примере я предоставляю встроенный список с двумя переменными и –basic input для перебора веб-сайта httpwatch.com.

wfuzz -z list,nonvalid-httpwatch --basic FUZZ:FUZZ https://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx

1646929749085.png


Рекурсивный фазинг

-R может указывать уровни рекурсии при фаззинге каталогов или параметров. Проще говоря, рекурсия означает фаззинг на нескольких разных уровнях каталогов, таких как /dir/dir/dir и т. д. В следующем примере мы выполняем рекурсию на уровне 1 со встроенным списком, содержащим 3 каталога: admin, CVS и cgi-bin. Обратите внимание, как каталог "-" в его имени может быть указан как встроенный

wfuzz -z list,"admin-CVS-cgi\-bin" -R1 http://testphp.vulnweb.com/FUZZ

1646929777000.png


Принтеры и вывод

Принтеры в wfuzz относятся ко всем форматам, в которых может обрабатываться вывод полезной нагрузки. Его можно просмотреть, используя аргумент -e, за которым следует принтер. Кроме того, флаг "-o" также может указывать формат вывода.

wfuzz -e printers
wfuzz -o json -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ


1646929798213.png


Кодировщики

Различные кодировщики доступны в wfuzz. Одним из таких кодировщиков, который мы видели ранее, был md5. Другие кодировщики можно просмотреть, используя флаг "-e" с аргументом кодировщиков.

wfuzz -e encoders

1646929828001.png


Можно использовать веб-сайт для каталогов, используя вывод MD5 следующим образом:

wfuzz -z file,wordlist/general/common.txt,md5 http://testphp.vulnweb.com/FUZZ

1646929845793.png


Хранение и восстановление фазинга

Чтобы упростить сканирование, wfuzz может сохранять и восстанавливать сеансы, используя флаг "–dump-recipe" и "–recipe".

wfuzz -w wordlist/general/common.txt --dump-recipe /tmp/recipe --sc 200,301 http://testphp.vulnweb.com/FUZZ
wfuzz --recipe /tmp/recipe


1646929883964.png


Игнорирование исключений и ошибок

Часто во время фаззинга возникают различные ошибки и исключения, которые может выдавать веб-сайт. Опция "-Z" может заставить wfuzz игнорировать эти ошибки и исключения. Сначала мы запускаем обычную процедуру фаззинга поддоменов, а затем с опцией -Z:

wfuzz -z list,support-web-none http://FUZZ.google.com/
wfuzz -z list,support-web-none -Z http://FUZZ.google.com/


Как вы могли видеть, -Z игнорирует эту ошибку внизу. Кроме того, любой недопустимый ответ также можно скрыть следующим образом:

wfuzz -z list,support-web-none -Z --hc “XXX” http://FUZZ.google.com/

1646929925659.png



Фильтрация результатов

Существует множество фильтров для управления полезной нагрузкой или выходными данными.

wfuzz --filter-help

1646929951780.png


wfuzz -z range --zD 0-1 -u http://testphp.vulnweb.com/artists.php?artist=FUZZ --efield r

1646929966706.png


Ими можно управлять с помощью аргументов "-filter, –slice, –field и –efield".

Например, чтобы просмотреть необработанные ответы на отправленную полезную нагрузку и выполненный полный HTTP-запрос, вы можете использовать опцию "-efield r".

wfuzz -z range --zD 0-1 -u http://testphp.vulnweb.com/artists.php?artist=FUZZ --efield r


1646930113215.png


Однако, если нужен только предполагаемый URL-адрес, это можно сделать, указав URL-адрес –efield.

wfuzz -z range --zD 0-1 -u http://testphp.vulnweb.com/artists.php?artist=FUZZ --efield url --efield h

1646930089011.png


Точно так же, чтобы отфильтровать результаты на основе кода ответа и длины страницы (строки больше 97), вы можете сделать это следующим образом:

wfuzz -z range,0-10 --filter "c=200 and l>97" http://testphp.vulnweb.com/listproducts.php?cat=FUZZ

1646930065711.png



Сессии в wfuzz

Сессия в wfuzz — это временный файл, который можно сохранить, а затем взять, повторно обработать и постобработать. Это полезно в ситуациях, когда один сохраненный результат уже требует изменений или аналитику нужно найти что-то в результатах. Фильтр "–oF" может сохранять выходные данные сеанса в файл.

wfuzz --oF /tmp/session -z range,0-10 http://testphp.vulnweb.com/listproducts.php?cat=FUZZ

1646930195426.png


Этот файл сеанса теперь можно снова открыть и использовать с помощью полезной нагрузки wfuzzp следующим образом:

wfuzz -z wfuzzp,/tmp/session FUZZ

1646930214774.png


Один из таких примеров этой фильтрации из ранее сохраненного сеанса: мы находим уязвимость SQL-инъекции, используя регулярное выражение Python, предназначенное для чтения ответов после того, как запрос изменяет параметр, добавляя апостроф (‘) и снова фаззинг. "-A" отображает подробный вывод.

Регулярное выражение r.params.get=+’\’ добавляет апостроф (‘) в параметр get. r означает необработанный ответ.

wfuzz -z range,1-5 --oF /tmp/session http://testphp.vulnweb.com/artists.php?artist=FUZZ
wfuzz -z wfuzzp,/tmp/session --prefilter "r.params.get=+'\''" -A FUZZ


1646930245169.png


Как видите, запрос номер 4 выдает ошибку SQL, что указывает на SQL-инъекцию. Дополнительные операции с регулярными выражениями см. здесь (https://wfuzz.readthedocs.io/en/latest/library/guide.html).

Заключение

Wfuzz — это универсальный инструмент, который может выполнять больше, чем просто перечисление каталогов, и действительно помогает пентестеру в его анализе. Это быстрый сканер, который прост в использовании и написан на Python для переносимости. Надеюсь, вам понравилась статья. Спасибо за прочтение.

Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://www.hackingarticles.in/a-detailed-guide-on-wfuzz/
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх