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
heapinfo — Une mémoire interactive pour le pwning / l'exploitation | Kitploit
Outils/GitHubGitHub/david942j/heapinfo
Criminalistique MémoireExploitationDébogueursCTFAnalyse de BinairesExploitation de Binaires
GitHubdavid942j/heapinfo

heapinfo

Une mémoire interactive pour le pwning / l'exploitation

Voir le dépôt
9810il y a 3 ansVérifié par Kitploit

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

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

HeapInfo

En tant qu’amateurs de pwn, lors de CTF avec exploitation du tas, nous avons toujours besoin d’un débogueur (ex. gdb) pour suivre la disposition mémoire. Mais nous n’avons pas vraiment besoin de gdb si nous voulons voir si la disposition du tas correspond à notre imagination ou non. Espérons que ce petit outil nous aide à exploiter plus facilement ;).

Pourquoi

HeapInfo est très utile lorsque le binaire a des limitations anti-débogueur, par exemple être ptracé. HeapInfo fonctionne toujours car il n'utilise pas ptrace.

Implémenté en Ruby parce que j'aime Ruby :P. Mais pourrait être implémenté en Python (si personne d'autre ne le fait) à l'avenir.

Si vous préférez pwntools pour exploiter, vous pouvez toujours utiliser HeapInfo dans irb/pry comme un petit débogueur.

Toute suggestion de fonctionnalités ou signalement de bogues est la bienvenue.

Installation

HeapInfo est encore en développement pour plus de fonctionnalités, donc la version peut changer fréquemment :p

root@kitploit:~
$ gem install heapinfo

Fonctionnalités

  • Peut être utilisé dans votre script d'exploitation Ruby ou dans irb/pry.
  • HeapInfo fonctionne lorsque victim est tracé ! c'est-à-dire que vous pouvez utiliser ltrace/strace/gdb et HeapInfo simultanément !
  • dump - Vider la mémoire à une adresse arbitraire.
  • layouts - Afficher la disposition actuelle des bins, très utile pour l'exploitation du tas.
  • offset - Afficher le décalage entre une adresse donnée et un segment. Très utile pour calculer le décalage relatif.
  • canary - Récupérer la valeur du stack guard !
  • x - Commandes de style GDB.
  • s - Commandes de style GDB.
  • find - Commandes de style GDB.
  • Plus de fonctionnalités et détails peuvent être trouvés dans RDoc

Utilisation

Chargement

root@kitploit:~
require 'heapinfo'
# ./victim is running
h = heapinfo('victim') 
# or use h = heapinfo(20568) to specify a pid

# will present simple info when loading:
# 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 segments' info
"%#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"

ATTENTION : Lorsque le processus n'est pas trouvé, la plupart des méthodes renverront nil. Une façon d'éviter certaines erreurs est d'encapsuler les méthodes dans debug, le bloc sera ignoré lors de l'exploitation à distance.

root@kitploit:~
h = heapinfo('remote')
# Process not found
h.pid # nil

# wrapper with `debug` so that no error will be raised when pwning remote service
h.debug { fail unless leak_libc_base == h.libc.base }

Dump

Interroger le contenu d'une adresse spécifique.

ATTENTION : Vous DEVEZ avoir la permission d'attacher un programme, sinon le dump échouera.

c'est-à-dire /proc/sys/kernel/yama/ptrace_scope défini sur 0 ou exécuté en tant que root.

root@kitploit:~
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) # support 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) # and even complex formula!
  #=> "\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) # or simply give address
  #=> "\x7FELF\x02\x01\x01\x00"
end

# invalid example:
# h.dump('meow') # no such segment

layouts

root@kitploit:~
h.layouts :fast

fastbin layouts

root@kitploit:~
h.layouts :unsorted, :small

smallbin layouts

root@kitploit:~
h.layouts :tcache

tcache layouts

offset

root@kitploit:~
h.offset(0x7fda86fe8670)
# 0xf6670 after libc
h.offset(0x1839cd0, :heap) # specific segment name
# 0x20cd0 after heap
h.offset(0x1839cd0)
# 0x20cd0 after heap

offset

canary

root@kitploit:~
h.canary.to_s(16)
#=> '84b742f03d94c100'

x - GDB-style command

root@kitploit:~
h.x 8, :heap

x/8gx

find - GDB-style command

Provide a searcher of memory, easier to use than in (naive) gdb.

Support search integer, string, and even regular expression.

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

# Get relative offset of searching result
h.find('/bin/sh', :libc, rel: true)
#=> 1622391 # 0x18c177
h.offset(h.find('/bin/sh', :libc))
# 0x18c177 after libc

Tests

HeapInfo n'exécute actuellement des tests que sur Ubuntu, voici les versions glibc testées :

  • libc-2.19
  • libc-2.23
  • libc-2.24
  • libc-2.25
  • libc-2.26
  • libc-2.27
  • libc-2.29
Télécharger l’outil