深入理解计算机系统AttackLab实验

这篇具有很好参考价值的文章主要介绍了深入理解计算机系统AttackLab实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

深入理解计算机系统AttackLab实验

AttackLab实验

实验目的与要求

  1. 强化机器级表示、汇编语言、调试器和逆向工程等方面基础知识,并结合栈帧工作原理实现简单的栈溢出攻击,掌握其攻击的基本方式和原理,进一步为编程过程中应对栈溢出攻击打下一定的基础。
  2. 理解缓冲区的工作原理和字符填充过程及其特点。对于无边界检测的语言及其工作方式所造成的缓冲区漏洞加深理解。
  3. 通过字符串填充的方式,完成5个阶段的缓冲区攻击。分别基于基本返回地址填充、攻击代码填充、ROP等实现这5个难度递增的阶段的缓冲区溢出攻击。

实验原理与内容

“AttackLab”是一个Linux下的可执行C程序,包含了5个阶段(phase1~phase5)的不同内容。程序运行过程中,要求学生能够根据缓冲区的工作方式和程序的反汇编代码来确定攻击字符串长度和字符串中的关键内容。每次成功实现缓冲区溢出攻击时都会有提示相应内容,如果攻击失败则单纯的提示segmentation fault相关信息。
要求攻击字符串的执行不许绕开代码中的validate函数,缓冲区溢出之后对应ret的返回地址可以是以下类型:
1.函数touch1、touch2、touch3的首地址;
2.自行注入的攻击的首地址;
3.在后两个阶段中(ROP攻击),与farm.c的对应的可利用的gadget的起始地址,farm.c对应的机器码已经包含在可执行文件中。可以使用的gadget首地址需处于start_farm和end_farm之间的部分。

注意:前三个阶段使用ctarget作为攻击目标文件,后两个阶段中使用rtarget作为攻击目标文件。

每个阶段考察一个缓冲区溢出方式,难度逐级递增:
 阶段1:使用非ROP方式对ctarget进行攻击,调用touch1,且成功输出Touch1!: You called touch1。若不完全满足题目要求,则会提示“Misfire”和FAIL相关字段。
 阶段2:使用非ROP方式对ctarget进行攻击,调用touch2,且成功输出Touch2!: You called touch2。攻击过程中需要改写cookie变量的值。若不完全满足题目要求,则会提示“Misfire” 和FAIL相关字段。
 阶段3:使用非ROP方式对ctarget进行攻击,调用touch3,且成功输出Touch3!: You called touch3。攻击过程中需要使hexmatch的返回值能够正确引导validate函数。若不完全满足题目要求,则会提示“Misfire” 和FAIL相关字段。
 阶段4:使用ROP方式对rtarget进行攻击,调用touch2,且成功输出Touch2!: You called touch2。若不完全满足题目要求,则会提示“Misfire” 和FAIL相关字段。
 阶段5:使用ROP方式对rtarget进行攻击,调用touch3,且成功输出Touch3!: You called touch3。若不完全满足题目要求,则会提示“Misfire” 和FAIL相关字段。

ctarget和rtarget都从standard input读入数据,可以以重定向文件的形式进行输入。实验利用getbuf函数中的缓冲区。getbuf函数的结构如下:
unsigned getbuf()
{
char buf[BUFFER_SIZE];
Gets(buf);
return 1;
}
函数中的Gets函数与标准库中的gets函数类似,它从standard input中读取字符(以\n或者EOF结尾)并将它们添加字符串结尾符\0后存入缓冲区中。学生需要根据ctarget和rtarget文件及其反汇编代码来确定缓冲区位置及大小,并想办法构建出攻击字符串。

实验过程与结果

实验过程与结果(可贴图)

阶段1:

(1).用objdump工具反汇编查看其代码,并存入文件中方便查看。命令为:
objdump -d ctarget > ctarget.txt
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

(2). 利用gdb 调试ctarget找到我们需要的信息
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

(3). 反汇编getbuf函数,找到实际在栈上分配了多少字节
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

从第一行sub $0x28, %rsp中显示,在栈上为buf提供了0x18也就是24个字节的空间
(4). 反汇编touch1函数,找到touch1函数的起始地址
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

从第一行中看出,touch1的返回地址是0x00000000004018a7。
以上,我们已经到了我们需要的所有关键信息,现在构建我们输入字符,首先填充栈,可以使用任意字符,这里创建了一个文件输入16进制的0x00填充,然后填充touch1地址(通过在getbuf阶段输入特定的字符串,拦截程序流,跳转到touch1)。注意字节序的问题,大部分电脑应该都是little-endian字节序,即低位在低地址,高位在高地址。
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

(5).使用如下命令进行结果验证:
cat phase1.txt | ./hex2raw | ./ctarget -q
(hex2row 将16进制数转化为攻击字符,因为有些字符在屏幕上面无法输入,所以输入该字符的16进制数,自动转化为该字符; | 管道符号)
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

阶段2:

(1).查看touch2函数
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

(2).这段程序就是验证传进来的参数val是否和cookie中值相等。本文中我的cookie值为:0x4cc8ffdc
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

.建立inject.s文档,输入注入代码(第一个立即数是我的cookie,第二个是touch2的地址)
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlabattacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

(3). 利用gcc和objdump命令得到机器代码: ump命令得到机器代码:
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

可以得到这三条指令序列如下:
48 c7 c7 dc ff c8 4c 68 d5 18 40 00 c3
(4). 接下来就是寻找%rsp的地址,利用gdb进行调试,获取我们需要的信息:
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

