一道伪造空闲chunk,利用unlink攻击指针数组的题,算是比较典型。
先checksec,堆题不开PIE,八成是打堆块指针数组,然后劫持指针指向got表附近,通过覆写got表拿到shell。

程序有四个功能。前面输入name和Addr都没啥用。

审计代码,Add,Del,Show都是很简单的,可以得知申请的堆块地址和申请的空间的大小是由两个数组管理的。Del里面没有UAF漏洞。Add中申请0x80可以得到unsorted bin chunk
在读取字符串的函数中,存在一个整数溢出漏洞。这里在for循环的判断条件中,本意是让i在0~size-1的范围内,即输入size个字符。但是这里size-1为有符号数,i为无符号数,比较时会把size-1变为无符号数。而申请堆块时,malloc(0)会返回一个0x20大小的堆块。而size为0时,size-1为0xff ff ff ff ff ff ff ff,这里几乎可以无限制地溢出

Edit函数可以覆盖原本的内容,也可以在后面续写。

本文介绍了一道经典的堆溢出题目,通过伪造空闲chunk并利用unlink攻击指针数组来实现对got表的篡改,最终获得shell。文章详细解释了如何利用整数溢出漏洞,以及如何通过精心构造的数据覆盖原有内容,实现对内存布局的控制。
最低0.47元/天 解锁文章
2764

被折叠的 条评论
为什么被折叠?



