Введение
Gobuster — это мощный инструмент, используемый для перебора каталогов и файлов, перебора поддоменов DNS и перечисления S3-бакетов. При выполнении операций фаззинга, особенно против веб-серверов, часто встречается большое количество "шумных" результатов. К ним часто относятся ответы для несуществующих путей, которые возвращают постоянный HTTP-код состояния (например, 404 Not Found) и, что особенно важно, постоянную длину тела ответа. Это может загромождать вывод и затруднять выявление реальных находок.
В этой лабораторной работе вы научитесь использовать флаг --exclude-length в режиме фаззинга Gobuster. Эта функция позволяет указать одну или несколько длин тел ответов для игнорирования, эффективно отфильтровывая эти шумные результаты. К концу этой лабораторной работы вы сможете выполнять более целенаправленные и эффективные сканирования методом фаззинга, фокусируясь только на релевантных ответах.
Запуск сканирования методом фаззинга и определение общего размера ответа для некорректных запросов
На этом шаге вы выполните первоначальное сканирование методом фаззинга с помощью Gobuster против локального веб-сервера. Это поможет вам наблюдать типичный вывод, особенно размеры ответов для несуществующих путей, которые часто представляют собой "шумные" результаты.
Сначала убедитесь, что веб-сервер запущен. Вы можете проверить, активен ли процесс:
ps aux | grep "python3 -m http.server 8000" | grep -v grep
Вы должны увидеть вывод, похожий на этот, указывающий на то, что сервер запущен:
labex 1234 0.0 0.0 12345 6789 ? Sl HH:MM 0:00 python3 -m http.server 8000 --directory /tmp/web_root
Теперь запустите сканирование методом фаззинга Gobuster, используя список слов, созданный на этапе настройки. Мы будем нацеливаться на http://127.0.0.1:8000.
gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt
Наблюдайте за выводом. Вы заметите несколько записей с одинаковым кодом состояния (например, 404) и, что более важно, одинаковой длиной. Эта постоянная длина для некорректных запросов — то, что мы будем исключать. Например, nonexistentpath123 и anothernonexistentpath должны показать одинаковую длину.
/index.html (Status: 200) [Size: 19]
/admin (Status: 404) [Size: 19]
/login (Status: 404) [Size: 19]
/config (Status: 404) [Size: 19]
/robots.txt (Status: 404) [Size: 19]
/nonexistentpath123 (Status: 404) [Size: 19]
/anothernonexistentpath (Status: 404) [Size: 19]
Из вывода определите общий размер ответа для ошибок 404 (Not Found). В этом примере это 19. Это длина, которую мы будем использовать для фильтрации шума на следующем шаге.
Повторный запуск сканирования с использованием флага --exclude-length с определенным размером
На этом шаге вы повторно запустите сканирование Gobuster, но на этот раз вы будете использовать флаг --exclude-length для фильтрации шумных результатов на основе размера ответа, который вы определили на предыдущем шаге.
Вспомните общий размер ответа для ошибок 404 из предыдущего шага. В нашем примере это было 19. Теперь добавьте --exclude-length 19 к вашей команде Gobuster:
gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt --exclude-length 19
Выполните команду и наблюдайте за выводом.
Наблюдение за фильтрацией шумных результатов
После выполнения команды на предыдущем шаге вы сразу же заметите существенную разницу в выводе. Записи, соответствующие исключенному размеру (например, ответы 404 с размером 19), больше не должны отображаться.
Сравните вывод этого сканирования с выводом из Шага 1.
Ожидаемый вывод:
/index.html (Status: 200) [Size: 19]
Вы должны увидеть только запись /index.html, поскольку это единственная, которая вернула статус 200 OK с другой длиной содержимого (хотя в этой конкретной настройке страница 404 также имеет длину 19, что является ограничением нашего простого сервера. В реальных сценариях страницы 404 часто имеют длину, отличную от действительных страниц). Главное — это то, что любой ответ с указанным размером теперь отфильтрован.
Это демонстрирует, насколько эффективно флаг --exclude-length может уменьшить шум, позволяя вам сосредоточиться на потенциально интересных находках.
Уточнение исключения с помощью списка длин через запятую
Иногда веб-сервер может возвращать разные размеры ответов для различных типов запросов "не найдено" или "недействительно". Gobuster позволяет исключать несколько размеров, предоставляя список через запятую флагу --exclude-length.
Чтобы продемонстрировать это, давайте представим, что наш сервер может возвращать страницы 404 с размерами 19 и 50. Мы смоделируем это, добавив еще один "действительный" путь, который возвращает другой размер.
Сначала добавим новый файл в наш корневой каталог веб-сервера с другим размером:
echo "This is a test page with a different length." > /tmp/web_root/testpage.html
Теперь добавим testpage.html в наш список слов (wordlist):
echo "testpage.html" >> /tmp/wordlist.txt
Запустите сканирование снова, но на этот раз предположим, что мы хотим исключить как 19, так и 39 (длина testpage.html составляет 39).
gobuster fuzz -u http://127.0.0.1:8000/FUZZ -w /tmp/wordlist.txt --exclude-length 19,39
Наблюдайте за выводом. Вы должны увидеть, что и исходные ответы 404 (длина 19), и ответ testpage.html (длина 39) теперь исключены.
Анализ очищенного вывода на предмет интересных находок
На этом заключительном этапе вы проанализируете очищенный вывод, полученный с использованием флага --exclude-length. Цель состоит в том, чтобы понять, как эта фильтрация помогает выявлять действительно интересные находки во время операции фаззинга (fuzzing).
После выполнения команды на предыдущем шаге вывод должен быть еще более лаконичным. Если в вашем списке слов были другие пути, которые возвращали код состояния и длину, не входящие в ваш список исключений, они теперь будут выделяться.
Например, если у вас был путь вроде /secret_admin_panel, который возвращал статус 200 OK с уникальной длиной, он был бы четко виден в отфильтрованном выводе, тогда как в неотфильтрованном сканировании он мог бы затеряться среди сотен ответов 404.
В нашей текущей настройке, с исключенными 19 и 39, и длиной index.html равной 19, вывод должен быть пустым, поскольку теперь все записи исключены. Это демонстрирует мощь точной фильтрации.
Этот метод бесценен в реальном тестировании на проникновение и поиске уязвимостей (bug bounty hunting), где большие списки слов могут генерировать огромное количество нерелевантных данных. Систематически исключая распространенные "шумовые" длины, вы можете значительно сократить ручные усилия, необходимые для анализа результатов сканирования, и увеличить свои шансы обнаружить скрытые каталоги или файлы.
Чтобы очистить среду, вы можете остановить веб-сервер Python:
kill $(cat /tmp/web_server_pid)
На этом лабораторная работа завершена. Вы успешно научились использовать флаг --exclude-length в Gobuster для уточнения ваших фаззинг-сканирований.
Резюме
В этой лабораторной работе вы получили практический опыт использования флага --exclude-length в Gobuster в режиме фаззинга (fuzz mode). Вы начали с выполнения первоначального сканирования для выявления распространенных длин ответов на недействительные запросы, которые часто представляют собой "шум". Затем вы научились использовать флаг --exclude-length с одной длиной для фильтрации этих нерелевантных результатов, что привело к более чистому выводу. Наконец, вы изучили, как далее уточнить исключение, предоставив список длин через запятую, демонстрируя его гибкость в обработке различных типов "шумных" ответов.
Овладев этим методом, вы можете значительно повысить эффективность и результативность ваших операций по фаззингу веб-приложений, позволяя сосредоточиться на действительно интересных находках и ускорить процесс обнаружения уязвимостей.
