当前位置: 首页 > 工具软件 > pwntools > 使用案例 >

PWNTOOLS的基本使用

丁绪
2023-12-01

pwntools的基本使用

首先需要 from pwn import * 把 pwntools 导入进来,它同时会把一些系统库给导入进来

本地打的话 p=process('./filename'),远程的话 p=remote('192.168.1.103',10001)

p.close() 关闭

发送 payload

p.send(payload) 发送 payload

p.sendline(payload) 发送 payload,并进行换行(末尾\n)

p.sendafter(some_string, payload) 接收到 some_string 后, 发送你的 payload

p.sendlineafter(some_string, payload) 接收到 some_string 后, 发送你的 payload,加个换行

接收返回内容

p.recvn(N) 接受 N(数字) 字符

p.recvline() 接收一行输出

p.recvlines(N) 接收 N(数字) 行输出

p.recvuntil(some_string) 接收到 some_string 为止

p.interactive() 直接进行交互,相当于回到shell的模式,一般在取得shell之后使用

生成 shellcode

asm(shellcraft.sh())

ELF

首先需要 elf=ELF('./filename') 来产生一个对象

elf.symbols['a_function'] 找到 a_function 的地址

elf.got['a_function'] 找到 a_function的 got

elf.plt['a_function'] 找到 a_function 的 plt

elf.next(e.search("some_characters")) 找到包含 some_characters 可以是字符串,汇编代码或者某个数值的地址

ROP

rop = ROP('./filename') 还是要先创建一个对象

rop.raw('a'*32) 在构造的 rop 链里面写 32 个 a

rop.call('read', (0, elf.bss(0x80)))` 调用一个函数,可以简写成:`rop.read(0, elf.bss(0x80))

rop.chain() 就是整个 rop 链,发送的 payload

rop.dump() 直观地展示当前的 rop 链

rop.migrate(base_stage) 将程序流程转移到 base_stage(地址)

rop.unresolve(value) 给出一个地址,反解析出符号

rop.search(regs=['ecx','ebx']) 搜索对 eax 进行操作的 gadgets

rop.find_gadget(['pop eax','ret']) 搜索 pop eax ret 这样的 gadgets

引用自pwntools使用 · 语雀 (yuque.com)以供方便使用。

 类似资料: