计算机系统基础实验 AttackLab

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

本文是作者的作业备份,仅作参考,不可照搬抄袭!

实验背景:

本实验分为五个阶段,ctarget的三个使用的是CI(code-injection),rtarget的两个阶段使用的是ROP(return-oriented-programming),如表1所示

计算机系统基础实验 AttackLab

ctarget和rtarget都是用getbuf函数从标准输入读入字符串,getbuf函数定义如下:

计算机系统基础实验 AttackLab

函数Gets类似于标准库函数gets,从标准输入读入一个字符串(以’\n’或者end-of-file结束),将字符串(带null结束符)存储在指定的目的地址。从这段代码可以看出,目标地址是数组buf,声明为BUFFER_SIZE个字节。BUFFER_SIZE是一个编译时常量,在你的target程序生成时就具体确定了(每位学生的targetBUFFER_SIZE不同)。

函数Gets()gets()都无法确定目标缓冲区是否够大,能够存储下读入的字符串。它们都只会简单地拷贝字节序列,可能会超出目标地址处分配的存储空间的边界。

如果用户输入的字符串足够短,getbuf会返回1

计算机系统基础实验 AttackLab

如果用户输入的字符串很长,就会出错, 如图3所示:

计算机系统基础实验 AttackLab

实验步骤:

第一关:

首先调用了test函数,test中调用了getbuf函数,经过getbuf函数后返回test函数。

    而第一关要求调用test函数后,不是正常返回test,而是执行touch1

计算机系统基础实验 AttackLab

计算机系统基础实验 AttackLab

    从touch1函数可以看出,只有一个输出函数,不需要写入新代码。所以只要在栈中将程序getbuf的返回指令ret中的地址换成touch1的地址就可以了。

计算机系统基础实验 AttackLab

    从sub $0x18,$rsp 可以看出getbuf创建的缓冲区大小为0x18,即24个字节。

计算机系统基础实验 AttackLab

    而touch1的起始地址为0x401911,所以只需要利用缓冲区溢出去更改返回地址就可以了。

    所以我们的攻击字符串attack1为

计算机系统基础实验 AttackLab

计算机系统基础实验 AttackLab

第二关:

与第一关类似,需要调用test在getbuf函数返回时,执行的是touch2而不是test

计算机系统基础实验 AttackLab

       而观察touch2发现,除此以外,还需要利用缓冲区溢出注入数据,使得val中的数据等于我的cookie=0x66c417e7

计算机系统基础实验 AttackLab

       而touch2的起始地址为0x40193f,而“cmp %edi,0x203baf(%rip)”说明touch2中的val则存在$edi中。也就是我们需要先将edi中的值设置为cookie,然后再跳转到touch2执行。

       通过汇编与反汇编代码得:

计算机系统基础实验 AttackLab

       第一串攻击字符串为48 c7 c7 e7 17 c4 66 68 3f 19 40 00 c3

       而通过gdb,在0x401907处设置断点去查看getbuf下rsp所在地址

计算机系统基础实验 AttackLab

计算机系统基础实验 AttackLab

       得到地址0x55666448,

       所以最后得到攻击字符串:

计算机系统基础实验 AttackLab

计算机系统基础实验 AttackLab 

第三关:

计算机系统基础实验 AttackLab

       Getbuf调用后执行touch3,而touch3中调用了hexmatch的函数,而在hexmatch代码中我们可以看出需要让touch3参数val等于我的cookie字符的字符串表示。

       我的cookie=0x66c417e7

       而字符串表示 0x66c417e7=36 36 63 34 31 37 65 37

计算机系统基础实验 AttackLab

       Touch3的起始地址为0x401a56,确认函数位置后我们需要确认将cookie的字符串表示放在合适的地方,而当调用hexmatch函数后,缓冲区中的数据会发生改变,所以我们需要看一下调用前后缓冲区的情况。

       先写一个attack3.txt的攻击字符串,通过./hex2raw < attack3.txt > bufraw3.txt 转换成攻击代码,gdb进入touch3去看缓冲区.

