当前位置:首页|资讯

【pwn29 IO进阶 FSOP-House of orange】

作者:K3yB0ard发布时间:2024-10-19

house of系列最经典的一种技术,出自湾湾经典比赛HITCON。也是堆利用+IO组合攻击技术的开山鼻祖了。

首先看一下程序保护:

checksec

经典的保护全开。题目所用libc版本为2.23。libc在2.24之后加入了对vtable指针的合法性检查,glibc 会在调用虚函数之前首先检查 vtable 地址的是否合法,这个题的2.23是可以打的。

house of orange之所以经典,在于它不仅开创了IO+堆的组合攻击手法,还给出了一种无free函数时得到freed堆块的方法,这个方法也在很多其他题目中得到应用,是非常值得学习的一道题目。

首先看一下main

main

经典的堆题目。看下menu

menu

程序支持add、show、edit操作,没有free函数。

add

add函数最多可以使用3次,最多添加三个堆块。这里分配的结构体属性有house、orange、price、color等,理一下结构关系如下:

其中存储price和color的堆块是大小为8字节,由calloc分配的堆块。name是由用户指定大小分配的不超过0x1000大小的堆块。分配后house的指针保存在全局变量中,相当于我们只能对当前house变量中的堆块进行操作。

show

show函数打印house指针的堆块信息,包括name。

edit

edit一共有三次机会,这里存在几乎是任意长度的堆溢出,edit中可以自定义读入数据的大小,如果new size大于old size,就会产生堆溢出。

攻击思路如下:

1、因为没有free,而我们想要在堆块上搞出来libc和堆地址是需要freed堆块。这里使用的到的新技术就是如何在无free情况下得到freed堆块——借助top chunk,topchunk在大小不够分配的时候会被堆管理器free掉,从而产生了得到freed堆块的可能性。只要堆溢出修改top chunk的size改小一点就可以了,值得注意的是新size跟旧size的需要在后两个字节对齐的,不过大小肯定不超过0x1000,所以我们修改之后再分配0x1000大小堆块,top chunk肯定不够分的,就会让我们得到一个freed堆块,它将进入unsorted bin,这就给了泄露libc地址和堆地址的可能性。

2、上面的操作得到unsorted bin需要先add,再edit溢出size,再add,才能将其free掉,之后我们还要再add一次把这个freed chunk给分配出来一部分,借助其残留的libc地址和heap地址用于泄露。泄露heap的时候需要edit函数来避免截断。至此,add三次以及edit两次用完。我们现在仅剩一次edit机会,现在有了libc地址和heap地址。

3、最后一次edit依旧构造堆溢出修改残留的那个unsorted bin,打unsorted bin attack,修改IO_list_all指针为main arena+88,相当于我们要在这个io链子上伪造fake IO_FILE_plus结构体,这里main arena+88+0x68是这个FILE结构体的chain,它恰好是main arena结构体中用于记录0x60大小的small bin的位置,如果我们有一个大小为0x60的small bin,这里就相当于把IO chain给连起来了。

4、所以我们最后一次edit,需要修改其size为0x61,在malloc时首先切割unsorted bin,触发unsorted bin attack,修改IO_list_all指针,同时得到将其放到small bin中去,然后malloc在检查unsorted bin的size的时候会触发corruption,这是由于unsorted bin attack造成的,然后程序走到IO fflush这条链子刷新所有FILE结构体,就会被劫持到我们伪造的结构体。

5、我们在溢出size为0x61的同时布置好FSOP的其他数据,即可劫持程序vtable执行任意函数。提前布置好/bin/sh和system,即可拿到shell。

理一理攻击思路:

1、溢出top chunk得到unsorted bin,show泄露libc 和heap地址

2、再次edit布置好数据,打Unsorted bin attack同时触发corruption打FSOP

完整攻击脚本如下:

值得注意的是house of orange的攻击成功率为50%,也有很多技术博客分析了其原因:

二分之一的原因

上面的图片截取自博客:
https://www.cnblogs.com/ZIKH26/articles/16712469.html

脚本攻击结果:

exp result

By  Del0n1x

Keyboard


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1