首页
社区
课程
招聘
[原创]DAS9月月赛PWN题出题心路
发表于: 2022-9-20 01:02 15635

[原创]DAS9月月赛PWN题出题心路

2022-9-20 01:02
15635

img

img

赛博杯已经办了第五届了,已经是老传统了,去年也是das月赛的形式。遥想去年赛博杯的时候,俺只做了一道misc的签到题。没想到菜鸡如我,居然能在进战队半个年后承接PWN题的出题任务。由于还要校内招新,加上堆题不太想出house(感觉没必要太卷glibc),所以整体难度不太难。但基本是一题出了一两天,揉合了学pwn一年以来见过的比较好玩的利用手法,也算是自己出的很开心,希望大家在复盘的时候也玩的开心~

本来是把这题当作签到题的,没想到cyberprinter被非预期了。。。。导致难度下降很多被秒了,导致这题成了第二解的最多的

考察大家对栈帧的理解,设置了一个栈帧复用:

img

在func函数栈帧的读入,能被check函数复用从而绕过里面对栈上变量值的检查

同样考察和栈有关,函数调用时候rsp的值会减少,这里故意设置给的bss段的地址非常接近bssbase:

img

img

如果栈迁移到这里,不抬栈的话,可能会导致后续的ROP调用函数的时候减少rsp,访问“白色”(指gdb里白色的没有w权限的)内存

而后的利用就是非常简单的ret2csu ORW打印flag了

聪明的师傅其实发现我的沙箱这里没有对架构的检测:

img

所以可以通过retf切换到x86_32,先mmap出一段32位下可用内存(4字节),然后调用32位的execve(32位下和64位的execve的系统调用号不一样)

但这么做太复杂了。。。但如果我把orw ban了,只给mmap呢?大抵只能这么做了,但是这样就太阴间了。。。

由于话太多导致的非预期。。。。

先说说预期解,预期是fmt改exit里面的这里:

img

但是由于我们程序最后是_exit结束的,所以还需要一个ret再次返回到vuln函数,返回同样可以通过fmt修改:

img

修改红色箭头的低一字节,在开了pie的情况下有16分之一概率能使fmt修改到黄色箭头。而黄色箭头修改低两字节,也有16分之一的概率ret(start或者就vuln函数)。所以说是一个256分之一的爆破

但是,怎么就非预期了呢?答,printf()后接了一个puts:

img

由于puts函数在调用的时候有一个这个东西:

img

而这个玩意是有点类似elf的plt的,内部也会跳转到got:

img

可以改这个为one_gadget,直接getshell

当时都没注意,写那个东西纯纯为了增加题目的故事性。。。

把printf后面的puts去掉

受8月份打的巅峰极客的影响,当时想的就是切割堆块,使得tcache里面有个堆块的fd指针为UB的main_arena,然后改成free_hook。但当时完全是想错了。。于是就保留了这个思路用到自己出的题上

其实就是一个非常经典的利用——填满tcache,然后继续放进UB合并先后放入的chunk1,chunk2(2位于高地址),取走tcache一个堆块,double free chunk2放入tcache,这样就能获得一块既在UB里面,又在tcache里面的堆块了,然后切割合并的堆块就能在没有edit的情况下,修改tcache chunk的fd指针为libc地址

感觉挺有意思的中等题,应该不太需要改了hhh

什么,提高难度?加house?加高版本?

有几斤小马珍珠敢这么出题?


[注意]看雪招聘,专注安全领域的专业人才平台!

上传的附件:
收藏
免费 7
支持
分享
打赏 + 50.00雪花
打赏次数 1 雪花 + 50.00
 
赞赏  Editor   +50.00 2022/09/29 恭喜您获得“雪花”奖励,安全圈有你而精彩!
最新回复 (2)
雪    币: 264
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
师傅tql
2022-9-24 20:47
0
雪    币: 2267
活跃值: (1553)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
3
师傅tql
2022-9-29 01:20
0
游客
登录 | 注册 方可回帖
返回