Практическое нечеткое тестирование для обнаружения распространенных веб-уязвимостей

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

Я обсуждал, как фаззинг может помочь вам автоматически обнаруживать XSS- и SQL-инъекции, в предыдущей статье. Если вы еще этого не сделали, ознакомьтесь с основами фаззинга!

Но как эффективно фаззить веб-приложение? И как вы можете использовать инструменты для достижения своих целей? Сегодня мы на практике рассмотрим, как проводить фаззинг наиболее распространенных веб-уязвимостей с помощью инструмента с открытым исходным кодом Wfuzz.

Основы Wfuzz

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

$ pip install wfuzz

При наличии списка слов и конечной точки Wfuzz заменяет все отмеченные места строками из списка слов.



Точки ввода отмечены в Wfuzz строкой FUZZ. Например, эта команда Wfuzz заменит FUZZ внутри URL-адреса каждой строкой в ​​wordlist.txt:

$ wfuzz -w wordlist.txt http://example.com/FUZZ
These requests will be generated:
http://example.com/authorize.php
http://example.com/cron.php
http://example.com/administrator
http://example.com/secure

Можете ли вы придумать какой-нибудь сценарий, в котором можно было бы применить функциональность Wfuzz к набору ошибок?

Перечисление путей

Во-первых, на этапе поиска вы можете использовать Wfuzz для перечисления путей к файлам на сервере. Вот пример команды, которую вы можете использовать для перечисления путей к файлам:

$ wfuzz -w wordlist.txt -f output.txt --hc 404 --follow http://example.com/FUZZ

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



Еще одна хорошая база данных словаря как для перечисления, так и для фаззинга уязвимостей - FuzzDB:



Флаг -f указывает расположение выходного файла. --hc 404 указывает Wfuzz исключить любой ответ, имеющий код состояния 404. С помощью этого фильтра мы можем легко удалить URL-адреса, которые не указывают на допустимый файл или каталог, из списка результатов. А флаг --follow указывает Wfuzz следовать всем перенаправлениям HTTP, чтобы наш результат отображал фактическое назначение URL-адреса.

Давайте запустим команду, используя простой список слов, чтобы узнать, что мы можем найти на Facebook. В целях тестирования мы будем использовать список слов, состоящий всего из четырех слов:

wordlist.txt has four lines:
authorize.php
cron.php
administrator
secure

Мы запускаем эту команду, чтобы перечислить пути на Facebook:

wfuzz -w wordlist.txt -f output.txt --hc 404 --follow http://facebook.com/FUZZ

Посмотрим на результаты! Слева направо столбцы отчета Wfuzz: «Идентификатор запроса», «Код ответа HTTP», «Длина ответа в строках», «Длина ответа в словах», «Длина ответа в символах» и «Используемая полезная нагрузка». »Запроса Wfuzz.

Вы можете видеть здесь, что результаты показали только одну строку. Это потому, что мы использовали фильтр кода ответа, чтобы отфильтровать нерелевантные результаты! Поскольку мы отбросили все ответы 404, мы можем сосредоточиться на URL-адресах, указывающих на фактические пути. И по результатам мы видим, что /secure - допустимый путь на Facebook!

Грубая проверка подлинности

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

Вы можете попытаться выполнить проверку подлинности на странице методом перебора! Например, иногда страницы используют базовую схему аутентификации в качестве контроля доступа. В этом случае вы можете заставить Wfuzz фаззировать заголовки аутентификации, используя флаг -H для указания пользовательских заголовков.

$ wfuzz -w wordlist.txt -H "Authorization: Basic FUZZ" http://example.com/admin

В базовой схеме аутентификации используются учетные данные, представляющие собой строки пар имя-пароль в кодировке base64. Например, если ваше имя пользователя и пароль были «admin» и «password», ваша строка аутентификации была бы base64(“admin:password”), то есть YWRtaW46cGFzc3dvcmQ=. Вы можете сгенерировать ключи аутентификации из общих пар имя-пароль с помощью сценария, а затем передать их на защищенные страницы цели с помощью Wfuzz.

Другой способ аутентификации методом перебора - использовать параметр --basic в Wfuzz. Этот параметр автоматически создает учетные данные для базовой проверки подлинности методом перебора с учетом входного списка имен пользователей и паролей. В Wfuzz разные точки инъекции отмечены FUZZ, FUZ2Z, FUZ3Z и так далее. Они будут смешаны с первым, вторым и третьим переданным списком слов соответственно. Вот команду, которую вы можете использовать для одновременного объединения поля имени пользователя и пароля:

$ wfuzz -w usernames.txt -w passwords.txt --basic FUZZ:FUZ2Z http://example.com/admin

usernames.txt содержит два имени пользователя: «admin» и «administrator». А passwords.txt содержит три пароля: «секретный», «пароль» и «пароль». Вы можете видеть, что Wfuzz будет отправлять запросы для каждой комбинации имени пользователя и пароля в ваших списках.

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

Тестирование на общие веб-уязвимости

Наконец, Wfuzz может помочь вам автоматически протестировать распространенные веб-уязвимости.

Во-первых, вы можете использовать Wfuzz для анализа параметров URL и тестирования уязвимостей, таких как IDOR и открытое перенаправление. Параметры URL-адреса можно размыть, поместив ключевое слово FUZZ в URL-адрес. Например, если сайт использует числовой идентификатор для своих сообщений чата, вы можете размыть идентификатор с помощью этой команды:

$ wfuzz -w wordlist.txt http://example.com/view_message?message_id=FUZZ

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

Вы также можете протестировать параметр перенаправления с различными полезными нагрузками открытого перенаправления:

$ wfuzz -w wordlist.txt http://example.com?redirect=FUZZ

Чтобы проверить, вызывает ли полезная нагрузка перенаправление, вам необходимо включить следующие (—- follow) и подробные (-v) параметры Wfuzz. Подробная опция покажет, произошло ли перенаправление во время запроса.

$ wfuzz -w wordlist.txt -v http://example.com?redirect=FUZZ

Например, в этом запросе вы можете видеть, что полезная нагрузка fb.me вызывает перенаправление запроса на facebook.com. Посмотрите, сможете ли вы создать полезную нагрузку, которая перенаправляет пользователей на ваш сайт!

Вы можете протестировать уязвимости, такие как XSS и SQL-инъекция, путем фаззинга параметров URL HTTP или POST с общими списками полезной нагрузки. В Wfuzz данные тела POST указываются с помощью флага -d:

$ wfuzz -w xss.txt http://example.com/get_user?user_id=FUZZ (Tests for reflected XSS.)
$ wfuzz -w sqli.txt -d "user_id=FUZZ" http://example.com/get_user (Tests for SQL injection.)

При тестировании XSS с использованием Wfuzz создайте список скриптов, которые перенаправляют пользователя на вашу страницу, и включите подробный параметр Wfuzz для отслеживания любых перенаправлений. В качестве альтернативы вы можете использовать фильтры содержимого Wfuzz, чтобы найти полезные данные XSS, отраженные на веб-странице, чтобы узнать, удалось ли вам это сделать. Флаг --filter устанавливает фильтр результатов. Особенно полезен фильтр content~STRING. Он возвращает ответы, содержащие STRING.

$ wfuzz -w xss.txt --filter "content~FUZZ" http://example.com/get_user?user_id=FUZZ

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

Подробнее о Wfuzz

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



Спасибо за прочтение!