[BUUCTF]zctf2016_note2

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

 一道伪造空闲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函数可以覆盖原本的内容,也可以在后面续写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值