Attack Lab:Phase1~Phase5【缓冲区溢出实验】

注:本实验所用文件不是csapp官网给出的,是学校下发的。可以参考我的思路。

phase 1

本阶段目标是使getbuf调用结束后,控制权交给touch1函数。

则我们要知道两件事:一是缓冲区大小,二是touch1在虚拟内存中的位置。

用objdump -d ctarget > ctarget.s命令,反汇编ctarget代码。用本机安装的vs打开,方便阅读。

如下图,缓冲区大小为0x38字节,即56字节。

如下图,touch1的位置在0x4018a3.

那么,就可以先输入56字节的任意数据,将getbuf的缓冲区填满,然后溢出8个字节这8个字节原本的内容是test调用getbuf后的返回地址。将这个返回地址用touch1的地址(0x4018a3)覆盖,这样在getbuf函数执行retq指令后,程序就会返回到touch1函数,执行touch1函数

新建一个名为e1.txt文件,输入以下内容。

这个e1.txt文件中的内容就是在getbuf中,用户要输入的内容。但是不能直接定向输入到ctarget中,而是要将数据通过hex2raw程序转化后输入ctarget程序

hex2raw的使用方法如下图。

所以,如下图,用hex2raw小工具得到真正的二进制代码,带参数运行。本阶段完成。(个人信息部分已隐藏)

phase 2

本阶段目标是调用touch2,并且传递一个正确的参数。

其中cookie是0x2486651c

我们注入的代码的要做的事情:

将cookie的值(0x2486651c) mov到第一个参数(寄存器rdx)

把touch2位置压入栈中

返回

如下图,其中touch2的位置为4018d7。

翻译为汇编代码:

movl $0x2486651c, %rdi

push $0x4018d7

ret

将以上汇编代码用gcc编译为机器代码,再反汇编得到:

至此得到了应注入的机器代码。不要忘记,溢出区的地方写栈顶地址,以便在buf函数调用结束后rip跳到我们注入的代码的地址。栈顶地址可以通过gdb调试时的rsp值得到,为0x55631238。新建一个名为e2.txt文件,输入以下内容:

用hex2raw小工具得到真正的二进制代码,带参数运行。本阶段完成。

phase 3

本阶段的目标是调用touch3,调用时向touch3传递一个参数,是字符串,字符串的内容是cookie,即sval=“2486651c\0”.并且要特别注意字符串的存放位置,不能存在buf的栈帧(即大小为0x38字节的缓冲区)中,不然调用其他函数时马上会被覆盖,按地址读出的就不是我们写入的sval字符串了。所以将其存在溢出后的位置,即text函数的栈帧中。

我们注入的代码的要做的事情:

将存放字符串的地址mov到rdx

touch3函数首地址压栈

返回

如下图,touch3的地址为0x4019f0

翻译为汇编代码:

movq $0x55631278, %rdi

push $0x4019f0

ret

将以上汇编代码用gcc编译为机器代码,再反汇编得到:

至此得到了应注入的机器代码。不要忘记,溢出区的地方写栈顶地址(与阶段二的地址一样,是0x55631238,无需再次用gdb调试),以便在buf函数调用结束后rip跳到我们注入的代码的地址。接下来还要写入“2486651c\0”字符串。这个字符串转为ascii码为:32 34 38 36 36 35 31 63 00.

新建一个名为e2.txt文件,输入以下内容:

用hex2raw小工具得到真正的二进制代码,带参数运行。本阶段完成。

phase 4

接下来的两个阶段用到rtarget和farm.c

objdump -d rtarget > rtarget.s

用vs打开rtarget.s

本阶段的目标是用面向返回攻击的办法,使得touch2被成功调用。但是由于采用了栈随机化,即段程序分配的栈的位置在每次运行时都是随机的,这就使我们无法确定在哪里插入代码限制可执行代码区域,而且它限制栈上存放的代码是不可执行的且还有一个限制:最多用2段farm.c中的小工具。

所有可能会用到的机器指令如下图

不能注入自己写的代码,则缓冲区的0x38字节都不用,以56个00填充缓冲区。我们要用到的是溢出的部分。如同phase2的解决方法类似,把0x2486651c放到rdi寄存器中,返回。

所以溢出区的内容是

使用能从栈中pop的小工具

0x2486651c

touch2的地址

想把0x2486651c直接pop到%rdi中对应的机器指令为5f。

但小工具中没有5f,而有58。

于是想到movl %eax, %edi。恰好,小工具中有movl %eax, %edi对应的机器代码(89 c7)。

新建一个名为e4.txt文件,输入以下内容。

用hex2raw小工具得到真正的二进制代码,带参数运行。本阶段完成。

phase 5

本阶段的目标是用面向返回注入的办法调用touch3,并且最多用8段farm.c中的小工具。

用到的小工具如下面所示

根据在farm.c中找到的所有小工具,对应的指令顺序应该是下面这样的(顺序为从上到下)

movq %rsp, %rax

movl %eax, %edi

popq %ax

movl %ax, %cx

movl %cx, %dx

movl %dx, %si

R[ax] = R[si] + R[di]

movl %eax, %edi

对应的机器代码:

401ad9

89 c7

58

89 c1

89 ca

89 c6

48 8d 04 37

89 c7

各个小工具对应的地址为:

401ad9

401a9e

401a97

401b6f

401b32

401b97

401ad3

401a9e

栈中完整的内容如下(为了清晰的看出每句话的功能,写代码地址的地方替换为了汇编代码):

movq %rsp, %rax

movl %eax, %edi

popq %ax

0x48(偏移值)

movl %ax, %cx

movl %cx, %dx

movl %dx, %si

R[ax] = R[si] + R[di]

movl %eax, %edi

touch3的地址

cookie字符串

综上分析,新建一个名为e5.txt文件,输入以下内容。

用hex2raw小工具得到真正的二进制代码,带参数运行。本阶段完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/363486.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

山海鲸智慧教育方案:教育数据的未来

作为山海鲸可视化软件的开发者,我们深知数据可视化在教育领域的重要价值。山海鲸智慧教育解决方案正是在这样的背景下应运而生,致力于为教育行业提供高效、直观的数据可视化解决方案。 随着教育信息化的深入推进,教育数据呈爆炸式增长。如何…

vue3中使用了keep-alive来缓存页面使用onActivated和onDeactivated生命周期

1.说明 要求从实单订单列表跳转到物流账单列表时通过订单号(orderSn)进行筛选。现在出现的问题是所以第一次跳转到物流账单列表页面时是可以实现通过订单号进行筛选数据。在没有关闭物流账单列表页面就进行第二次跳转 2.出现的问题 3.keep-alive缓存页面特有的生命周期 vue2…

【算法与数据结构】300、LeetCode最长递增子序列

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;   程序如下&#xff1a; class Solution { public:int lengthOfLIS(vector<int>& nums)…

IP 了解

参考&#xff1a;5.1 IP 基础知识全家桶 | 小林coding IP 在 TCP/IP 参考模型中处于第三层&#xff0c;也就是网络层。 网络层的主要作用是&#xff1a;实现主机与主机之间的通信&#xff0c;也叫点对点&#xff08;end to end&#xff09;通信。 什么是 IP 地址&#xff1f…

线上品牌展厅有哪些优点,如何打造线上品牌展厅

引言&#xff1a; 在当今数字化时代&#xff0c;品牌展示的方式也在不断演变&#xff0c;线上品牌展厅作为一种新型的展示方式&#xff0c;正逐渐成为品牌宣传的新宠。但是为什么需要线上品牌展厅&#xff0c;线上品牌展厅有哪些优势呢&#xff1f; 一&#xff0e;为什么需要线…

【开源】基于JAVA+Vue+SpringBoot的用户画像活动推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 兴趣标签模块2.3 活动档案模块2.4 活动报名模块2.5 活动留言模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 数据流程设计3.4 E-R图设计 四、系统展示五、核心代码5.1 查询兴趣标签5.2 查询活动推荐…

[C++历练之路]C++多态底层逻辑知多少

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#x1f354;&#xff1a;学习了继承与多态&#xff0c;我相信大家对其底层的运用逻辑非常之好奇&#xff0c;今天我们就来探索一下多态中的底层逻辑&#xff0c;话不多说&#xff0c;我们现在开始&#xff01; 目…

【C++】 C++入门 — auto关键字

C入门 auto 关键字1 介绍2 使用细则3 注意事项 Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读下一篇文章见&#xff01;&#xff01;&#xff01; auto 关键字 1 介绍 编程时常常需要把表达式的值赋给变量&#xff0c;这就要求在声明变量时清楚地知道表达式的类…

系统移植--无法启动Linux内核--报错VFS--挂载nfs失败

