Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
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.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2002-1120 — Estouro de buffer clássico baseado em pilha no Savant Web Server 3.1 demonstrando corrupção remota de memória do início dos anos 2000 através de uma requisição HTTP maliciosa. | Kitploit
Ferramentas/GitHubGitHub/themalwareguardian/cve-2002-1120
Análise de VulnerabilidadesExploraçãoEngenharia ReversaShellcodeDepuradoresSegurança WebFuzzingTestes de PenetraçãoAprendizado e Educação

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
Desenvolvimento de Payloads
Exploração de Binários
GitHubthemalwareguardian/cve-2002-1120

CVE-2002-1120

Estouro de buffer clássico baseado em pilha no Savant Web Server 3.1 demonstrando corrupção remota de memória do início dos anos 2000 através de uma requisição HTTP maliciosa.

Ver Repositório
1há 5 mesesAinda não revisado

🐞 CVE-2002-1120: Savant Web Server 3.1 - Buffer Overflow Baseado em Pilha (Egghunter)

Clássico buffer overflow baseado em pilha no Savant Web Server 3.1 demonstrando uma corrupção de memória remota do início dos anos 2000 através de uma requisição HTTP maliciosa (uma vulnerabilidade de 2002 que exige mais de um iniciante do que a maioria dos CVEs de buffer overflow de 2025).




📑 Índice

  • Por que este repositório existe
  • Por que esta vulnerabilidade é interessante
  • Contexto e software afetado
  • Sobre a vulnerabilidade
  • Disparando a falha
  • Exploração



🎓 Por que este repositório existe

Este repositório faz parte do material que utilizo ao ensinar exploração de corrupção de memória (além do meu trabalho regular, também leciono em diferentes cursos de cibersegurança onde ajudo a treinar a próxima geração de engenheiros reversos). Quando abordo buffer overflows baseados em pilha em sala de aula, trabalho com casos reais em vez de exemplos de brinquedo, e este CVE é um ao qual retorno especificamente quando quero desafiar alunos que já têm alguma experiência com sobrescritas básicas de EIP.

A razão é que o ano em um identificador CVE não diz nada sobre o quão difícil é a exploração. A maioria dos alunos assume que CVEs mais antigos devem ser mais simples — um overflow direto, um JMP ESP, pronto. Este prova o contrário. Alguns CVEs que ensino de 2025 são fundamentalmente mais básicos do que este, porque a classe de vulnerabilidade é mais simples ou as restrições são menores. CVE-2002-1120 exige a compreensão de coisas que alguns exploits modernos não demandam: por que certos opcodes não podem ser usados em certas partes da requisição, como construir um salto condicional que sempre dispare quando o incondicional está bloqueado, como entregar shellcode quando ele não cabe onde você normalmente o colocaria, e como um egghunter resolve um problema de espaço que, de outra forma, tornaria o exploit impossível.

É o CVE que atribuo quando quero ver se alguém realmente entende o que está fazendo.




💡 Por que esta vulnerabilidade é interessante

Esta vulnerabilidade afeta o Savant 3.1, um servidor HTTP gratuito para Windows de 2002. O que a torna digna de estudo em 2025 não é a idade, mas a combinação de restrições que ela introduz e as técnicas necessárias para contorná-las:

  • Sem espaço após o EIP. O buffer utilizável tem ~267 bytes antes do endereço de retorno. Qualquer coisa além disso não atinge o buffer vulnerável, então o shellcode não pode ser colocado no local habitual após o EIP.
  • O campo do método HTTP é executável. O Savant copia o método para a memória e o executa. Os bytes que normalmente soletram GET são tratados como código, o que significa que um atacante pode colocar opcodes ali, mas apenas opcodes que sobrevivem a um filtro rigoroso de caracteres proibidos.
  • Duas listas separadas de caracteres proibidos. A URI e o campo de método têm lógicas de filtragem diferentes dentro do Savant. Ambas devem ser analisadas independentemente. A zona do método bloqueia um conjunto muito maior de bytes do que a URI.
  • O JMP incondicional é um caractere proibido. \xeb não passa no filtro da zona do método. Um salto condicional que sempre dispare deve ser construído manualmente usando três opcodes: carregar um valor em um registrador, compará-lo com um valor menor e saltar se o resultado não for menor ou igual.
  • O shellcode não cabe. Mesmo com o salto funcionando e a execução aterrissando no buffer da URI, ~264 bytes não são suficientes para um reverse shell. O payload real deve ir para outro lugar, no corpo do HTTP, que o Savant armazena em uma região de heap separada da pilha, e um egghunter é necessário para localizá-lo em tempo de execução.

