Pwn_工具食用方法(动态更新)
Tools食用方法
IDA
空格可以调整视图
F5进行一键反汇编
双击变量可以看到变量地址或进入函数
Ctrl+S 可以看到区段地址(如bss段、plt、got)
对变量或函数按x可以查看上级调用
可以在函数框Ctrl+F搜索函数名
在变量右键可以Rename变量名,方便代码审计
gdb
-
gdb 程序名 打开程序
-
pdisass/disassemble 反汇编
查看当前函数帧的反汇编代码,前者依赖于pwndbg有高亮,后者没有。
如: pdisass main
disass
-
-q 参数不显示欢迎信息等
-
canary 查看canary的值
-
-n 不加载任何插件,使用原生gdb
-
info +想看的信息,例如 info functions 查看函数信息
-
b/breakpoint 设置断点
如 b *内存地址
如 b main
在无PIE模式下,* 16位地址 即可
在PIE下, *$rebase(16位地址)
- del/delete breakposints n,删除断点
n是 断点编号,可用info breakpoints 查看断点信息
-
start 命令启动程序并停在开辟完主函数栈帧的地方
-
c/continue 继续执行程序,遇到断点停下
-
f/finish 结束程序
-
r/run 运行程序,遇到断点停下
-
ni 单步步过
一步一步执行指令,遇到函数调用时直接执行完整个函数
- si 单步步入
一步一步执行指令,遇到函数调用时跳转到函数内部
-
vmmap 查看内存映射
可以看到各段的权限
-
checksec 查看程序防护措施
-
p/print 打印信息
如寄存器 p $ebp
- set 设置某个地址的值
*addr=value
- x/<n/f/u> <地址> 查看某地址的值
n/f/u 参数为可选,
n:查看多少个内存单元,即从当前地址开始计算,每个内存单元的大小由后面的u指定。
f:显示格式,如s代表字符串,i代表指令形式,u代表内存单元大小,b(1字节) h(双字节) w(4字节,默认),g(8字节)。后缀w代表16进制形式查看变量
例如: x/s 地址
查看某地址的字符串值
- stack value 查看value大小的栈值
- cyclic value: 生成value个垃圾字符,可以用来帮助测栈溢出大小
- cyclic -l 地址 查询偏移,返回值就是覆盖(溢出)点
LibcSearcher
根据得到的泄露地址来查找libc版本,也可以在如下网址手动搜索
安装方法:
git clone https://github.com/lieanu/LibcSearcher.git
cd LibsSearcher
python setup.py develop
当遇到返回多个Libc版本库的时候,可以通过add)condition(leaked_func,leaked_address)来添加限制条件。也可以手工选择其中一个版本。
Vim
通过vim xxx.py来创建文件
通过 i进入插入模式
esc返回指令模式
:wq 保存并退出
Pwntools
(我并分不清pwntools和python基础语法,故在脚本中能利用的都放在这里)
- 在脚本中gdb交互: gdb.attach(进程名,'命令')
frtstr_payload
针对格式化字符串漏洞的工具
fmtstr_payload(offset, writes, numbwritten=0, write_size='byte')
第一个参数表示格式化字符串的偏移;
第二个参数表示需要利用%n写入的数据,采用字典形式,我们要将printf的GOT数据改为system函数地址,就写成{printfGOT: systemAddress};本题是将0804a048处改为0x2223322
第三个参数表示已经输出的字符个数,这里没有,为0,采用默认值即可;
第四个参数表示写入方式,是按字节(byte)、按双字节(short)还是按四字节(int),对应着hhn、hn和n,默认值是byte,即按hhn写。
fmtstr_payload函数返回的就是payload
Ropgadget
-
查找bin_sh字符串地址:ROPgadget --binary ./re2libc3 --string"/bin/sh"
-
ROPgadget--binary ./re2libc3 --only"pop|ret"
-
ROPgadget--binary ./re2libc3 --only"pop|ret"|grep"eax"
-
ROPgadget--binary ./re2libc3 --only"pop|ret"|grep"ebx"|grep"ecx"|grep"edx"
-
ROPgadget--binary ./re2libc3 --string"/bin/sh"