Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
heapinfo — pwn/エクスプロイト用のインタラクティブなメモリ情報 | Kitploit
ツール/GitHubGitHub/david942j/heapinfo
メモリフォレンジックエクスプロイトデバッガCTFバイナリ解析バイナリエクスプロイト
GitHubdavid942j/heapinfo

heapinfo

pwn/エクスプロイト用のインタラクティブなメモリ情報

リポジトリを見る
98103年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

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

HeapInfo

pwn 好きな人々にとって、CTF でヒープエクスプロイトに取り組む際、メモリレイアウトを追跡するために常にデバッガ(gdb など)が必要です。しかし、ヒープレイアウトが自分の想像通りかどうか確認したいだけなら、本当は gdb は必要ありません。この小さなツールがエクスプロイトをより容易にしてくれることを願っています ;)。

Why

HeapInfo は、バイナリに何らかのアンチデバッグ制限(例:ptrace されている)がある場合に非常に役立ちます。 HeapInfo は ptrace を使用しないため、それでも動作します。

Ruby で実装しているのは、Ruby が好きだからです :P。ただし、将来的には(誰も実装しなければ)Python で実装するかもしれません。

エクスプロイトに pwntools を好む場合でも、irb/pry で小さなデバッガとして HeapInfo を使用できます。

機能の提案やバグ報告はいつでも歓迎します。

Install

HeapInfo はまだ開発中で機能追加が続いているため、バージョンは頻繁に変わることがあります :p

root@kitploit:~
$ gem install heapinfo

Features

  • Ruby のエクスプロイトスクリプトや irb/pry で使用可能です。
  • HeapInfo は victim がトレースされている場合でも動作します!つまり、ltrace/strace/gdb と HeapInfo を同時に使用できます!
  • dump - 任意のアドレスのメモリをダンプします。
  • layouts - 現在のビンのレイアウトを表示します。ヒープエクスプロイトに非常に便利です。
  • offset - 指定されたアドレスとセグメント間のオフセットを表示します。相対オフセットの計算に非常に便利です。
  • canary - スタックガードの値を取得します!
  • x - GDB スタイルのコマンド。
  • s - GDB スタイルのコマンド。
  • find - GDB スタイルのコマンド。
  • その他の機能や詳細は RDoc を参照してください。

Usage

Load

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"

注意: プロセスが見つからない場合、ほとんどのメソッドは nil を返します。エラーを防ぐ方法の1つは、メソッドを debug ブロック内でラップすることです。このブロックはリモートエクスプロイト時には無視されます。

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

特定のアドレスの内容を取得します。

注意: プログラムへのアタッチ権限が必要です。そうでなければダンプは失敗します。

例: /proc/sys/kernel/yama/ptrace_scope が 0 に設定されているか、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

メモリ内の検索機能を提供します。素朴な gdb よりも使いやすいです。

整数、文字列、さらには正規表現の検索をサポートします。

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 は現在 Ubuntu でのみテストを実行しています。以下はテスト済みの glibc バージョンです:

  • libc-2.19
  • libc-2.23
  • libc-2.24
  • libc-2.25
  • libc-2.26
  • libc-2.27
  • libc-2.29
ツールをダウンロード