对一个可执行程序“bufbomb”实施一系列5个难度递增的缓冲区溢出攻击缓冲区溢出攻击(buffer overflow attacks)——
即设法通过造成缓冲区溢出来改变该可执行程序的运行内存映像(栈帧
例如将给定的字节序列插入到其本不应出现的内存位置。
该程序基于命令行参数(用户号/学号)产生一个唯一的由8个16进制数字组成的字节序列(例如0x1005b2b7)
称为“cookie”,用作实验中需要置入栈中的数据之一并区分不同学生的实验
./makecookie 你的学号,即可生成你的唯一的cookie
userid
以给定的用户ID“userid”(例如学号)运行程序。
每次在运行程序时均应指定该参数
因为bufbomb程序将基于userid决定内部使用的cookie值(同makecookie程序的输出)
在bufbomb程序内部,一些关键的栈地址取决于userid所对应的cookie值。
-h:打印可用命令行参数列表
-n:以“Nitro”模式运行,专用于Level 4实验阶段(栈状态会不一样,自己体会)
攻击方法
一点点关于字符串的说明
设攻击字符串包含于文件Solution.txt中,
可使用如下命令测试攻击字符串在bufbomb上的运行结果,并与相应难度级的期望输出对比,以验证通过与否
cat solution.txt | ./hex2raw | ./bufbomb -u [userid]
其中solution.txt是你的攻击字符串, hex2raw是将你的字符串由16进制状态转为文本然后输出到输入
userid 请填 你的学号
简而言之,你需要构造的是用十六进制表示的字符串(注意大端小端的区别)并用工具来输入
准备工作
首先进行的是前四关的分析,这时候。缓冲区的大小是确定的
数组的首地址也是确定,因此先进行一些准备工作。
我们首先进行代码的分析:
可见在栈内为数组开辟的大小为50字节的内存。所以为了覆盖返回地址
应该写入50+4+4也就是58个字节的数据,其中最后四个字节是要篡改的地址。
可见,smoke的首地址是08048ba1,所以将这个值写在第55到58个字节就能实现攻击。
自己找找getbuf的传入参数等是什么
过程调用的栈的状态自己看看
感谢南大教学ppt, 23333
原文:https://www.cnblogs.com/Crossea/p/14115773.html