Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2025-65018_Exploit_Challenge — CTF-Herausforderung, die einen Heap-Overflow in libpngs png_image_finish_read ausnutzt, um einen Funktionszeiger zu überschreiben und eine Shell zu starten, mit Build-Skripten und Exploit-Generator. | Kitploit
Tools/GitHubGitHub/bohemian-miser/cve-2025-65018_exploit_challenge
SchwachstellenanalyseExploitationCTFLernen & BildungBinary-ExploitationLabs & Praxis
GitHubbohemian-miser/cve-2025-65018_exploit_challenge

CVE-2025-65018_Exploit_Challenge

CTF-Herausforderung, die einen Heap-Overflow in libpngs png_image_finish_read ausnutzt, um einen Funktionszeiger zu überschreiben und eine Shell zu starten, mit Build-Skripten und Exploit-Generator.

Repository anzeigen
12vor 9 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2025-65018 CTF-Challenge: "PNG Panic"

Diese Herausforderung basiert auf einer realen Pufferüberlauf-Schwachstelle in libpng (speziell im Umgang mit der vereinfachten API png_image_finish_read bei der Verarbeitung von 16-Bit-interlaced-Bildern).

🚩 Challenge-Ziel

Sie erhalten eine verwundbare Binärdatei victim, die eine statisch gelinkte, verwundbare Version von libpng verwendet. Die Anwendung liest eine PNG-Datei namens exploit.png in einen Puffer.

Ihr Ziel ist es, eine bösartige PNG-Datei zu erstellen, die einen Heap-Überlauf auslöst, um einen Funktionszeiger in der Logger-Struktur (unmittelbar nach dem Bildpuffer) zu überschreiben und die Ausführung zur win()-Funktion umzuleiten, um eine Shell zu starten.


🛠️ Einrichtung & Erstellung

Voraussetzungen: gcc, make, python3, git, autoconf, automake, libtool.

  1. Repository klonen:

    root@kitploit:~
    git clone --recursive https://github.com/bohemian-miser/CVE-2025-65018_Exploit_Challenge.git
    cd CVE-2025-65018_Exploit_Challenge
    
  2. Challenge erstellen (einschließlich verwundbarem libpng):

    root@kitploit:~
    ./build.sh
    

    Dieses Skript wird:

    • Den enthaltenen libpng-Quellcode konfigurieren und patchen, um die Schwachstelle zu aktivieren.
    • Die statische libpng-Bibliothek erstellen.
    • Die victim-Binärdatei kompilieren.

🔍 Schwachstellendetails

Die Schwachstelle besteht darin, wie libpng interlaced Bilder behandelt, wenn es von 16-Bit-Eingabe in 8-Bit-Ausgabe konvertiert.

  1. Die Diskrepanz: Die Anwendung fordert ein 8-Bit-Ausgabeformat (PNG_FORMAT_RGBA). libpng weist eine Puffergröße zu, die für 8-Bit-Daten ausreicht.
  2. Der Fehler: Bei der Verarbeitung von interlaced Durchgängen (Adam7) schreibt die interne Funktion png_combine_row fälschlicherweise Daten mit der 16-Bit-Farbtiefe der Eingabe in den Ausgabepuffer.
  3. Das Ergebnis: Für jedes Pixel werden 2 Bytes pro Kanal statt 1 geschrieben, wodurch effektiv die doppelte erwartete Datenmenge für diese Zeile geschrieben wird und der Heap-Puffer überläuft.

💥 Exploitation-Walkthrough

1. Zieladresse finden

Die Binärdatei enthält eine Hilfsfunktion win(), die execl("/bin/sh", ...) aufruft. Wir benötigen ihre Adresse. Da die Binärdatei mit -no-pie kompiliert wurde, sind die Adressen statisch.

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

Zieladresse: 0x4013e0

2. Erstellen des Payloads (solve.py)

Wir müssen ein gültiges PNG erstellen, das:

  1. Interlaced (Adam7) ist, um den verwundbaren Codepfad auszulösen.
  2. Einen Header (IHDR) mit 16-Bit-Farbtiefe hat.
  3. Pixeldaten hat, die, wenn sie als 16-Bit-Werte geschrieben werden, unseren gewünschten Payload (die Adresse von win) bilden.

Das Skript solve.py macht Folgendes:

  • Es erstellt ein 32x32-Bild.
  • Es berechnet den Offset zur Logger-Struktur (die 4096 Bytes nach dem Start des Puffers liegt).
  • Es platziert die win-Adresse in den Pixeldaten der letzten Zeile.
  • Es komprimiert die Daten in einen IDAT-Chunk.

Payload-Layout: Die win-Adresse 0x4013e0 (Little Endian: E0 13 40 00 ...) muss in 16-Bit-RGB-Pixel codiert werden.

  • Jeder 16-Bit-Kanal ist 2 Bytes.
  • Wir ordnen die Bytes der Adresse den Rot-, Grün- und Blau-Kanälen bestimmter Pixel in der letzten Zeile zu.

3. Ausführen des Exploits

Generieren des bösartigen PNG:

root@kitploit:~
python3 solve.py 4013e0

Dies erstellt exploit.png.

Ausführen des Opfers:

root@kitploit:~
./victim

Erwartete Ausgabe:

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

🐛 GDB-Analyse

Um den Überlauf in Aktion zu sehen, können Sie GDB verwenden.

1. Breakpoint vor dem verwundbaren Aufruf setzen:

root@kitploit:~
break 62
run

2. Überschreiben beobachten: Die Logger-Struktur befindet sich bei Offset 4096. Beobachten wir den Ziel-Funktionszeiger.

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

3. Auslösen: GDB wird anhalten, wenn png_combine_row in den Funktionszeiger schreibt.

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

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

Dies bestätigt, dass libpng unseren Zeiger mit der Adresse von win überschrieben hat!


📁 Dateien

  • victim.c: Verwundbarer Quellcode.
  • solve.py: Exploit-Generator.
  • libpng-src/: Quellcode für libpng (v1.6.37).
  • build.sh: Skript zum Kompilieren aller Komponenten.
  • Makefile: Build-System für die victim-Binärdatei.
Tool herunterladen