地址为0x5561f558,如上所示,我们获取到了%rsp的地址,结合上文所讲,可以构造出如下字符串,在栈的开始位置为注入代码的指令序列,然后填充满至40个字节,在接下来的8个字节,也就是原来的返回地址,填充成注入代码的起始地址,也就是%rsp的地址,可以得到如下字符串:
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

(5).验证通过
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

阶段3:

(1).首先找到touch3的反汇编代码
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

(2).参数是一个指针变量(即为内存地址),使用gdb调式得到这个地址量,具体操作如下所示。
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

(3).见info frame含义解释。可知函数test输入参数所在的内存地址为0x5561f578
touch3起始地址为0x4019ec,模仿第二关的操作,先写出攻击代码的汇编:

attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

(4).ump命令得到机器代码:

可以得到这三条指令序列如下:
48 c7 c7 78 f5 61 55 68 ec 19 40 00 c3
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

本文中cookie的值是0x5561f578,所以我们传进去的参数应该是"0x4cc8ffdc",(即 34 63 63 38 66 66 64 63 00)

找到%rsp地址
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

(5).得%rsp地址为0x5561f558
所以得到字符串如下
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab

(6).实验验证:
attacklab实验,AttackLab实验,深入理解计算机系统,编辑器,linux,matlab,ubuntu,gitlab文章来源地址https://www.toymoban.com/news/detail-760524.html

到了这里,关于深入理解计算机系统AttackLab实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《深入理解计算机系统(CSAPP)》第3章 程序的机器级表示 - 学习笔记

    写在前面的话:此系列文章为笔者学习CSAPP时的个人笔记,分享出来与大家学习交流,目录大体与《深入理解计算机系统》书本一致。因是初次预习时写的笔记,在复习回看时发现部分内容存在一些小问题,因时间紧张来不及再次整理总结,希望读者理解。 《深入理解计算机

    2024年02月07日
    浏览(61)
  • 《深入理解计算机系统(CSAPP)》第6章 存储器层次结构 - 学习笔记

    写在前面的话:此系列文章为笔者学习CSAPP时的个人笔记,分享出来与大家学习交流,目录大体与《深入理解计算机系统》书本一致。因是初次预习时写的笔记,在复习回看时发现部分内容存在一些小问题,因时间紧张来不及再次整理总结,希望读者理解。 《深入理解计算机

    2024年02月06日
    浏览(49)
  • 【80天学习完《深入理解计算机系统》】第十一天 3.5 过程(函数调用)

    专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录) 文章字体风格: 红色文字表示:重难点★✔ 蓝色文字表示:思路以及想法★✔ 如果大家觉得有帮助的话,感谢大家帮

    2024年02月11日
    浏览(45)
  • 【80天学习完《深入理解计算机系统》】第十二天3.6数组和结构体

    专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录) 文章字体风格: 红色文字表示:重难点★✔ 蓝色文字表示:思路以及想法★✔ 如果大家觉得有帮助的话,感谢大家帮

    2024年02月10日
    浏览(52)
  • 【80天学习完《深入理解计算机系统》】第十一天 3.4 跳转指令

    专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录) 文章字体风格: 红色文字表示:重难点★✔ 蓝色文字表示:思路以及想法★✔ 如果大家觉得有帮助的话,感谢大家帮

    2024年02月11日
    浏览(44)
  • 【计算机视觉中的多视图几何系列】深入浅出理解针孔相机模型

    温故而知新,可以为师矣! 《计算机视觉中的多视图几何-第五章》-Richard Hartley, Andrew Zisserman. 1.1 投影中心/摄像机中心/光心 投影中心 称为 摄像机中心 ,也称为 光心 。投影中心位于一个欧式坐标系的原点。 1.2 图像平面/聚焦平面 平面 Z = f Z=f Z = f 被称为 图像平面 或 聚焦

    2024年02月03日
    浏览(58)
  • 深入计算机系统看性能优化

    一.引言 “性能优化”,从计算机诞生之初就一直伴随着计算机技术的发展,直到现在。将来也必定不会消失。这是因为每个人都会追求性价比,花最少的钱,办最多的事。生活中也一样,就比如说泡茶,但凡有点常识的人都不会先洗茶杯,再去烧水,而是先去烧水,在等水

    2024年02月04日
    浏览(53)
  • 计算机操作系统实验:进程调度实验

    前言 二、实验目的 三、实验要求 四、实验原理 五、实验过程 六、代码详解 总结 计算机操作系统是管理计算机硬件和软件资源的核心软件,它负责为用户提供一个友好、高效、安全的使用环境。进程调度是操作系统的一个重要功能,它决定了进程在处理器上的执行顺序和时

    2024年02月07日
    浏览(57)
  • 计算机系统实验2:炸弹实验bomb

    炸弹实验 本次实验为熟悉汇编程序及其调试方法的实验。 实验内容包含2个文件bomb(可执行文件)和bomb.c(c源文件)。 实验主题内容为:程序运行在linux环境中。程序运行中有6个关卡(6个phase),每个phase需要用户在终端上输入特定的字符或者数字才能通关,否则会引爆炸

    2023年04月26日
    浏览(42)
  • 计算机系统实验二——bomblab(炸弹实验)

    bomblab 使用gdb工具 反汇编 出汇编代码,结合c语言文件找到每个关卡的 入口函数 。然后分析汇编代码,分析得到每一关的通关密码。 进一步加深对linux指令的理解,对 gdb调试 的一些基本操作以及高级操作有所了解。 熟悉汇编程序,懂得如何利用汇编程序写出C语言程序伪代

    2023年04月20日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包