PWN工具的使用
0x1.ida
指令 | 用法 |
---|---|
h | 将数据进行10进制和16进制转换 |
r | 将数据进行字符和数字的转换 |
n | 对变量和函数等进行重命名 |
x | 查看函数的引用 |
y | 修改数据的类型 |
shift+e | 查看一些数据 |
tab | 汇编和c语言之间转换 |
0x2.gdb
指令 | 用法 |
---|---|
si | 单步执行(进入) |
ni | 单步执行(不进入) |
finish | 直接运行到函数的结束 |
watch | 监控一个内存的值(值如果改变,就会断点) |
b | 断点 |
info b | 查看断点 |
x | 查看内存数据(一般不单独用) 命令格式如下: x /nfu addr n表示一个正整数,f是查看的格式,u表示几个字节(默认4字节) 参数 f 的可选值: x 按十六进制格式显示变量。 d 按十进制格式显示变量。 u 按十六进制格式显示无符号整型。 o 按八进制格式显示变量。 t 按二进制格式显示变量。 a 按十六进制格式显示变量。 c 按字符格式显示变量。 f 按浮点数格式显示变量。 参数 u 的可选值: b 表示单字节 h 表示双字节 w 表示四字节 g 表示八字节 |
del | 删除断点 |
info r | 查看寄存器的值 |
vmmap | 查看虚拟内存的布局 |
search | 找一个字符串 |
p | 查看内存数据 |
stack | 查看栈里的数据 |
bt | 查看栈里函数调用 |
heap | 查看堆 |
bins | 查看管理堆链表 |
0x3.ROPgadgets
指令 | |
---|---|
使用格式: | ROPgadget --binary filename |
查找字符串: | ROPgadget --binary filename --string stringname |
0x4.one_gadget
使用格式 | one_gadget filename |
---|
0x5.pwntools
shellcode | asm(shellcraft.amd64.linux.sh(),arch="amd64") 32位是i386 |
LibcSearcher | libc = LibcSearcher("read", read) libc_base = read - libc.dump("read") bin_sh = libc_base + libc.dump("str_bin_sh") |
ELF(“libc_name") | libc = ELF("libc_name") libc_base = read - libc.sym["read"] bin_sh = libc_base + libc.searcher("/bin/sh") 也可以查找程序内字符串 |
debug | context(log_level="debug",os="linux",arch="amd64") |
gdb | gdb.attach(sh,"b *addr") gdb.attach(sh) |
泄露got表 | payload = u32(elf.got["puts"] )+ '%6$s' |
修改got表 | payload = fmtstr_payload(6,{elf.got["printf"]:system_addr}) 6为相对printf的偏移量,将printf的got表的地址修改为system的地址 |