缓冲区溢出攻击实验(深大计系2实验4)三题思路+答案

本文介绍了缓冲区溢出攻击的实验,目标是通过构造特定输入,改变程序执行流程。实验包含三个关卡,要求利用GDB和objdump分析汇编代码,修改getbuf()函数的返回地址,分别使其跳转到smoke(), fizz()(传入cookie)和bang()函数。实验中涉及的知识包括X86-64汇编、栈帧结构和利用缓冲区溢出修改内存中的值。" 5543612,662157,Kruskal算法详解与测试:构建最小生成树,"['算法', '图论', '数据结构', 'C/C++']
摘要由CSDN通过智能技术生成

额 今天做的事缓冲区 溢 出 攻 击 实验

思路就是有个函数会一直读字符串,可是对字符串长度没有限制,所以会造成缓冲区的溢出,导致堆栈中的其他值被我们修改,达到攻击的目的

实验资源
链接: https://pan.baidu.com/s/1_ORsf-vCkZlccIlGYT5QIQ
提取码: bg27

预备知识

X86-64寄存器,立即数与寻址,汇编常用指令整理

gdb常见指令

run 执行
si 单步执行

b 设置断点,可以在函数调用时中断,即 
b  func1
或者在指定地址处中断,比如
b  *0x12f3de


p 查看数据
p (char*)0x123fed 查看对应地址的字符串
p *0x30fed4@7,查看0x30fed4往后对应7个数字
查看寄存器
p $rdx
查看寻址结果
p *(0x3014fd) 或者 p *($rdx)

实验介绍

本实验设计为一个黑客利用缓冲区溢出技术进行攻击的游戏。我们仅给黑客(同学)提供一个二进制可执行文件bufbomb和部分函数的C代码,不提供每个关卡的源代码。程序运行中有3个关卡,每个关卡需要用户输入正确的缓冲区内容,否则无法通过关卡!

要求同学查看各关卡的要求,运用GDB调试工具和objdump反汇编工具,通过分析汇编代码和相应的栈帧结构,通过缓冲区溢出办法在执行了getbuf()函数返回时作攻击,使之返回到各关卡要求的指定函数中。

(关卡是平行的,即输入三种答案,得到三种结果,而不是输入答案123得到最终结果这样子)

攻击目标:

实验攻击目标的程序为bufbomb(可执行文件,需要用objdump反汇编为汇编代码查看)。该程序中含有一个带有漏洞的getbuf()函数,它所调用的系统函数gets()未进行缓冲区溢出保护。其代码如下:

int getbuf()
{
   
    char buf[12];
    Gets(buf);
    return 1;
}

系统函数gets()从标准输入设备读字符串函数。以回车结束读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值