3.4. Определение скрытых файлов, каталогов и параметров веб-сайта

 

Busting/Перебор по словарю – поиск скрытых ссылок

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

  • 200 - страница/ресурс существует.
  • 301 и 302 - переадресация на другую страницу. Причин несколько:
    • Запрашиваемый ресурс существует, но в начале требуется авторизация. Поэтому сервер перенаправляет на страницу входа.
    • Страница не найдена, поэтому сервер перенаправляет на главную или домашнюю страницу.
    • Существуют и другие причины, все зависит от того, как разработчики настроили логику работы приложения.
  • 403 – сервер отказывается обрабатывать запрос. Причин несколько:
    • Страница/ресурс существует, но доступ к ним запрещен для определенных пользователей.
    • Страница/ресурс не существует на сервере.
    • Блокировка файрволлом WAF (Web Application Firewall)
  • 404 – страница не найдена.
  • 500 – сервер не смог обработать запрос по причине возникшего сбоя.

Успех операции зависит от количества слов в словаре, однако, если разработчик использовал нестандартное слово, то такую ссылку вряд ли получится найти.

 

Словари

Для начала нам понадобится словарь. Kali уже имеет установленные словари, которые доступны в каталоге /usr/share/wordlists/:

Отображение словарей Wordlist

Каталог содержит папки со специальными наборами словарей для проведения различных типов сканирования. Однако я рекомендую установить дополнительные словари. Для этого в терминале выполните команду sudo apt install seclists -y.

После установки словари будут доступны в каталоге /usr/share/seclists/:

Отображение словарей Seclists

Здесь вы найдете большое разнообразие словарей для различных типов тестирования.

 

Gobuster – сканирование WackoPicko

Для начала установим программу Gobuster командой sudo apt install gobuster -y. Затем для удобства настроим переменную, которая будет содержать ссылку на сканируемое приложение командой export URL=”http://10.0.2.4/WackoPicko”.

Запустим команду со следующими опциями:

dir – сканирование каталогов и файлов,

-u $URL – ссылка на тестируемое приложение,

-w /usr/share/wordlists/dirb/common.txt – выбранный словарь.

Получаем следующий результат:

Результат сканирования WackoPicko

На некоторые запросы сервер ответил кодом 403 Forbidden. Такое происходит, когда на запрашиваемый ресурс доступ запрещен. Однако это не дает стопроцентный ответ существует или не существует данный ресурс на сервере.

Некоторые ответы содержат переадресацию, поэтому укажем программе, чтобы она переходила на переадресованные ссылки с помощью опции -r:

Оторажение каталогов и файлов после переадресации

Теперь картина немного другая. На запрос /admin сервер ответил кодом 500 Internal Server Error, причем длина ответного сообщения равна 0. То есть сервер по каким-то причинам не смог обработать запрос. Однако, если сравнить данный вывод с результатом сканирования ZAP, то выяснится, что каталог /admin все же существует, но в контексте 2-х файлов. Сам же каталог самостоятельного контента не имеет.

Кроме того, в результате работы gobuster выяснилось, что WackoPicko имеет скрытые ресурсы по адресам /error, /test.

 

Gobuster – сканирование Juice Shop

Запустите Juice Shop, затем создайте новую переменную командой export URL2=”http://127.0.0.1:3000” и запустите gobuster:

Ошибка при сканировании Juice Shop

Сразу же отображается ошибка, в сообщении нам предлагают внести в белый список код ответа 200 ОК, либо длину ответного сообщения. Лучшим вариантом будет фильтрация по длине сообщения, поэтому воспользуемся опцией --exclude-length, также добавим опцию -t для запуска нескольких потоков тестирования и задержку --delay. Делается это для уменьшения интенсивности сканирования, так как приложение не выдерживает нагрузку:

Результат сканиорования Juice Shop

Большая часть найденных ссылок помечена ответным кодом 500 Internal Server Error, однако обратите внимание на длину ответа – у всех она разная. Поэтому откроем любую ссылку в браузере и посмотрим, что содержит ответ сервера:

Страница с ошибкой Juice Shop

В самой первой строке мы видим Express 4.17.1, а под ним названия установленных файлов и каталогов на сервере. Быстрый поиск в Google фразы express 4.17.1 указывает на серверный JavaScript фреймворк. Как вы уже поняли мы нашли уязвимость в приложении, которая вызвана неправильной конфигурацией. Сообщения об ошибках неизбежны и даже иногда необходимы, но они никогда не должны выдавать отладочные и конфигурационные данные.

 

Фаззинг - Определение параметров

Фаззинг – это процесс отправки приложению и серверу большого количества корректных и некорректных запросов с целью вызвать ошибку на сайте либо какое-либо нестандартное действие, например отображение системных файлов, отказ в обслуживании (DoS), выполнение зловредного кода и многое другое. Этим мы займемся в следующих разделах, когда будем изучать некоторые веб-атаки.

Однако с помощью фаззинга можно также найти скрытые файлы/каталоги и параметры. Например, у нас имеется URL вида http://example.com?name=123, где name является параметром, который принимает определенные значения.

А что, если на сайте имеются и другие, скрытые параметры, которые могут выполнять определенные действия?

Попробуем их найти.

В качестве примера я выбрал приложение Wordpress. Проведем сканирование (crawling) каталогов и файлов в OWASP ZAP либо в любой другой подобной программе. Результат выглядит так:

Отображение GET запросов с параметрами приложения Wordpress

Многие GET запросы используют различные параметры, чьи названия указаны в скобках. Возьмем любой GET запрос с одиночным параметром, например http://10.0.2.4/wordpress/?cat=1 и откроем его в браузере, чтобы понимать, что отображает ссылка:

Страница Wordpress с параметром cat

Теперь вместо параметра cat мы попробуем использовать другие названия и понаблюдаем за реакцией сервера. В этом нам поможет программа Wfuzz. Для начала запишем тестируемую ссылку в переменную URL командой export URL=”http://10.0.2.4/wordpress/?FUZZ=1”. Обратите внимание, что название параметра мы заменили специальным маркером, в который программа будет подставлять различные значения из словаря. В качестве словаря выберем /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt.

Итоговая команда будет выглядеть так: wfuzz -c -z file, /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt --hc 404,301 "$URL", где

-c – отображает результат в различных цветах,

--z file, - указывает на словарь в файле,

--hc – фильтр, который не отображает результаты тестирования с указанными ответными кодами сервера.

Запускаем команду и сразу же у нас отображается большой список одинаковых значений:

Фильтрация одинаковых сообщений c Wfuzz

Они не представляют для нас интереса, так как сервер отвечает одинаково на несуществующий параметр, поэтому отфильтруем их. Фильтровать будем по столбцу Chars опцией --hh, после которой укажем длину 8057:

Отображение найденных параметров с помощью Wfuzz

Если сравнить результаты поиска со списком параметров в OWASP ZAP, то выяснится, что некоторые параметры в ZAP отсутствуют, например attachment и tb. Попробуем открыть ссылки с данными параметрами:

Страница со скрытым параметром attachment

Отображение страницы с параметром tb

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

С помощью программы Wfuzz мы также можем найти скрытые каталоги, файлы и поддомены. Для этого достаточно подставить маркер FUZZ в соответствующем месте URL и указать подходящий словарь.

Функциями фаззинга обладают программы OWASP ZAP и Burp Suite.

К теме фаззинга мы еще вернемся в последующих уроках.