buuoj Pwn writeup 111-115

本文解析了多个CTF挑战题目,包括利用UAF漏洞修改fd指针、栈溢出攻击、利用信号量机制获取flag等技术细节。

111 gyctf_2020_signin

保护

在这里插入图片描述在这里插入图片描述四个功能,1,2,3,6.

1 add
在这里插入图片描述在这里插入图片描述
只能申请0x70大小的chunk,而且最多申请十次。

edit
在这里插入图片描述输入的大小最多0x50.cnt的值初始化为0,所以只有一次edit的机会。

在这里插入图片描述没有清理干净,有uaf。

在这里插入图片描述后门函数也有了,但是里面先是莫名其妙申请了个chunk,然后要求这个从来没有用过的ptr不是null。

注意到这个题是18.04,有tcache机制。

在说这个题的整体思路前呢,我们需要先明白两个机制。
calloc 有以下特性

不会分配 tcache chunk 中的 chunk 。

tcache 有以下特性

在分配 fastbin 中的 chunk 时若还有其他相同大小的 fastbin_chunk 则把它们全部放入 tcache 中。

我们的总体思路是这样的。
因为我们最终的目的只不过是在ptr中能留下点什么东西就好。结合这道题的漏洞uaf,我们能做的是修改一些fd啥的。那么怎么通过这个uaf做到修改。
我们平常如果有uaf的话,就会去想到fastbin_attack,或者double free。但是这道题double free不行,他会有flag检测,我们只能想一想fastbin_attack的事情。
平常的话我们可以先修改一次fd,申请到malloc_hook,然后再写一次这样子,但是这道题我们只能写一次,我们只能向这道题靠拢,想办法利用题里面的把ptr的地方写一些东西。
我们最后发现system上面有个calloc,结合上面的机制,假如我们calloc的时候只能申请fastbin,而且会把剩余的大小相同的chunk挂入tcache,那么我们假如修改一次fastbin的fd,calloc一次,让下一个chunk,也就是我们的fakechunk挂到tcache链里面,那么自然会在那个fakechunk里面写一个chunk的地址,因为要形成一个链,那么我们的利用方式就想好了。

具体的利用方法
我们想要达成的最后目的是,申请一个fastbin的时候,把下一个我们的fakechunk挂进去,所以我们首先需要有fastbin chunk,那么就申请8个,释放8个。

我们需要再申请一个,因为我们需要给一会要挂进去的chunk留一个位置,然后就直接calloc申请,挂进去就好了。

exp

from pwn import *

r = remote("node3.buuoj.cn", 26121)

context.log_level = 'debug'
 
def add(idx):
    r.sendlineafter('your choice?',str(1))
    r.sendlineafter('idx?',str(idx))
 
def edit(idx,context):
    r.sendlineafter('your choice?',str(2))
    r.sendlineafter('idx?',str(idx))
    r.send(context)
 
def delete
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值