首页
社区
课程
招聘
[原创]无路远征——GLIBC2.37后时代的IO攻击之道(终章)house_of_碎碎念
发表于: 2023-2-14 13:13 22848

[原创]无路远征——GLIBC2.37后时代的IO攻击之道(终章)house_of_碎碎念

2023-2-14 13:13
22848

看到这个题目,估计很多人都举得这篇文章没有实际内容,但是恰恰相反,如果你学会了很多技巧,但仍在在比赛中难以有所输出,还是有必要看一下的。

在除了第0章之外,个人认为house_of_魑魅魍魉应该是综合评分最高的技巧,但大部分人可能觉得house_of_一骑当千来的更暴力,毕竟以目前角度来看,它可以通杀沙盒,版主也把他列为了精华。说一下,house_of_魑魅魍魉是我最先发现的链,发现它时因为攻击方式主要分为4步,所以我将各个步骤分为魑、魅、魍、魉,这也是名字的由来。

从2.29中largbin_attack第一条链修复已经过了4年,历经setcontext+53变更,__malloc_assert修复,exit调整,再加上从2.27之后abort不再刷新缓冲区,可以看出GNU对非正常退出函数的保护已经越来与完善,但是第二条链仍然坚挺的存活,所以可以认为:largbin_attack第二条链是GNU的官方测试后门,让我们帮助他们免费挖掘漏洞。largbin attack第二条链被修复时,就是GNU认为它没有利用价值的时候。所以,目前包括IO在内所有结构体漏洞的挖掘都还是有意义的。

当然,2.37不会是常见版本,按照ubuntu的尿性,2.39大概率是稳定版本,到时候宽字符的问题是必然会解决的,也就是我们还有大概1年的时间挥霍。本来按照原有的路径挖掘方式,IO漏洞是可以很快就全部挖完的,从how2heap中也可以看出,攻击手段越来越少,House of Banana已经开始攻击rtld_global结构体了,当GNU对exit函数下手的时候,就是IO的终点了。但是,GLIBC2.37让我看到了一些不同,GNU在对IO有着较大野心,可以看出他们有着程序的独特的固执,在代码的优雅性上越走越远。

我认为house_of_魑魅魍魉应该是综合评分最高的利用方式,主要是鉴于它是一套攻击思路,而非简单的一个攻击链,攻击方式难以被修复,我在第4篇时写的它需要3个条件。

以下分析是个人观点,

如此看来,貌似第一步修订最简单。但关键点就在于,GLIBC2.37新加的内容就是在为了代码的复用性,代码的强复用就必然会在后面的修改中大量使用结构体的复用,也让这一步成了最难修订的一步。照此以往,house_of_魑魅魍魉可能会变成压垮largbin attack第二条链的最后一根稻草

在一骑当千中我说过,我本来不想把它公开的,这一技巧和house_of_琴瑟琵琶一样其实非常简单,我也很好奇为什么5、6年了还没有人发现。不想公开的原因是它的修复非常简单,如果修复了今后将失去沙盒很多的乐趣。

目前,各路大神的挖掘house思路就是在操作次数尽量少(malloc free edit)的情况下攻击虚表。因为堆题不能直接控制执行流,所以堆题就成了结合IO最好的工具。结合我做题以来的经验,我将堆的问题转化为几类。

说明:题目的种类万万千,以上的情况排除了出题人给出的奇葩显示或写入模式,是在最基本的输入与输出的情况下,抽象出来题目类型。

这种题目最为简单,2.34之前打hook,2.34及之后打EOP或者wide_IO都可以,如果有IO函数,还可以攻击house of 秦月汉关,基本上都是以tcache为主。

这种题目基本和上面的情况一样,只是在不能二次泄露的情况下,我们可以直接强制改写。

2.34之前打hook,2.34及之后打EOP或者wide_IO都可以。因为可以二次泄露,所以EOP也可以用。

2.34之前打hook,2.34及之后打vtableEOPwide_IO都可以。

说明:从这里开始是个转折,一般如果可以任意改写内存都是可以申请到这一块内存,在这种情况下,改写hook是非常直管且简单的,即使2.34之后没有了hook,也可以通过修改vtableEOP等手段来进行攻击。而如果无法任意改写内存则只能够通过IO来进行攻击。

如果不能任意改写内存,说明无法申请到这个内存,二次泄露基本不太可能。

能多次修改内存为堆值攻击选择很多,house_of_emma就是一种选择,当然宽字符的板子也没问题。

同5.

这种显然必须伪造IO,使用现有的apple、cat、魑魅魍魉、琴瑟琵琶等链进行攻击。

最早学习的时候觉得杂项杂,工具多,不适合我,后来发现web杂,语言、框架多,学习二进制觉得逆向杂,万物皆可以逆向,现在才发现,PWN你妹的最杂,理论上就没有任何题目塞不到pwn里面的。经过几年的卷路,PWN已经卷到快每边了,出题人已经从简单的堆、栈、IO、内核题目,渐渐把逆向、密码、web都融进来了,题目的内容是五花八门,没有非预期解根本做不出题目。

如何做pwn手?堆栈内核和IO。征战万千比赛场,坐牢。无数爆零又重现。
年少万兜鍪,雄心壮志仍未休。我命由我不由天,开卷。万千大佬背影远。
如何做pwn手?堆栈内核和IO。征战万千比赛场,坐牢。无数爆零又重现。
年少万兜鍪,雄心壮志仍未休。我命由我不由天,开卷。万千大佬背影远。
 

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (1)
雪    币: 40
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
合作一下聊聊, 重金酬谢。
2024-7-26 09:14
0
游客
登录 | 注册 方可回帖
返回
//