计算机系统基础实验 AttackLab

       缓冲区地址由第二关可知是0x55666448

       在调用hexmatch(0x401a6d)前后设置断点。

计算机系统基础实验 AttackLab

计算机系统基础实验 AttackLab

       比较调用前后的缓冲区,可以发现除了前面16个字节存放注入代码以外,还有0x55666450开始的40个字节也没有合适的空间可以存放调用后数据。

       然后我们发现从0x55666468处开始的8个字节是前后不变,都没有存放其他数据,可以用来放我们的cookie,所以将这个地址注入rdi中

       汇编与反汇编得:

计算机系统基础实验 AttackLab

       所以第一串攻击代码为48 c7 c7 68 64 66 55 68 56 1a 40 00 c3

       最后得攻击字符串为:

计算机系统基础实验 AttackLab

计算机系统基础实验 AttackLab 

第四关:

计算机系统基础实验 AttackLab

计算机系统基础实验 AttackLab

计算机系统基础实验 AttackLab

计算机系统基础实验 AttackLab

计算机系统基础实验 AttackLab

计算机系统基础实验 AttackLab

使用gadget farm里的gadget来攻击rtarget函数,根据指令的字节编码,得出指令如下:

mov   %rsp,%rax

ret

计算机系统基础实验 AttackLab

mov   %rax,%rdi

ret

计算机系统基础实验 AttackLab

popq  %rax        

ret                 

计算机系统基础实验 AttackLab

movl  %eax,%edx

ret

计算机系统基础实验 AttackLab

movl  %edx,%ecx

ret

计算机系统基础实验 AttackLab

movl  %ecx,%esi

ret

计算机系统基础实验 AttackLab

lea   (%rdi,%rsi,1),%rax

ret

计算机系统基础实验 AttackLab

而本题要求:

  1. 只能使用movq 、popq、 ret、 nop的gadget。
  2. 只能使用前八个x86-64寄存器。
  3. 只能用两个gadget实现此次攻击。
  4. 如果一个gadget使用了popq指令,那么它会从栈中弹出数据。这样一来,攻击代码能既包含gadget的地址也包含数据。

与第二关相同,需要让val等于我的cookie值,而使得存放val的rdi寄存器注入cookie,可以用到以下的指令:

计算机系统基础实验 AttackLab

    需要用到两个gadget,分别是

mov   %rax,%rdi

ret

计算机系统基础实验 AttackLab

popq  %rax         

ret                 

计算机系统基础实验 AttackLab

所以攻击代码如下:

计算机系统基础实验 AttackLab

第五关:

本题要求为:

  1. 允许使用函数start_farm和end_farm之间的所有gadget。
  2. 可以使用movq、 popq、 ret、 nop、 movl指令,以及2字节指令。
  3. 只能使用前八个x86-64寄存器。
  4. 至少需要8个gadget实现此次攻击。

与第三关相同,需要将rdi的值设置为cookie的字符串表示的值,也就是存储cookie字符的地址。

       与第三关相同,需要将rdi的值设置为cookie的字符串表示的值,也就是存储cookie字符的地址。需要先将buffer填充溢出,然后再加上cookie的偏移量。

       结合上面的代码,可以进行这样的操作:

mov   %rsp,%rax

ret

mov   %rax,%rdi

ret

popq  %rax        

ret                

movl  %eax,%edx

ret

movl  %edx,%ecx

ret

movl  %ecx,%esi

ret

lea   (%rdi,%rsi,1),%rax

ret

mov   %rax,%rdi

ret

       而从第一条指令结束一直到cookie之前还有9条指令,所以偏移量为0x48

       所以攻击字符串为:

计算机系统基础实验 AttackLab文章来源地址https://www.toymoban.com/news/detail-494549.html

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

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

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

相关文章

  • 计算机操作系统实验:进程调度实验

    计算机操作系统实验:进程调度实验

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

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

    计算机系统实验2:炸弹实验bomb

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

    2023年04月26日
    浏览(6)
  • 计算机系统装配与集成实验

    计算机系统装配与集成实验

    1.通过学习、查阅/寻找资料,培养学生获取有关计算机组装的技术、工艺及测试方法、驱动程序的能力。 2.培养学生计算机硬件系统的拆卸、安装、故障排除,操作系统安装与设置,驱动程序加载,技术指标测试等方面的能力,获得计算机系统维护的基本训练。 3.培养学生遵

    2024年02月11日
    浏览(6)
  • 实验四-Shelllab实验(csapp、计算机系统外壳实验)

    实验四-Shelllab实验(csapp、计算机系统外壳实验)

    1、首先明确实验目的: ·总的来说就是让我们补充位于tsh.c中的七个函数,从而实现一个支持任务功能的shell。 因此在这儿将这七个函数分为两部分: (1)实现完成内建命令(jobs、fg、bg、kill)的四个函数:    接着再来了解一下tsh支持的四个内置命令: ·Q uit: 命令终止

    2024年02月05日
    浏览(9)
  • 计算机视觉实验:人脸识别系统设计

    计算机视觉实验:人脸识别系统设计

    设计 计算机视觉目标识别系统,与实际应用有关(建议:最终展示形式为带界面可运行的系统),以下内容选择其中一个做。 1. 人脸识别系统设计 (1) 人脸识别系统设计(必做):根据课堂上学习的理论知识(包括特征提取、分类器设计),设计一个人脸识别系统,该系统具

    2024年02月14日
    浏览(13)
  • 计算机系统(3) 实验一:MIPS64位指令集实验

    计算机系统(3) 实验一:MIPS64位指令集实验

    一、   实验目标: 了解WinMIPS64的基本功能和作用; 熟悉MIPS指令、初步建立指令流水执行的感性认识; 掌握该工具的基本命令和操作,为流水线实验作准备。 二、实验内容 按照下面的实验步骤及说明,完成相关操作 记录实验过程的截图 : 1)下载WinMIPS64;运行样例代码并

    2024年02月07日
    浏览(7)
  • 计算机操作系统实验-进程调度模拟算法

    进程调度是处理机管理的核心内容。本实验要求用高级语言编写模拟进程调度程序,以 便加深理解有关进程控制快、进程队列等概念,并体会和了解优先数算法和时间片轮转算法 的具体实施办法。 1.设计进程控制块 PCB 的结构,通常应包括如下信息: 进程名、进程优先数(

    2024年02月05日
    浏览(39)
  • 计算机组成原理实验二 存储系统预习报告

    计算机组成原理实验二 存储系统预习报告

    掌握静态随机存储器 RAM  工作特性及数据的读写方法。 基于信号时序图,了解读写静态随机存储器的原理。 1、阅读实验指导书,然后回答问题。 实验所用的静态存储器由一片 6116( 2K*8bit  )构成(位于MEM 单元),6116 有三个控制线:CS 表示( 片选线  ) ,   OE 表示

    2023年04月15日
    浏览(12)
  • 计算机系统结构与操作系统实验三(6)-内存管理

    计算机系统结构与操作系统实验三(6)-内存管理

    实现内存管理 这里修改makefile文件和run.sh文件 在《操作系统真相还原源码》的基础上稍加修改makefile 注意:这里要用 make all 命令来执行makefile文件了 本实验所有源码👉👉👉 计算机系统结构与操作系统实验三bochs源代码

    2024年02月15日
    浏览(10)
  • 计算机操作系统实验:页面置换算法的实现

    计算机操作系统实验:页面置换算法的实现

    本实验的目的是通过编程模拟不同的页面置换算法,比较它们的缺页率和命中率,加深对操作系统内存管理的理解。本实验采用C语言编写,实现了最佳置换算法(OPT)、先进先出置换算法(FIFO)和最近最久未使用算法(LRU)。实验中,页面号引用串从文本文件中读取,输出

    2024年02月02日
    浏览(14)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包