您的位置:首页 > 其它

pwntools的常见用法

2017-12-16 14:58 92 查看
context设置运行时变量

context.log_level = 'debug'


2 remote,listen,ssh,process

支持 recvline,recvuntil,clean

通过interactive()与程序直接交互

p32,u32

p32 数字转化为字符串

u32 字符串转化为数字

log

log.info(“Hello World”)

cyclic and cyclic_find

对于直接的缓冲区溢出,可以很方便的确认再便宜多少可以控制eip

asm,disasm

汇编和反汇编代码

asm('mov eax,0')
asm(shellcraft.sh())
disasm("\xb8\x0b\x00\x00\x00")


shellcraft提供了许多现成的shellcode

elf用来操作elf的工具

elf = ELF("pwn")

hex(elf.address)
hex(elf.symbols['write'])
hex(elf.got['write'])
hex(elf.plt['write'])


DynELF 通过信息泄露 获得远程函数地址

可以没有程序

p = process('./pwnme')
def leak(address):
data = p.read(address, 4)
return data
main   = 0xfeedf4ce

d = DynELF(leak, main)
d.lookup('system', 'libc')
# 2 如果有程序,速度会更快
d = DynELF(leak, main, elf=ELF('./pwnme'))


ROP 简化产生ROP链的操作

gdb.debug 和 gdb.attach

1 用gdb启动程序,并弹出新窗口与其交互

2 附加到一个程序上,pid/pwnlibs.tubes/socket都可以

12 args 快速访问所有的命令行参数

13 一些实用工具

b64d('dGVzdA==')
b64e("test")
bits(511, zero = "+", one = "-") 把参数转换为位
bits_str(511) 得到'0000000111111111'
enhex("test") 得到'74657374'
isprint(c) 判断一个字符是否可打印
randoms(10) 返回'evafjilupm'
rol('abcdefg', 2) 得到'cdefgab'
unhex("74657374") 得到'test'
urldecode("test%20%41")
urlencode


14 net 查询网络借口

15 proc 查询进程

16 pause

17 safeeval 执行python代码,但不会产生副作用

18 其他

hexdump
read and write
enhex and unhex
more
group
align and align_down
urlencode and urldecode
which
wget


与pwnlib.tubes的常见交互方式

recv()
recvuntil()
recvline()读取到'\n'
recvlines(n)
recvall() 读取到EOF

send()
sendline()会自动加换行符
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: