Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
heapinfo — 익스플로잇 및 해킹을 위한 대화형 메모리 정보 | Kitploit
도구/GitHubGitHub/david942j/heapinfo
Memory ForensicsExploitationDebuggersCTFBinary AnalysisBinary Exploitation
GitHubdavid942j/heapinfo

heapinfo

익스플로잇 및 해킹을 위한 대화형 메모리 정보

저장소 보기
981063년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

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

HeapInfo

pwn을 즐기는 사람으로서 CTF에서 힙 익스플로잇을 할 때, 우리는 항상 메모리 레이아웃 추적을 위해 디버거(예: gdb)가 필요합니다. 하지만 힙 레이아웃이 우리의 상상과 같은지 확인하고 싶다면 gdb가 실제로 필요하지 않습니다. 이 작은 도구가 우리가 더 쉽게 익스플로잇할 수 있도록 도와주길 바랍니다 ;).

왜?

HeapInfo는 바이너리에 ptrace되는 것과 같은 안티-디버거 제한이 있을 때 매우 유용합니다. HeapInfo는 ptrace를 사용하지 않기 때문에 여전히 작동합니다.

Ruby를 사랑하기 때문에 Ruby로 구현되었습니다 :P. 하지만 향후에 (다른 사람이 하지 않았다면) Python으로 구현할 수도 있습니다.

익스플로잇에 pwntools를 선호한다면, irb/pry에서 HeapInfo를 작은 디버거로 사용할 수 있습니다.

기능 제안이나 버그 제보는 언제나 환영합니다.

설치

HeapInfo는 아직 더 많은 기능을 위해 개발 중이므로 버전이 자주 변경될 수 있습니다 :p

root@kitploit:~
$ gem install heapinfo

기능

  • 루비 익스플로잇 스크립트나 irb/pry에서 사용할 수 있습니다.
  • HeapInfo는 victim이 추적 중일 때도 작동합니다! 즉, ltrace/strace/gdb와 HeapInfo를 동시에 사용할 수 있습니다!
  • dump - 임의의 주소 메모리를 덤프합니다.
  • layouts - 현재 bin 레이아웃을 보여줍니다. 힙 익스플로잇에 매우 유용합니다.
  • offset - 주어진 주소와 세그먼트 사이의 오프셋을 보여줍니다. 상대 오프셋 계산에 매우 유용합니다.
  • canary - 스택 가드의 값을 가져옵니다!
  • x - GDB 스타일 명령어.
  • s - GDB 스타일 명령어.
  • find - GDB 스타일 명령어.
  • 더 많은 기능과 세부 사항은 RDoc에서 확인할 수 있습니다.

사용법

로드

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을 반환합니다. 오류가 발생하는 것을 방지하는 한 가지 방법은 메서드를 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 }

덤프

특정 주소의 내용을 조회합니다.

주의: 프로그램을 attach할 권한이 있어야 합니다. 그렇지 않으면 덤프가 실패합니다.

예: /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

레이아웃

root@kitploit:~
h.layouts :fast

fastbin layouts

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

smallbin layouts

root@kitploit:~
h.layouts :tcache

tcache layouts

오프셋

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

카나리

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

x - GDB 스타일 명령어

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

x/8gx

find - GDB 스타일 명령어

메모리 검색기를 제공하며, (순수) 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

테스트

HeapInfo는 현재 Ubuntu에서만 테스트를 실행하며, 다음 glibc 버전이 테스트되었습니다:

  • libc-2.19
  • libc-2.23
  • libc-2.24
  • libc-2.25
  • libc-2.26
  • libc-2.27
  • libc-2.29
도구 다운로드