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/heap0perl -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

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

最低0.47元/天 解锁文章
1588

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



