Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2002-1120 — Desbordamiento de búfer clásico basado en pila en Savant Web Server 3.1 que demuestra la corrupción de memoria remota de principios de los 2000 mediante una solicitud HTTP manipulada. | Kitploit
Herramientas/GitHubGitHub/themalwareguardian/cve-2002-1120
Análisis de VulnerabilidadesExplotaciónIngeniería InversaShellcodeDepuradoresSeguridad WebFuzzingPruebas de PenetraciónAprendizaje y Educación

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Desarrollo de Payloads
Explotación de Binarios
GitHubthemalwareguardian/cve-2002-1120

CVE-2002-1120

Desbordamiento de búfer clásico basado en pila en Savant Web Server 3.1 que demuestra la corrupción de memoria remota de principios de los 2000 mediante una solicitud HTTP manipulada.

Ver Repositorio
1hace 5 mesesAún no revisado

🐞 CVE-2002-1120: Savant Web Server 3.1 - Desbordamiento de búfer basado en pila (Egghunter)

Desbordamiento de búfer basado en pila clásico en Savant Web Server 3.1 que demuestra la corrupción remota de memoria de principios de los 2000 mediante una petición HTTP manipulada (una vulnerabilidad de 2002 que exige más a un principiante que la mayoría de los CVEs de desbordamiento de búfer de 2025).




📑 Tabla de contenido

  • Por qué existe este repositorio
  • Por qué esta vulnerabilidad es interesante
  • Contexto y software afectado
  • Sobre la vulnerabilidad
  • Provocando el fallo
  • Explotación



🎓 Por qué existe este repositorio

Este repositorio forma parte del material que utilizo cuando enseño explotación de corrupción de memoria (además de mi trabajo habitual, también imparto clases en diferentes cursos de ciberseguridad donde ayudo a formar a la próxima generación de ingenieros inversos). Cuando cubro desbordamientos de búfer basados en pila en clase, trabajo con casos reales en lugar de ejemplos de juguete, y este CVE es uno al que recurro específicamente cuando quiero poner a prueba a estudiantes que ya tienen algo de experiencia con sobrescrituras básicas de EIP.

La razón es que el año en un identificador CVE no dice nada sobre lo difícil que es la explotación. La mayoría de los estudiantes asumen que los CVEs más antiguos deben ser más simples: un desbordamiento directo, un JMP ESP y listo. Este demuestra lo contrario. Algunos CVEs que enseño de 2025 son fundamentalmente más básicos que este, porque la clase de vulnerabilidad es más simple o hay menos restricciones. CVE-2002-1120 requiere comprender cosas que algunos exploits modernos no exigen: por qué ciertos opcodes no pueden usarse en ciertas partes de la petición, cómo construir un salto condicional que siempre se ejecute cuando el incondicional está bloqueado, cómo entregar shellcode cuando no cabe donde normalmente lo pondrías, y cómo un egghunter resuelve un problema de espacio que de otro modo haría imposible el exploit.

Es el CVE que asigno cuando quiero ver si alguien realmente entiende lo que está haciendo.




💡 Por qué esta vulnerabilidad es interesante

Esta vulnerabilidad afecta a Savant 3.1, un servidor HTTP gratuito para Windows de 2002. Lo que hace que valga la pena estudiarlo en 2025 no es la antigüedad, sino la combinación de restricciones que introduce y las técnicas necesarias para sortearlas:

  • Sin espacio después de EIP. El búfer utilizable es de ~267 bytes antes de la dirección de retorno. Cualquier cosa más allá de eso no llega al búfer vulnerable, por lo que el shellcode no puede colocarse en la ubicación habitual después de EIP.
  • El campo de método HTTP es ejecutable. Savant copia el método en memoria y lo ejecuta. Los bytes que normalmente forman GET se tratan como código, lo que significa que un atacante puede colocar opcodes allí, pero solo opcodes que sobrevivan a un estricto filtro de caracteres malos.
  • Dos listas de caracteres malos separadas. La URI y el campo de método tienen una lógica de filtrado diferente dentro de Savant. Ambos deben analizarse de forma independiente. La zona del método bloquea un conjunto de bytes mucho mayor que la URI.
  • El JMP incondicional es un carácter malo. \xeb no pasa el filtro de la zona del método. Un salto condicional que siempre se ejecuta debe construirse manualmente usando tres opcodes: cargar un valor en un registro, compararlo con un valor más pequeño y saltar si el resultado no es menor o igual.
  • El shellcode no cabe. Incluso con el salto funcionando y la ejecución aterrizando en el búfer de la URI, ~264 bytes no son suficientes para una reverse shell. La carga útil real debe ir a otro lugar, en el cuerpo HTTP, que Savant almacena en una región del heap separada de la pila, y se necesita un egghunter para localizarla en tiempo de ejecución.

