Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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
heapinfo — Un'informazione interattiva sulla memoria per pwning / exploiting | Kitploit
Strumenti/GitHubGitHub/david942j/heapinfo
Memory ForensicsExploitDebuggerCTFAnalisi di BinariBinary Exploitation
GitHubdavid942j/heapinfo

heapinfo

Un'informazione interattiva sulla memoria per pwning / exploiting

Vedi Repository
9810563 anni faRevisionato da Kitploit

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

Build Status Downloads Code Climate Issue Count Test Coverage Inline docs MIT License

HeapInfo

Da appassionati di pwn, durante le CTF con exploit di heap, abbiamo sempre bisogno di un debugger (es. gdb) per tracciare il layout della memoria. Ma non serve davvero gdb se vogliamo vedere se il layout dell'heap corrisponde o meno alla nostra immaginazione. Spero che questo piccolo strumento ci aiuti a sfruttare più facilmente ;).

Perché

HeapInfo è molto utile quando il binario ha limitazioni anti-debugger, ad esempio se è sotto ptrace. HeapInfo funziona lo stesso perché non utilizza ptrace.

Implementato in Ruby perché amo Ruby :P. Ma potrebbe essere implementato in Python (se nessun altro lo farà) in futuro.

Se preferisci pwntools per gli exploit, puoi comunque usare HeapInfo in irb/pry come un piccolo debugger.

Ogni suggerimento su funzionalità o segnalazioni di bug è benvenuto.

Installazione

HeapInfo è ancora in fase di sviluppo per ulteriori funzionalità, quindi la versione potrebbe cambiare frequentemente :p

$ gem install heapinfo

Funzionalità

  • Può essere usato nel tuo script di exploit in Ruby o in irb/pry.
  • HeapInfo funziona quando la vittima è tracciata! cioè puoi usare ltrace/strace/gdb e HeapInfo contemporaneamente!
  • dump - Dump della memoria a un indirizzo arbitrario.
  • layouts - Mostra il layout corrente dei bin, molto utile per lo sfruttamento dell'heap.
  • offset - Mostra l'offset tra un dato indirizzo e un segmento. Molto utile per calcolare offset relativi.
  • canary - Recupera il valore dello stack guard!
  • x - Comandi in stile GDB.
  • s - Comandi in stile GDB.
  • find - Comandi in stile GDB.
  • Ulteriori funzionalità e dettagli si trovano nella RDoc

Utilizzo

Caricamento

require 'heapinfo'
# ./victim è in esecuzione
h = heapinfo('victim') 
# oppure usa h = heapinfo(20568) per specificare un pid

# mostrerà informazioni semplici al caricamento:
# Program: /home/heapinfo/victim PID: 20568
# victim          base @ 0x400000
# [heap]          base @ 0x11cc000
# [stack]         base @ 0x7fff2b244000
# libc-2.19.so    base @ 0x7f892a63a000
# ld-2.19.so      base @ 0x7f892bee6000
# canary          value: 0x84b742f03d94c100

# query sui segmenti
"%#x" % h.libc.base
#=> "0x7f892a63a000"
h.libc.name
#=> "/lib/x86_64-linux-gnu/libc-2.19.so"
"%#x" % h.elf.base
#=> "0x400000"
"%#x" % h.heap.base
#=> "0x11cc000"

NOTA: Quando il processo non viene trovato, la maggior parte dei metodi restituirà nil. Un modo per evitare eventuali errori è racchiudere i metodi all'interno di debug; il blocco verrà ignorato durante lo sfruttamento remoto.

h = heapinfo('remote')
# Processo non trovato
h.pid # nil

# racchiudi con `debug` in modo che nessun errore venga sollevato quando si attacca un servizio remoto
h.debug { fail unless leak_libc_base == h.libc.base }

Dump

Interroga il contenuto di un indirizzo specifico.

NOTA: DEVI avere il permesso di allegare un programma, altrimenti il dump fallirà.

cioè /proc/sys/kernel/yama/ptrace_scope impostato a 0 o eseguito come root.

h.debug do
  p h.dump(:libc, 8)
  #=> "\x7FELF\x02\x01\x01\x00"
  p h.dump(:heap, 16)
  #=> "\x00\x00\x00\x00\x00\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00"
  p h.dump('heap+0x30', 16) # supporta offset!
  #=> "\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00"
  p h.dump('heap+0x30 * 3 + 0x8', 16) # e anche formule complesse!
  #=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
  p h.dump(:program, 8)
  #=> "\x7FELF\x02\x01\x01\x00"
  p h.dump(0x400000, 8) # o semplicemente fornisci l'indirizzo
  #=> "\x7FELF\x02\x01\x01\x00"
end

# esempio non valido:
# h.dump('meow') # nessun segmento del genere

layouts

h.layouts :fast

fastbin layouts

h.layouts :unsorted, :small

smallbin layouts

h.layouts :tcache

tcache layouts

offset

h.offset(0x7fda86fe8670)
# 0xf6670 dopo libc
h.offset(0x1839cd0, :heap) # nome del segmento specifico
# 0x20cd0 dopo heap
h.offset(0x1839cd0)
# 0x20cd0 dopo heap

offset

canary

h.canary.to_s(16)
#=> '84b742f03d94c100'

x - Comando in stile GDB

h.x 8, :heap

x/8gx

find - Comando in stile GDB

Fornisce un cercatore di memoria, più facile da usare rispetto a (ingenuo) gdb.

Supporta la ricerca di interi, stringhe e persino espressioni regolari.

h.find(0xdeadbeef, 'heap+0x10', 0x1000)
#=> 6299664 # 0x602010
h.find(/E.F/, 0x400000, 4)
#=> 4194305 # 0x400001
h.find(/E.F/, 0x400000, 3)
#=> nil

# Ottieni l'offset relativo del risultato della ricerca
h.find('/bin/sh', :libc, rel: true)
#=> 1622391 # 0x18c177
h.offset(h.find('/bin/sh', :libc))
# 0x18c177 dopo libc

Test

HeapInfo attualmente esegue test solo su Ubuntu. Le seguenti sono le versioni di glibc testate:

  • libc-2.19
  • libc-2.23
  • libc-2.24
  • libc-2.25
  • libc-2.26
  • libc-2.27
  • libc-2.29
Scarica lo strumento