问题 找信息&#xff1a;VFS 可能的原因 1、开发板上内核启动参数中的虚拟机ubuntu IP和真实的 虚拟机的IP不一致 2、开发板上内核启动参数中虚拟机的共享目录和虚拟机 ubuntu上配置的nfs服务器上的共享目录不一致 3、nfs配置文件(/etc/exports)路径错误 与自己的共享文件…

基于ARM的餐厅点餐系统的设计与实现

基于ARM的餐厅点餐系统的设计与实现 系统简介 本设计主要将 STM32F103ZET6 芯片作为无线订购系统主要控制芯片&#xff0c;分为顾客终端和厨师终端。顾客通过 LCD 显示屏浏览菜单并点击触摸屏选择自己所需菜单&#xff0c;并经过有线连接到 PC 端上位机&#xff0c;将订餐信息…

80.如何评估一台服务器能承受的最大TCP连接数

文章目录 一、一个服务端进程最多能支持多少条 TCP 连接&#xff1f;二、一台服务器最大最多能支持多少条 TCP 连接&#xff1f;三、总结 一个服务端进程最大能支持多少条 TCP 连接&#xff1f; 一台服务器最大能支持多少条 TCP 连接&#xff1f; 很多朋友可能第一反应就是端…

vue3页面跳转产生白屏,刷新后能正常展示的解决方案

可以依次检查以下问题&#xff1a; 1.是否在根组件标签最外层包含了个最大的div盒子包裹内容。 2.看看是否在template标签下面直接有注释&#xff0c;如果有需要把注释写到div里面。&#xff08;即根标签下不要直接有注释&#xff09; 3.在router-view 中给路由添加key标识。 …

DevOps落地笔记-06|代码预检查:提高入库代码质量的神兵利器

上一讲主要介绍了从软件开发的需求阶段就要关注非功能需求以及如何有效关注非功能需求&#xff0c;希望你对非功能需求引起重视&#xff0c;对软件的质量引起重视。除了对非功能需求的关注&#xff0c;代码本身的质量也是决定软件质量的关键因素&#xff0c;比如&#xff1a;代…

Docker中配置MySql环境

目录 一、简单安装 1. 首先从Docker Hub中拉取镜像 2. 启动尝试创建MySQL容器&#xff0c;并设置挂载卷。 3. 查看mysql8这个容器是否启动成功 4. 如果已经成功启动&#xff0c;进入容器中简单测试 4.1 进入容器 4.2 登录mysql中 4.3 进行简单添加查找测试 二、主从复…

判断当前设备是不是安卓或者IOS?

代码(重要点): 当前文件要是 xxx.js文件,就需要写好代码后调用才会执行: // 判断是不是安卓 const isAndroid () > {return /android/.test(navigator.userAgent.toLowerCase()); }// 判断是不是ios const isIOS () > {return /iphone|ipad|ipod/.test(navigator.use…

【操作系统·考研】文件系统

1.概述 文件系统(File System)提供高效和便捷的磁盘访问&#xff0c;以便允许存储、定位、提取数据。 严格来说&#xff0c;VFS并不是一种实际的FS&#xff0c;它只存在于内存中&#xff0c;不存在与任何外存空间中。 VFS在系统启动时建立&#xff0c;在系统关闭时消亡。 2.结…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextClock组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之TextClock组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、TextClock组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不同…

VMware vCenter告警:vSphere UI运行状况警报

vSphere UI运行状况警报 不会详细显示告警的具体内容&#xff0c;需要我们自己进一步确认告警原因。 vSphere UI运行状况警报是一种监控工具&#xff0c;用于检测vSphere环境中的潜在问题。当警报触发时&#xff0c;通常表示系统遇到了影响性能或可用性的问题。解决vSphere UI…

2024斋月大促提前,跨境卖家请收好这份准备指南与大促策略

市场覆盖西欧、中东、东南亚、北非地区的跨境电商卖家注意了&#xff0c;2024年的斋月即将开启&#xff0c;较往年日期&#xff0c;今年提前了10天左右&#xff0c;斋月的第一天预测在3月11日星期一到来。 根据Google搜索数据可知&#xff0c;目前已经进入高频“斋月”搜索期&…

nginx刷新404问题

问题分析 在配置好 nginx 转发之后&#xff0c;发现页面能正常打开&#xff0c;但只要按 F5 刷新之后就会报 404。这是因为 web 单页面开发模式&#xff0c;只有一个 index.html 入口&#xff0c;其他路径是前端路由去跳转的&#xff0c;nginx 没有对应这个路径&#xff0c;然后…