- Author:ZERO-A-ONE
- Date:2021-07-02
一、PWNTOOLS
1.1 程序的启动与远程连接
- 使用process接口启动程序
- 常用:
process(argv,env)
,例如:process('./demo')
:执行可执行文件demoprocess(['cat','flag])
:执行命令cat flagprocess("./demo",env={'LD_PRELOAD':'./libc.so.6'})
:以指定环境变量运行文件
- 当程序运行于远程时,提供了Host和监听端口
- 使用remote接口进行连接:
remote(host,port)
- 使用remote接口进行连接:
- 常用:
1.2 常用交互操作
- 在通过process或者remote获得一个对象后
send(string)
:发送stringsendline(string)
:发送string及换行符sendafter(magic,string)
:接收到magic后,发送stringsendlineafter(magic,string)
:在接收到magic后,发送string及换行符recvn(N)
:接收N字节字符recvline()
:接收一行输出recvlines(N)
:接收N行输出recvuntil(magic)
:一直接收直到接收到magic字符串为止
1.3 设置context
-
context.log_level:设置log级别
- warn、error、debug
- 例如:当log_level为debug时,会输出所有交互数据
-
context.arch:设置程序架构
- amd64、i386、mips、arm…
- 设置完成架构后,会自动全局设置,例如:生成shellcode时shellcraft、asm不用指定a架构
-
context.terminal:设置新启命令的格式
- 例如:[‘tmux’,‘split’,’-h’],当调用gdb.attach(),不会新启动一个终端,而是利用
tmux split -h gdb
,分割当前终端
- 例如:[‘tmux’,‘split’,’-h’],当调用gdb.attach(),不会新启动一个终端,而是利用
-
context.endian:设置大小端
- big/little:和arch类似
1.4 数据的封装
- Pwntools本身提供了一套数据封装的接口,可以将大小端数据转换为整数或者将整数转换为对应大小端数据
- p64/p32/p16/p8:对应封装64/32/16/8位数据
- u64/u32/u16/u8:解码64/32/16/8位数据到整数
1.5 ELF的解析
- Pwntools中的ELF接口可以解析ELF文件:
- 使用
got[]
可以查看got表对应地址 - 使用
plt[]
可以查看对应plt表项对应地址 - 使用
symbols
查看对应符号函数/数据所在地址
- 使用