Cada una de estas restricciones es una lección en sí misma.




Descargar herramienta
🔍 Contexto y software afectado

Savant es un servidor HTTP gratuito y de código abierto para Windows, diseñado originalmente para convertir cualquier computadora de escritorio en un servidor web. Escucha en el puerto TCP 80 y procesa peticiones GET HTTP estándar. El desbordamiento ocurre en el manejador que copia la ruta de la URI en un búfer de pila de tamaño fijo sin validar su longitud.

Detalles técnicos clave:

  • Tipo de vulnerabilidad: Desbordamiento de búfer basado en pila
  • Versión afectada: Savant Web Server 3.1
  • Endpoint afectado: Petición GET HTTP
  • Componente vulnerable: Manejo de la ruta de la URI en el manejador GET
  • Autenticación requerida: No
  • Impacto: Ejecución remota de código



⚠️ Sobre la vulnerabilidad

Savant procesa las peticiones GET HTTP entrantes y copia la ruta de la URI en un búfer de pila de tamaño fijo sin comprobar su longitud. Una versión simplificada de la lógica vulnerable se ve así:

root@kitploit:~
char uri_buffer[270];

strcpy(uri_buffer, uri_path);

Enviar una petición GET con una URI de aproximadamente 271 bytes sobrescribe la dirección de retorno guardada en la pila. El desbordamiento está restringido; enviar significativamente más que eso provoca el fallo de una manera en la que EIP ya no está controlado, por lo que la ventana utilizable es estrecha.

La explotación es más compleja que una sobrescritura estándar de EIP debido a dos propiedades adicionales del servidor: el campo de método HTTP también se copia en memoria y se ejecuta, y el cuerpo de la petición HTTP se almacena en una región separada del heap en lugar de en la pila (ambas propiedades se convierten en partes esenciales de la cadena de explotación).




💥 Provocando el fallo

El fallo se puede reproducir enviando una petición GET con una URI lo suficientemente larga. No se requiere autenticación. Ejemplo 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()

Cuando se ejecuta bajo un depurador, el fallo muestra EIP sobrescrito con datos controlados por el usuario:

root@kitploit:~
EIP = 41414141

confirmando que la dirección de retorno guardada ha sido corrompida por el desbordamiento.




💣 Explotación

El objetivo de este repositorio no es solo demostrar el fallo, sino recorrer el proceso completo de explotación paso a paso, incluyendo cada restricción que hace que este caso sea más difícil que una sobrescritura estándar de EIP y cada decisión tomada para sortearlas.

Para mantener limpio el README principal, las notas detalladas de explotación, los scripts y los pasos del depurador se encuentran dentro de la carpeta Vulnerability 📂 de este repositorio.

Allí encontrarás el flujo de trabajo completo utilizado para explotar este CVE, incluyendo:

  • Fuzzing de la URI GET para identificar la ventana del fallo.
  • Descubrimiento manual del offset (los patrones cíclicos no se pueden usar aquí).
  • Análisis de caracteres malos tanto para la zona de la URI como para el campo de método HTTP por separado.
  • Encontrar un gadget POP / RET en Savant.exe para la sobrescritura de EIP.
  • Confirmar que la ejecución aterriza en el campo de método después de que se ejecute el gadget.
  • Construir un salto condicional JNLE para alcanzar el búfer de la URI desde el campo de método.
  • Localizar el cuerpo HTTP en el heap y medir el espacio disponible.
  • Colocar un egghunter en el búfer de la URI y el shellcode etiquetado con el egg en el cuerpo HTTP.