Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2025-65018_Exploit_Challenge — CTF challenge che sfrutta un heap overflow in `png_image_finish_read` di libpng per sovrascrivere un puntatore a funzione e ottenere una shell, con script di build e generatore di exploit. | Kitploit
Strumenti/GitHubGitHub/bohemian-miser/cve-2025-65018_exploit_challenge
Analisi delle VulnerabilitàExploitCTFApprendimento e FormazioneBinary ExploitationLab e Pratica
GitHubbohemian-miser/cve-2025-65018_exploit_challenge

CVE-2025-65018_Exploit_Challenge

CTF challenge che sfrutta un heap overflow in `png_image_finish_read` di libpng per sovrascrivere un puntatore a funzione e ottenere una shell, con script di build e generatore di exploit.

Vedi Repository
129 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

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

Questa challenge è basata su una vulnerabilità reale di buffer overflow in libpng (in particolare riguardante l'API semplificata png_image_finish_read nella gestione di immagini interlacciate a 16 bit).

🚩 Obiettivo della Challenge

Ti viene fornito un binario vulnerabile victim che utilizza una versione di libpng collegata staticamente e vulnerabile. L'applicazione legge un file PNG chiamato exploit.png in un buffer.

Il tuo obiettivo è creare un file PNG dannoso che inneschi un heap overflow per sovrascrivere un puntatore a funzione nella struttura Logger (posizionata immediatamente dopo il buffer dell'immagine), reindirizzando l'esecuzione alla funzione win() per ottenere una shell.


🛠️ Setup e Compilazione

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

  1. Clona il repository:

    root@kitploit:~
    git clone --recursive https://github.com/bohemian-miser/CVE-2025-65018_Exploit_Challenge.git
    cd CVE-2025-65018_Exploit_Challenge
    
  2. Compila la challenge (inclusa libpng vulnerabile):

    root@kitploit:~
    ./build.sh
    

    Questo script:

    • Configurerà e applicherà una patch al codice sorgente di libpng incluso per abilitare la vulnerabilità.
    • Compilerà la libreria statica libpng.
    • Compilerà il binario victim.

🔍 Dettagli della Vulnerabilità

La vulnerabilità esiste nel modo in cui libpng gestisce le immagini interlacciate durante la conversione da input a 16 bit a output a 8 bit.

  1. Il Disallineamento: L'applicazione richiede un formato di output a 8 bit (PNG_FORMAT_RGBA). libpng alloca un buffer di dimensioni sufficienti per dati a 8 bit.
  2. Il Difetto: Durante l'elaborazione dei passaggi interlacciati (Adam7), la funzione interna png_combine_row scrive erroneamente i dati utilizzando la profondità di bit dell'input a 16 bit nel buffer di output.
  3. Il Risultato: Per ogni pixel, scrive 2 byte per canale invece di 1, scrivendo di fatto il doppio dei dati previsti per quella riga, causando un overflow del buffer heap.

💥 Walkthrough dello Sfruttamento

1. Trova l'Indirizzo del Target

Il binario contiene una funzione helper win() che chiama execl("/bin/sh", ...). Abbiamo bisogno del suo indirizzo. Poiché il binario è compilato con -no-pie, gli indirizzi sono statici.

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

Indirizzo Target: 0x4013e0

2. Creazione del Payload (solve.py)

Dobbiamo creare un PNG valido che:

  1. Sia Interlacciato (Adam7) per attivare il percorso di codice vulnerabile.
  2. Abbia un header (IHDR) che specifichi profondità a 16 bit.
  3. Abbia dati pixel che, quando scritti come valori a 16 bit, formino il nostro payload desiderato (l'indirizzo di win).

Lo script solve.py fa questo:

  • Costruisce un'immagine 32x32.
  • Calcola l'offset rispetto alla struttura Logger (che è 4096 byte dopo l'inizio del buffer).
  • Inserisce l'indirizzo di win nei dati pixel dell'ultima riga.
  • Comprime i dati in un chunk IDAT.

Layout del Payload: L'indirizzo di win 0x4013e0 (Little Endian: E0 13 40 00 ...) deve essere codificato in pixel RGB a 16 bit.

  • Ogni canale a 16 bit è di 2 byte.
  • Mappiamo i byte dell'indirizzo sui canali Rosso, Verde e Blu di pixel specifici nell'ultima riga.

3. Esecuzione dell'Exploit

Genera il PNG malevolo:

root@kitploit:~
python3 solve.py 4013e0

Questo crea exploit.png.

Esegui il victim:

root@kitploit:~
./victim

Output Previsto:

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

🐛 Analisi con GDB

Per vedere l'overflow in azione, puoi usare GDB.

1. Interrompi prima della chiamata vulnerabile:

root@kitploit:~
break 62
run

2. Osserva la sovrascrittura: La struttura Logger è all'offset 4096. Osserviamo il puntatore a funzione target.

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

3. Innesca: GDB si fermerà quando png_combine_row scriverà sul puntatore a funzione.

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

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

Questo conferma che libpng ha sovrascritto il nostro puntatore con l'indirizzo di win!


📁 File

  • victim.c: Codice sorgente vulnerabile.
  • solve.py: Generatore dell'exploit.
  • libpng-src/: Codice sorgente di libpng (v1.6.37).
  • build.sh: Script per compilare tutto.
  • Makefile: Sistema di build per il binario victim.
Scarica lo strumento