基础命令
模块
导入pwntools模块
from pwn import *
连接
连接远程服务器:
pwn.remote('IP地址', 端口号)
若不连接远程服务器,只在本地测试:
process(./文件名)
发送数据
发送一堆数据:
send(data)
发送一行数据,并在末尾加上换行符(\n):
sendline(data)
在指定字符出现后输入指定字符串:
sendlineafter('等待的字符串', '输入的字符串')
接收数据
接收数据,numb指定字节数,timeout指定超时:
recv(numb=4096, timeout=default)
接收一行,keepends为是否保留行尾的换行符(\n):
recvline(keepends=True)
一直接收到delims的pattern出现:
recvuntil(delims, drop=False)
持续接受直到EOF或timeout:
recvrepeat(timeout=default)
一直接收直到达到文件EOF:
recvall()
交互
在取得shell之后使用,直接进行交互,相当于回到shell的模式:
interactive()
连接gdb:
pwnlib.gdb.attach(proc.pidof(p)[0])
其它命令
打开elf文件:
elf = ELF('[文件名]')
查看函数地址(PLT):
plt_addr = hex(elf.symbols['函数名'])
文件内定位字符串地址:
elf.search('字符串').next()
把整数排列成32位小端数据:
p32(整数)
将小端数据解为宽度最大为4字节的整数:
enhex(p32(字符串))
把整数排列成64位小端数据:
p64(整数)
将小端数据解为宽度最大为8字节的整数:
enhex(p64(字符串))
生成指定字符数量的字符串:
cyclic(字符数)
查找指定字符串偏移:
cyclic_find('四个字母')
生成一段shellcode并反汇编:
asm(shellcraft.sh())