Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/bohemian-miser/cve-2025-65018_exploit_challenge
Analyse des VulnérabilitésExploitationCTFApprentissage et ÉducationExploitation de BinairesLabs et Pratique
GitHubbohemian-miser/cve-2025-65018_exploit_challenge

CVE-2025-65018_Exploit_Challenge

Défi CTF exploitant un débordement de tas dans png_image_finish_read de libpng pour écraser un pointeur de fonction et lancer un shell, avec des scripts de construction et un générateur d'exploit.

Voir le dépôt
12il y a 9 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Défi CTF CVE-2025-65018 : « PNG Panic »

Ce défi est basé sur une vulnérabilité réelle de débordement de tampon dans libpng (concernant plus précisément l'API simplifiée png_image_finish_read lors du traitement d'images entrelacées 16 bits).

🚩 Objectif du défi

Vous disposez d'un binaire vulnérable victim qui utilise une version statiquement liée et vulnérable de libpng. L'application lit un fichier PNG nommé exploit.png dans un tampon.

Votre objectif est de créer un fichier PNG malveillant qui déclenche un débordement de tas afin d'écraser un pointeur de fonction dans la structure Logger (située immédiatement après le tampon d'image), redirigeant l'exécution vers la fonction win() pour lancer un shell.


🛠️ Installation et compilation

Prérequis : gcc, make, python3, git, autoconf, automake, libtool.

  1. Clonez le dépôt :

    root@kitploit:~
    git clone --recursive https://github.com/bohemian-miser/CVE-2025-65018_Exploit_Challenge.git
    cd CVE-2025-65018_Exploit_Challenge
    
  2. Compilez le défi (avec le libpng vulnérable) :

    root@kitploit:~
    ./build.sh
    

    Ce script va :

    • Configurer et patcher le code source libpng inclus pour activer la vulnérabilité.
    • Compiler la bibliothèque statique libpng.
    • Compiler le binaire victim.

🔍 Détails de la vulnérabilité

La vulnérabilité réside dans la façon dont libpng gère les images entrelacées lors de la conversion d'une entrée 16 bits vers une sortie 8 bits.

  1. L'inadéquation : L'application demande un format de sortie 8 bits (PNG_FORMAT_RGBA). libpng alloue un tampon d'une taille suffisante pour des données 8 bits.
  2. Le défaut : Lors du traitement des passes entrelacées (Adam7), la fonction interne png_combine_row écrit incorrectement des données dans le tampon de sortie en utilisant la profondeur de bits 16 bits de l'entrée.
  3. Le résultat : Pour chaque pixel, elle écrit 2 octets par canal au lieu de 1, écrivant ainsi le double de la quantité de données attendue pour cette ligne, ce qui fait déborder le tampon du tas.

💥 Déroulement de l'exploitation

1. Trouver l'adresse cible

Le binaire contient une fonction auxiliaire win() qui appelle execl("/bin/sh", ...). Nous avons besoin de son adresse. Comme le binaire est compilé avec -no-pie, les adresses sont statiques.

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

Adresse cible : 0x4013e0

2. Création de la charge utile (solve.py)

Nous devons créer un PNG valide qui :

  1. Est entrelacé (Adam7) pour déclencher le chemin de code vulnérable.
  2. Possède un en-tête (IHDR) spécifiant une profondeur de 16 bits.
  3. Possède des données de pixels qui, lorsqu'elles sont écrites sous forme de valeurs 16 bits, forment notre charge utile souhaitée (l'adresse de win).

Le script solve.py fait ceci :

  • Il construit une image 32x32.
  • Il calcule le décalage jusqu'à la structure Logger (située à 4096 octets du début du tampon).
  • Il place l'adresse de win dans les données de pixels de la dernière ligne.
  • Il compresse les données dans un bloc IDAT.

Disposition de la charge utile : L'adresse de win 0x4013e0 (Little Endian : E0 13 40 00 ...) doit être encodée dans des pixels RVB 16 bits.

  • Chaque canal 16 bits fait 2 octets.
  • Nous faisons correspondre les octets de l'adresse aux canaux Rouge, Vert et Bleu de pixels spécifiques de la dernière ligne.

3. Exécution de l'exploit

Générez le PNG malveillant :

root@kitploit:~
python3 solve.py 4013e0

Ceci crée exploit.png.

Exécutez le binaire victime :

root@kitploit:~
./victim

Sortie attendue :

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...
$ 

🐛 Analyse avec GDB

Pour voir le débordement en action, vous pouvez utiliser GDB.

1. Placez un point d'arrêt avant l'appel vulnérable :

root@kitploit:~
break 62
run

2. Surveillez l'écrasement : La structure Logger se trouve à un décalage de 4096 octets. Surveillons le pointeur de fonction cible.

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

3. Déclenchement : GDB s'arrêtera lorsque png_combine_row écrira dans le pointeur de fonction.

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

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

Cela confirme que libpng a écrasé notre pointeur avec l'adresse de win !


📁 Fichiers

  • victim.c : Code source vulnérable.
  • solve.py : Générateur d'exploit.
  • libpng-src/ : Code source de libpng (v1.6.37).
  • build.sh : Script de compilation de l'ensemble.
  • Makefile : Système de construction du binaire victime.
Télécharger l’outil