1 概述
偶尔在pwn的题目中,使用pwntool工具,由于不熟练,经常性遗忘,尤其是接收地址的时候,会卡在数据处理上,因此单独起一篇文章,用来记录日常用到的各种语句,后面如果发现了心得,可以继续补充。 参考文章: PwnTools常见用法 Pwntool 官方文档
2 数据处理方式
2.1 发送数据
send
(payload
) 发送payload
sendline
(payload
) 发送payload,并进行换行(末尾\n)
sendafter
(some_string
, payload
) 接收到 some_string 后
, 发送你的 payload
sendlineafter
(some_string
, payload
) 接收到 some_string 后
, 发送你的 payload(末尾\n)
2.2 接收数据
recvn
(N
) 接受 N
(数字
) 字符
recvline
() 接收一行输出
recvlines
(N
) 接收 N
(数字
) 行输出
recvuntil
(some_string
) 接收到 some_string 为止
2.3 接收到数据之后
data
= p
.recv
("10")
libc_start_main_addr
= int(data
,16) - 247
data
= p
.recv
("10")
libc
.address
= int(data
[:6][::-1].encode
("hex"), 16) - libc
.symbols
["read"]
libc
.address
= u64
(data
[:6].ljust
(8,"\x00")) - libc
.symbols
["read"]
p32
/p64
: 打包一个整数
,分别打包为
32或
64位
,主要是发送的时候需要打包
u32
/u64
: 解包一个字符串
,得到整数,接收的时候需要解包
2.4 针对elf的处理
symbols
['a_function'] 找到 a_function 的地址
got
['a_function'] 找到 a_function的 got
plt
['a_function'] 找到 a_function 的 plt
next(e
.search
("some_characters")) 找到包含 some_characters(字符串,汇编代码或者某个数值)的地址
2.5 关于context,调试log
context
.log_level
= 'DEBUG'
context
(arch
='amd64', os
='linux')
context
(os
='linux', arch
='amd64', log_level
='debug')
2.6 关于gdb,当执行到此时,会弹出一个terminal
gdb
.attach
(process
)