Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
PoC_CVE-2019-0217 — Эксплойт (proof-of-concept) для CVE-2019-0217, состояние гонки в mod_auth_digest Apache HTTP Server, позволяющее обход аутентификации. Включает уязвимую среду на основе Docker и скрипт автоматизации Burp Turbo Intruder. | Kitploit
Инструменты/GitHubGitHub/savsch/poc_cve-2019-0217
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеАутентификацияОбучение и Образование
GitHubsavsch/poc_cve-2019-0217

PoC_CVE-2019-0217

Эксплойт (proof-of-concept) для CVE-2019-0217, состояние гонки в mod_auth_digest Apache HTTP Server, позволяющее обход аутентификации. Включает уязвимую среду на основе Docker и скрипт автоматизации Burp Turbo Intruder.

Репозиторий
1 год назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Этот репозиторий содержит эксплойт для доказательства концепции уязвимости CVE-2019-0217, а также Dockerfile для настройки веб-сервера, уязвимого для этой CVE.

Описание CVE

В Apache HTTP Server 2.4 версии 2.4.38 и более ранних, состояние гонки в mod_auth_digest при работе в многопоточном сервере могло позволить пользователю с действительными учетными данными аутентифицироваться под другим именем пользователя, обходя настроенные ограничения контроля доступа.

Предыстория

HTTP Digest Authentication

Когда клиент пытается получить доступ к ресурсу, защищенному HTTP Digest Auth, сервер отвечает кодом статуса 401 вместе с заголовком WWW-Authenticate, примерно следующего формата:

root@kitploit:~
Digest realm="rlm", nonce="TToc8M0jBgA=7afa4f292c97632a6c17eec458d3db31021b111f", algorithm=MD5, qop="auth"

Клиент вычисляет HA1, который является md5-дайджестом A1 (т.е. username:realm:password), а затем добавляет к нему nonce и другие метаданные, такие как cnonce, чтобы получить A2, чей md5-дайджест в свою очередь дает HA2, который клиент отправляет в качестве ответа вместе с именем пользователя, cnonce и другими метаданными, в заголовке Authentication:

root@kitploit:~
'Digest username="attacker", realm="rlm", nonce="TToc8M0jBgA=7afa4f292c97632a6c17eec458d3db31021b111f", uri="/scripts/userprofile.cgi", response="bcb433e4071fa228fe0c9452a7495efd", algorithm="MD5", qop="auth", nc=00000001, cnonce="2309510923095109"
                 ^^^^^^^^^^

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

Анализ уязвимости

Уязвимость была исправлена в этом коммите. Глядя на код модуля mod_auth_digest (в частности, функцию get_hash в mod_auth_digest.c), очевидно, что сервер сначала парсит заголовок Authentication, чтобы определить, что находится в кавычках после username=, и это он рассматривает как пользователя, связанного с запросом (r->user). Затем он проверяет, имеет ли этот "пользователь" доступ к запрашиваемому ресурсу или нет. Если имеет, функция get_hash извлекает соответствующий HA1 из файла аутентификации. До коммита с исправлением уязвимости полученный таким образом HA1 хранился в переменной conf = (digest_config_rec *) ap_get_module_config(r->per_dir_config,&auth_digest_module), которая, очевидно, не является потокобезопасной.

Что дает нам эксплойт:

Эксплойт

Предыстория

Основываясь на разделе анализа уязвимости выше, должно быть возможно создать состояние гонки, одновременно отправляя запросы с действительным заголовком Authentication вместе с запросами с поддельным заголовком Authentication (который совпадает с действительным, но со значением username=, установленным на целевого пользователя (под которого злоумышленник хочет аутентифицироваться)).

Терминология, используемая в этом эксплойте: - Злоумышленник: пользователь, запускающий этот эксплойт. У него есть действительное имя пользователя и пароль для своей учетной записи. - Жертва: пользователь, под которого злоумышленник хочет выдать себя. Имя пользователя жертвы известно, но пароль (очевидно) нет.

Я смог заставить этот метод работать, запуская множество потоков Python, некоторые из которых отправляли запросы первого типа, а другие — второго, но это было ненадежно и требовало большого количества запросов для успеха. Это привело меня к использованию Turbo Intruder от Burp (бесплатно), который надежно отправляет запросы параллельно. К сожалению, поддержка CLI в Turbo Intruder не работает, поэтому некоторые части эксплойта необходимо выполнять с помощью GUI.

Настройка уязвимой среды

Чтобы использовать образец уязвимого сервера, который я включил в этот репозиторий, выполните:

root@kitploit:~
$ cd sample_vulnerable_server
$ docker build -t poc_httpd .
$ docker run -p 8038:80 poc_httpd

Непосредственно эксплойт

Запустите generate_turbo_intruder_script.py, предварительно настроив переменные вверху:

root@kitploit:~
# Configuration
URL = 'http://localhost:8038/scripts/userprofile.cgi' # location to the resource protected by digest auth
ATTACKER_USERNAME = 'attacker'
ATTACKER_PASSWORD = 'known'
VICTIM_USERNAME = 'victim'
NUMBER_OF_REQUESTS = 2000 # number of concurrent requests sent to catch a glimpse of the race condition

Этот скрипт затем генерирует два файла, generated/turbo_intruder_script.py и generated/request.txt, в текущем каталоге.

Теперь откройте BurpSuite Community Edition и установите расширение "Turbo Intruder", перейдя в Extensions -> BApp Store, если вы еще этого не сделали.

Откройте Repeater в Burp. Установите хост и порт цели: image

Вставьте содержимое generated/request.txt в секцию Request: image

Щелкните правой кнопкой мыши в любом месте секции Request и выберите 'Extensions->Turbo Intruder->Send to Turbo Intruder': image

Вставьте содержимое generated/turbo_intruder_script.py в секцию скрипта: image

Наконец, нажмите кнопку Attack внизу окна Turbo Intruder. Он должен показать любые успешные результаты на появившемся экране: image

Скачать инструмент