pwngdb和pwngdb
github上下载pwndbg和pwngdb
最后设置主目录下的.gdbinit文件
source /home/llk/tools/pwndbg/gdbinit.py #pwndbg/gdbinit.py位置而已
source ~/Pwngdb/pwngdb.py source ~/Pwngdb/angelheap/gdbinit.pydefine hook-run
python
import angelheap
angelheap.init_angelheap()
end
end
pwngdb的一些相比pwndgb多的一些比较有用的指令
libc : Print the base address of libc
ld : Print the base address of ld
codebase : Print the base of code segment
heap : Print the base of heap
got : Print the Global Offset Table infomation
dyn : Print the Dynamic section infomation
findcall : Find some function call
bcall : Set the breakpoint at some function call
tls : Print the thread local storage address
at : Attach by process name
findsyscall : Find the syscall
fmtarg : Calculate the index of format string
You need to stop on printf which has vulnerability.
force : Calculate the nb in the house of force.
heapinfo : Print some infomation of heap
heapinfo (Address of arena)
default is the arena of current thread
If tcache is enable, it would show infomation of tcache entry
heapinfoall : Print some infomation of heap (all threads)
arenainfo : Print some infomation of all arena
chunkinfo: Print the infomation of chunk
chunkinfo (Address of victim)
chunkptr : Print the infomation of chunk
chunkptr (Address of user ptr)
mergeinfo : Print the infomation of merge
mergeinfo (Address of victim)
printfastbin : Print some infomation of fastbin
tracemalloc on : Trace the malloc and free and detect some error .
You need to run the process first than tracemalloc on, it will record all of the malloc and free.
You can set the DEBUG in pwngdb.py , than it will print all of the malloc and free infomation such as the screeshot.
parseheap : Parse heap layout
magic : Print useful variable and function in glibc
fp : show FILE structure
fp (Address of FILE)
fpchain: show linked list of FILE
pwncli库模式
可以调用一些库函数和类 如house_of_apple2_execmd_when_do_IO_operation()和IO_FILE_plus_struct类
keypatche
https://github.com/keystone-engine/keypatch
最终效果
pwninit
https://github.com/io12/pwninit
libc6_2.31-0ubuntu9.12_amd64.deb: 这个包是 glibc 的标准库包。它包含了使用 C 语言编写的程序在运行时需要用到的基本库文件。这些文件提供了程序运行中执行系统调用、处理数据、内存分配等标准操作需要的函数实现。此包中通常不包括库的源代码、符号表或调试信息,这是为了保持库文件的轻量化,使系统运行效率更高,并且减少对存储资源的需求。
libc6-dbg_2.31-0ubuntu9.12_amd64.deb: 这个包是 glibc 的调试包。它包含了与 libc6 包相同版本的库文件的调试信息和符号表。这些调试信息允许开发者在使用调试工具(例如 GDB)时查看更多关于程序是如何执行的信息,包括变量值、内存地址和栈追踪等。调试信息很重要,它可以帮助开发者在程序中发现和修复错误,尤其是在跟踪难以解决的内存泄漏和其他,复杂错误时。
glibc源代码到网上下载就行,其解压之后类似会得到下图这些东西
.dynsym 和 .symtab
.dynsym 和 .symtab 都是符号表,不过它们的用途各有不同:
.dynsym (动态符号表)
- dynsym 是 ELF (Executable and Linkable Format) 文件格式的一部分,它包含了动态链接过程中需要用到的符号。它主要用于运行时动态链接(如共享库 .so 文件之间的链接),包括那些由动态链接器 (ld.so) 处理的符号。
它通常包括那些需要被共享或者由其他模块(例如其他共享库或者执行文件)使用的全局符号。
.symtab (符号表)
- .symtab 也是 ELF 文件格式的一部分,包含了链接时以及调试时可能用到全套符号信息,这包括了全局符号和局部符号。
它通常在编译时带 -g 选项(在 gcc 中)生成,并在 GDB 或其他调试器中用于符号解析和源代码级调试。
在优化文件大小时,常常使用 strip 命令(或编译器选项)来移除 .symtab 区段和其他的调试信息,以减小生成的二进制文件的大小。这通常发生在为生产环境准备二进制文件的时候。而 .dynsym 保留,因为它对于动态链接是必需的。这意味着即使 .symtab 被移除,程序仍能正常运行,因为依赖于动态链接的符号仍由 .dynsym 提供。
heaptrace
https://github.com/Arinerron/heaptrace
一旦下断点进入pwngdb后就不会再回显堆相关的内容了,有点郁闷
-
heaptrace是一个堆调试器,用于跟踪ELF64 (x86_64)二进制文件中的glibc堆操作。它的目的是帮助在调试二进制文件或执行堆pwn时可视化堆操作。
-
用易于理解的符号替换地址
-
检测堆损坏和内存泄漏问题
-
可以在GDB中随时调试(——break)
-
支持所有ELF64 (x86_64)二进制文件,无论ASLR或编译器设置如何
-
可以创建断点,以便在满足指定条件时自动用GNU调试器(gdb)替换跟踪程序。