Cada uma dessas restrições é uma lição por si só.




🔍 Contexto e software afetado

Baixar ferramenta

Savant é um servidor HTTP gratuito e de código aberto para Windows, originalmente projetado para transformar qualquer computador desktop em um servidor web. Ele escuta na porta TCP 80 e processa requisições HTTP GET padrão. O overflow ocorre no manipulador que copia o caminho da URI para um buffer de pilha de tamanho fixo sem validar seu comprimento.

Detalhes técnicos principais:

  • Tipo de vulnerabilidade: Buffer overflow baseado em pilha
  • Versão afetada: Savant Web Server 3.1
  • Endpoint afetado: Requisição HTTP GET
  • Componente vulnerável: Manipulação do caminho da URI no manipulador GET
  • Autenticação necessária: Não
  • Impacto: Execução remota de código



⚠️ Sobre a vulnerabilidade

O Savant processa requisições HTTP GET recebidas e copia o caminho da URI para um buffer de pilha de tamanho fixo sem verificar seu comprimento. Uma versão simplificada da lógica vulnerável se parece com isso:

root@kitploit:~
char uri_buffer[270];

strcpy(uri_buffer, uri_path);

Enviar uma requisição GET com uma URI de aproximadamente 271 bytes sobrescreve o endereço de retorno salvo na pilha. O overflow é restrito — enviar significativamente mais do que isso causa a falha de uma forma que EIP não é mais controlado, então a janela utilizável é estreita.

A exploração é mais complexa do que uma sobrescrita padrão de EIP devido a duas propriedades adicionais do servidor: o campo do método HTTP também é copiado para a memória e executado, e o corpo da requisição HTTP é armazenado em uma região de heap separada, em vez da pilha (ambas as propriedades se tornam partes essenciais da cadeia de exploração).




💥 Disparando a falha

A falha pode ser reproduzida enviando uma requisição GET com uma URI suficientemente longa. Nenhuma autenticação é necessária. Exemplo usando Python:

root@kitploit:~
import socket

HOST = '127.0.0.1'
PORT = 80

payload = b"A" * 271

request = (
	b"GET /" + payload + b" HTTP/1.1\r\n"
	b"Host: 127.0.0.1\r\n"
	b"Connection: close\r\n"
	b"\r\n"
)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()

Quando executado sob um depurador, a falha mostra o EIP sobrescrito com dados controlados pelo usuário:

root@kitploit:~
EIP = 41414141

confirmando que o endereço de retorno salvo foi corrompido pelo overflow.




💣 Exploração

O objetivo deste repositório não é apenas demonstrar a falha, mas percorrer todo o processo de exploração passo a passo, incluindo cada restrição que torna este caso mais difícil do que uma sobrescrita padrão de EIP e cada decisão tomada para contorná-las.

Para manter o README principal limpo, as notas detalhadas de exploração, scripts e etapas do depurador estão colocadas dentro da pasta Vulnerabilidade 📂 deste repositório.

Lá você encontrará o fluxo de trabalho completo usado para explorar este CVE, incluindo:

  • Fuzzing da URI GET para identificar a janela da falha.
  • Descoberta manual do offset (padrões cíclicos não podem ser usados aqui).
  • Análise de caracteres proibidos para a zona da URI e o campo do método HTTP separadamente.
  • Encontrar um gadget POP / RET no Savant.exe para a sobrescrita do EIP.
  • Confirmar que a execução aterrissa no campo do método após o gadget disparar.
  • Criar um salto condicional JNLE para alcançar o buffer da URI a partir do campo do método.
  • Localizar o corpo do HTTP no heap e medir o espaço disponível.
  • Colocar um egghunter no buffer da URI e o shellcode marcado com o ovo no corpo do HTTP.