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
Herramientas/GitHubGitHub/bohemian-miser/cve-2025-65018_exploit_challenge
Análisis de VulnerabilidadesExplotaciónCTFAprendizaje y EducaciónExplotación de BinariosLabs y Práctica
GitHubbohemian-miser/cve-2025-65018_exploit_challenge

CVE-2025-65018_Exploit_Challenge

Ver Repositorio

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
hace 8 mesesAún no revisado

CVE-2025-65018 Desafío CTF: "PNG Panic"

Este desafío se basa en una vulnerabilidad real de desbordamiento de búfer en libpng (específicamente relacionada con la API simplificada png_image_finish_read al manejar imágenes entrelazadas de 16 bits).

🚩 Objetivo del Desafío

Se te proporciona un binario vulnerable victim que utiliza una versión estáticamente enlazada y vulnerable de libpng. La aplicación lee un archivo PNG llamado exploit.png en un búfer.

Tu objetivo es crear un archivo PNG malicioso que provoque un desbordamiento de montón para sobrescribir un puntero de función en la estructura Logger (ubicada inmediatamente después del búfer de imagen), redirigiendo la ejecución a la función win() para lanzar una shell.


🛠️ Configuración y Compilación

Requisitos previos: gcc, make, python3, git, autoconf, automake, libtool.

  1. Clona el repositorio:

    root@kitploit:~
    git clone --recursive https://github.com/bohemian-miser/CVE-2025-65018_Exploit_Challenge.git
    cd CVE-2025-65018_Exploit_Challenge
    
  2. Compila el desafío (incluyendo la libpng vulnerable):

    root@kitploit:~
    ./build.sh
    

    Este script:

    • Configurará y parcheará el código fuente incluido de libpng para habilitar la vulnerabilidad.
    • Compilará la biblioteca estática libpng.
    • Compilará el binario victim.

🔍 Detalles de la Vulnerabilidad

La vulnerabilidad radica en cómo libpng maneja las imágenes entrelazadas al convertir de una entrada de 16 bits a una salida de 8 bits.

  1. El desajuste: La aplicación solicita un formato de salida de 8 bits (PNG_FORMAT_RGBA). libpng asigna un tamaño de búfer suficiente para datos de 8 bits.
  2. El fallo: Durante el procesamiento de los pases entrelazados (Adam7), la función interna png_combine_row escribe incorrectamente datos utilizando la profundidad de bits de 16 bits de la entrada en el búfer de salida.
  3. El resultado: Por cada píxel, escribe 2 bytes por canal en lugar de 1, escribiendo efectivamente el doble de la cantidad de datos esperada para esa fila, desbordando el búfer del montón.

💥 Guía de Explotación

1. Encuentra la dirección objetivo

El binario contiene una función auxiliar win() que llama a execl("/bin/sh", ...). Necesitamos su dirección. Dado que el binario está compilado con -no-pie, las direcciones son estáticas.

root@kitploit:~
nm victim | grep win
# Output: 00000000004013e0 T win

Dirección objetivo: 0x4013e0

2. Creando el payload (solve.py)

Necesitamos crear un PNG válido que:

  1. Sea entrelazado (Adam7) para activar la ruta de código vulnerable.
  2. Tenga un encabezado (IHDR) que especifique una profundidad de 16 bits.
  3. Tenga datos de píxeles que, al escribirse como valores de 16 bits, formen nuestro payload deseado (la dirección de win).

El script solve.py hace lo siguiente:

  • Construye una imagen de 32x32.
  • Calcula el desplazamiento hasta la estructura Logger (que está a 4096 bytes del inicio del búfer).
  • Coloca la dirección de win en los datos de píxeles de la última fila.
  • Comprime los datos en un chunk IDAT.

Diseño del payload: La dirección de win 0x4013e0 (Little Endian: E0 13 40 00 ...) debe codificarse en píxeles RGB de 16 bits.

  • Cada canal de 16 bits ocupa 2 bytes.
  • Mapeamos los bytes de la dirección a los canales rojo, verde y azul de píxeles específicos de la última fila.

3. Ejecutando el exploit

Genera el PNG malicioso:

root@kitploit:~
python3 solve.py 4013e0

Esto crea exploit.png.

Ejecuta el binario victim:

root@kitploit:~
./victim

Salida esperada:

root@kitploit:~
[*] Win function is at: 0x4013e0
[*] Buffer at: 0x7ffd51353530
[*] Logger at: 0x7ffd51354530
[*] Offset from buffer start to logger: 4096 bytes
[*] Processing image...
[+] png_image_finish_read success
[*] Calling logger...
[*] Hacked! Spawning shell...
$ 

🐛 Análisis con GDB

Para ver el desbordamiento en acción, puedes usar GDB.

1. Poner un breakpoint antes de la llamada vulnerable:

root@kitploit:~
break 62
run

2. Observa la sobrescritura: La estructura Logger está en el desplazamiento 4096. Vamos a observar el puntero de función objetivo.

root@kitploit:~
print &ctx.logger.log_func
# $1 = (void (**)(const char *)) 0x7fffffffc8f0
watch *0x7fffffffc8f0
continue

3. Activa la vulnerabilidad: GDB se detendrá cuando png_combine_row escriba en el puntero de función.

root@kitploit:~
Hardware watchpoint 2: *0x7fffffffc8f0

Old value = 4199366  (0x4013c6 <normal_log>)
New value = 4199392  (0x4013e0 <win>)
0x00007ffff7e024d9 in __memcpy_avx_unaligned_erms ()

¡Esto confirma que libpng sobrescribió nuestro puntero con la dirección de win!


📁 Archivos

  • victim.c: Código fuente vulnerable.
  • solve.py: Generador del exploit.
  • libpng-src/: Código fuente de libpng (v1.6.37).
  • build.sh: Script para compilar todo.
  • Makefile: Sistema de compilación para el binario victim.
Descargar herramienta