
🔍Strumento di analisi heap per CTF pwn.
Pwnning è un'arte.
HeapInspect è progettato per rendere heap molto più carino.
Ora questo strumento è un plugin di nadbg. Provatelo!
HeapShower (dettagliato)PrettyPrinter (colorato, riassunto)Un uso rapido di questo strumento.




Puoi anche usarlo come plugin per gdb, molto utile quando pwndbg o altri plugin non riescono ad analizzare l'heap.
sed -i "1i source `pwd`/gdbscript.py" ~/.gdbinit # in alternativa, puoi aggiungere quella riga manualmente
Nota



Abbastanza facile da usare. Lo trasformerò in un pacchetto più avanti.
from heapinspect.core import *
hi = HeapInspector(1234) #pid qui
hs = HeapShower(hi)
print(hs.fastbins)
print(hs.smallbins)
print(hs.largebins)
print(hs.unsortedbins)
print(hs.tcache_chunks)
hs.relative = 1 #modalità relativa, vedi Esempio rapido
print(hs.fastbins)
sleep(10)
#ora supponiamo che lo stato dell'heap sia cambiato
hs.update() #usa questo per aggiornare
pp = PrettyPrinter(hi)
print(pp.all) #pretty printer
pp.update() #usa questo per aggiornare
Ci sono alcuni casi di test.
heapinspect/tests/ $ python test.py #questo eseguirà tutti i casi di test per verificare questo strumento.
......
......
test case unsortedbins64 at test/testcases/libc-2.27/64bit
pid:6704
========================= fastbins =========================
========================= unsortedbins =========================
chunk(0x7f9aae2e6720): prev_size=0x0 size=0xb1 fd=0x7f9aacdfbca0 bk=0x7f9aae2e6880
chunk(0x7f9aae2e6880): prev_size=0x0 size=0xb1 fd=0x7f9aae2e6720 bk=0x7f9aacdfbca0
========================= smallbins =========================
========================= largebins =========================
========================= tcache =========================
tcache[9]:
chunk(0x7f9aae2e6670): prev_size=0x0 size=0xb1 fd=0x7f9aae2e65d0 bk=0x0
chunk(0x7f9aae2e65c0): prev_size=0x0 size=0xb1 fd=0x7f9aae2e6520 bk=0x0
chunk(0x7f9aae2e6510): prev_size=0x0 size=0xb1 fd=0x7f9aae2e6470 bk=0x0
chunk(0x7f9aae2e6460): prev_size=0x0 size=0xb1 fd=0x7f9aae2e63c0 bk=0x0
chunk(0x7f9aae2e63b0): prev_size=0x0 size=0xb1 fd=0x7f9aae2e6310 bk=0x0
chunk(0x7f9aae2e6300): prev_size=0x0 size=0xb1 fd=0x7f9aae2e6260 bk=0x0
chunk(0x7f9aae2e6250): prev_size=0x0 size=0xb1 fd=0x0 bk=0x0
Docstring dettagliate sono state scritte nel codice sorgente.
Ho creato una documentazione sphinx in docs. Basta aprire docs/build/html/index.html con il tuo browser.
aggiornamento documentazione.
non un aggiornamento funzionale.
prima release
la prossima versione sarà una release.
questa non è una versione stabile. Sto cercando di risolvere bug dovuti a diverse versioni di glibc. Ho bisogno di aiuto per testarlo.
la prossima versione aggiungerà il supporto multi libc. Heapdiff e heap check saranno aggiunti in seguito.
HeapShowerbins ora cerca da bk invece di fd, come fa glibcHeapRecoder, farò un heapdiffsmallbins e largebinsfastbinunsortedbinbinstcacheC_Struct per gestire strutture Cclass HeapInspectorarenaclass Proc in proc_utiltest.py