Skip to content

Instantly share code, notes, and snippets.

@stefan1wan
Forked from hzshang/example.py
Last active February 28, 2019 03:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stefan1wan/5015553adf91cfedb0e6c48c78e47a61 to your computer and use it in GitHub Desktop.
Save stefan1wan/5015553adf91cfedb0e6c48c78e47a61 to your computer and use it in GitHub Desktop.
how to use pwntools
from pwn import *
#启用调试模式,会将以后的交互信息打印出来
context.log_level="debug"
# 连接
# 和127.0.0.1的9999端口建立tcp连接
r=remote("127.0.0.1",9999)
# 运行一个可执行程序,方便本地调试
r=process("./binary")
r=process("/dbg/glibc/lib/ld-2.23.so --library-path /lib/x86_64-linux-gnu/ ./level7_x64".split(" "))
# 发送 aaaa
r.send("aaaa")
# 发送 aaaa加一个回车符
r.sendline("aaaa")
# 接收0x100长度的输出
data=r.recv(0x100)
# 设置等待时间,对于测试连接是否存活比较有用
data=r.recv(0x100, timeout=1)
# 接收所有输出
data=r.recvall()
# 接收一行输出
data=r.recvline()
# 接收输出直到遇到 aaa停止
data=r.recvuntil("aaa")
# 收到aaa后发送bbb
r.sendafter("aaa","bbb")
# 收到aaa后发送bbb加回车符
r.sendlineafter("aaa","bbb")
#打开交互模式
r.interactive()
# 调试
# 让脚本在这暂停,并打印进程的pid
print r.pid# 注意这里只有r是使用process开启时才有效
pause()
# 打开gdb 并输入一下命令可以附加到进程上进行调试
# attach 1234 # 1234是上面r.pid返回的进程号
# 静态分析
# 读取一个elf文件
elf=ELF("./binary")
# 设置默认架构, 之后行为将按照新设置的架构
context.arch = 'amd64'
context.arch = 'i386'
context.arch = elf.arch
# 获取elf的read got表地址
print hex(elf.got["read"])
# 获取elf的read plt地址
print hex(elf.plt["read"])
# 读取一个libc文件
libc=ELF("./libc.so.6")
# 设置libc的基地址,默认为0.
libc.address=0x7fff00000000
# 获取libc里的system地址
print hex(libc.sym["system"])
# 按照架构的格式,方便输入不可显示的字符
# 32位模式
p32(0x12345678) == "\x78\x56\x34\x12"
# 64位模式
p64(0x12345678) == "\x00\x00\x00\x00\x78\x56\x34\x12"
# 编译
code="""
push eax
pop ebx
int 0x80
"""
shellcode=asm(code,arch="x86")# 将32位的汇编代码转为机器码
code="""
push rax
pop rbx
syscall
"""
shellcode=asm(code,arch="amd64")# 将64位的汇编代码转为机器码
print disasm(shellcode,arch="amd64")# 将机器码反汇编成64位汇编代码
# pwntool的其他使用方法还有很多,具体可以参考
# http://docs.pwntools.com/en/stable/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment