Exploit-Exercise之Protostar-heap

本文深入解析Protostar的堆溢出挑战,涵盖heap0至heap3关卡,详细讲解利用堆溢出漏洞控制程序流程的方法,包括覆写函数指针、利用use-after-free漏洞和dlmalloc的unlink函数实现攻击。

0x00
Protostar涉及栈溢出、堆溢出、格式化字符串漏洞、网络编程、及综合性漏洞。
本文将介绍heap部分。

关于环境准备,在官网https://exploit-exercises.lains.space/protostar/下载即可。下载后得到iso镜像,使用vmware安装。然后使用user/user即可登录
查看ip
在这里插入图片描述

知道ip后可以在kali中ssh连上
在这里插入图片描述

输入user即可
机器上所有需要分析的程序都在如下路径
在这里插入图片描述

0x01
第一关heap0
在这里插入图片描述

这里可以看到存在缓冲区溢出的地方在d->name,我们输入的数据会赋给d-

name,其大小为64字节,如果溢出,则会继续覆写到f->fp;本题如果在正常的执行情况下会执行nowinner(),而攻击者可以通过覆写f->fp,控制程序执行流程,从而执行winner()
我们使用ltrace进行跟踪,来分析malloc调用的情况
ltrace /opt/protostar/bin/heap0 perl -e 'print "A"*64'
在这里插入图片描述

可以看到f->fp地址为0x0804a050,d->data地址为0x0804a008
之间的偏移为72字节,那么我们只要填充72字节,再加4字节来覆盖f->fp,这样就可以控制执行流了
我们使用gdb调试看看
run perl -e 'print "A"x72 ."BBBB"'
在这里插入图片描述

可以看到,确实可以劫持控制流了
接下来来找到winner的地址
在这里插入图片描述

找到地址后表示为小端序,然后替换前面那个pyaload中的BBBB即可
/opt/protostar/bin/heap0 perl -e 'print "A"x72 ."\x64\x84\x04\x08"'
在这里插入图片描述

可以看到已经执行了winner()

0x02
第二关 heap1
在这里插入图片描述

程序中分配了两个internet结构体,每个结构体都有一个单独分配的name指针,这意味说被分配在堆上的internet结构体包含一个指针,该指针指向位于堆上的另一处的内存空间,即指向接收用户输入的buffe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值