【CSAPP】-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.Linux操作系统—64位Ubuntu 18.04
2. gdb调试器和objdump反汇编指令
3. 笔记本

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

大致浏览一下整个lab的目录,一共6个文件:
cookie.txt 一个8为16进行数,作为攻击的特殊标志符
farm.c 在ROP攻击中作为gadgets的产生源
ctarget 代码注入攻击的目标文件
rtarget ROP攻击的目标文件
hex2row 将16进制数转化为攻击字符,因为有些字符在屏幕上面无法输入,所以输入该字符的16进制数,自动转化为该字符
level 1

这一关我们要做的是改变返回test的地址,让touch1的地址覆盖在test的地址上,使得程序返回touch1的地址,达到这个条件,就可以通关

利用gdb 调试ctarget找到我们需要的信息
linux> gdb ctarget

反汇编getbuf函数,找到实际在栈上分配了多少字节

0x28,16进制也就是40字节

反汇编touch1函数,找到touch1函数的起始地址


我们可以看到这两个函数加起来总共是48个字节
也就是说我们只要前面40个字节随机填充,后面8个字节改为touch1的地址
就可以让ctarget返回touch1的地址了

大部分电脑应该都是little-endian字节序,即低位在低地址,高位在高地址。

我们将要填充的字符写入ctargetl1.txt(名字可以自己取)

然后执行  ./hex2raw -i ctarget.txt | ./ctarget -q 命令验证

显示called touch1字样
代表我们已经通过了第一关

Level2

Cookie地址


Touch2地址


创建inject.s文件

将touch2地址填入


查看rsp地址


将rsp地址填入末八位


验证一下

./hex2raw -i ctargetl2.txt | ./ctarget -q


Level3

查看touch3地址


查看rsp地址

因为存在栈中的话,地址会被随机修改
所以这里我们加48字节
使它到父栈帧里面
0x5563c9d8

查看cookie对应的十六进制ascll码值

0x109899ba

这个可以在网上直接找到转换的网站

31 30 39 38 39 39 62 61

将值写入文本文件

转换的值会放入rsp进行修改


验证一下
./hex2raw -i ctargetl3.txt | ./ctarget -q


这里就是本菜鸟以上3关的通关过程了。
之后我们将每关的答案保存好,然后压缩提交即可。


 

实验总结

  通过这次实验,不仅强化了我对机器级表示、汇编语言、调试器和逆向工程等基础知识的理解,而且通过实践,我深入了解了栈溢出攻击的基本原理和应对策略。我深刻理解了栈溢出攻击的基本原理和实施过程。我明白了为什么某些特定的输入会导致程序崩溃或执行非预期的代码。同时,我也学会了如何利用调试器和逆向工程工具来分析程序的执行流程,从而更好地理解和防御这种攻击。学会了如何利用栈帧的信息进行攻击,如修改返回地址、设置全局变量等,以达到控制程序执行流程的目的。


很多事情都是熟能生巧的,底层的东西更应该一步一个脚印,希望看完这篇文章能够给到你一些启发,加油!

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

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

相关文章

C++线程安全是如何保证的?线程不安全是如何出现的?有什么处理方案呢

在C中&#xff0c;保证线程安全有如下几种机制&#xff1a; 1. 互斥锁&#xff08;Mutex&#xff09; 互斥锁用于保护共享资源&#xff0c;确保同一时间只有一个线程可以访问&#xff1a; #include <mutex> #include <thread>std::mutex mtx; // 全局互斥锁void…

游游的水果大礼包(枚举)

题目链接&#xff1a;https://ac.nowcoder.com/acm/problem/255193 题解 题目解析 就拿第一个例子来看&#xff0c;当选择组成1个一号礼包和1个二号礼包时最大的价值是3元&#xff0c;而选择2个二号礼包时&#xff0c;最大的价值是4元&#xff0c;因此选择2个二号礼包。 算法…

2-23 基于matlab的小波变换碰磨故障信号的特征提取

基于matlab的小波变换碰磨故障信号的特征提取&#xff0c;可以画出信号原图&#xff0c;轴心轨迹&#xff0c;频谱图以及多层小波变换的重构信号。程序已调通&#xff0c;可直接运行。 2-23 小波变换 碰磨故障信号 轴心轨迹 - 小红书 (xiaohongshu.com)

工厂设计模式的实现与应用场景分析

工厂设计模式的实现与应用场景分析 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 工厂设计模式&#xff08;Factory Pattern&#xff09;是一种创建型设计模…

Spring Boot 中使用 Spring Security 实现安全访问权限管理:详尽指南

引言&#xff1a; 在现代Web应用开发中&#xff0c;安全是一个至关重要的环节。Spring Security 是一个功能强大且高度可定制的安全框架&#xff0c;能够为Spring Boot应用提供全面的安全解决方案&#xff0c;包括认证&#xff08;Authentication&#xff09;和授权&#xff0…

html+css+js写的多人在线积分系统

可以添加成员&#xff0c;成员名称自定义 可以对各个成员加分减分➕➖ 可以删除成员 源码在图片下面&#xff0c;记得点赞加关注❤️❤️❤️ 界面 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8">…

2.2.5 C#中显示控件BDPictureBox 的实现----ROI交互续2

2.2.5 C#中显示控件BDPictureBox 的实现----ROI交互续2 1 ROI数组作用说明 变量&#xff1a;m_ROIs[5] ROI 使用效果图 ROI数组说明 2 ROI显示逻辑图 ROI 交互主要是在设定状态下&#xff0c; runmode下只要普通显示即可 3 主要ROI显示函数函数 判断当前鼠标是否获取…

怎么快速给他人分享图片?扫描二维码看图的简单做法

现在通过二维码来查看图片是一种很常见的方法&#xff0c;通过二维码来查看图片不仅能够减少对手机存储空间的占用&#xff0c;而且获取图片变得更加方便快捷&#xff0c;只需要扫码就能够查看图片&#xff0c;有利于图片的展现。很多的场景中都有图片二维码的应用&#xff0c;…

个人微信二次开发

​ 由于自身在机器人方面滚爬多年&#xff0c;现在收藏几个宝藏机器人 推荐一下自己常用的机器人&#xff1a; 适合有技术开发的公司&#xff0c;可以自主开发所需要的功能&#xff01;十分齐全 测试问文档&#xff1a;https://www.wkteam.cn/ 有需要的兄弟可以看一下&#…

题库-编程题

1&#xff0e;用循环的嵌套&#xff0c;输出输出如下图形 * * * * * * * * * * * * * * * * * * * * * * * * * package Exercises.One_Hundred; ​ public class Demo01 {public static void main(String[] args) {for(int i1;i<5;i){for(int j1;j<2*i-1;j){Sys…

音视频同步的关键:深入解析PTS和DTS

&#x1f60e; 作者介绍&#xff1a;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff0c;视频号&#xff1a;AI-行者Sun &#x1f388; 本文专栏&#xff1a;本文收录于《音视频》系列专栏&…

App备案过程中遇到的一些注意事项

上一篇从零开始完成App的ICP备案我们大致的把App的备份过了一遍&#xff0c;这次主要说下中途可能遇到的坑。 App备案需要通过接入服务商备案&#xff0c;同时需要域名、备案码&#xff08;1个app一个&#xff0c;android和ios版本共享&#xff09; 1. 备案名称 备案的名称就…

Vue.js 中 ref 和 reactive 的区别及用法

Vue.js 中 ref 和 reactive 的区别及用法 ref 目的&#xff1a;创建一个对值的响应式引用。 用法&#xff1a;通过 .value 属性来访问和修改值。 示例&#xff1a; import { ref } from vue;const count ref(0);count.value; // 增加值 console.log(count.value); // 访…

STM32 ADC精度提升方法

STM32 ADC精度提升方法 Fang XS.1452512966qq.com如果有错误&#xff0c;希望被指出&#xff0c;学习技术的路难免会磕磕绊绊量的积累引起质的变化 硬件方法 优化布局布线&#xff0c;尽量减小其他干扰增加电源、Vref去耦电容使用低通滤波器&#xff0c;或加磁珠使用DCDC时尽…

RS232隔离器的使用

RS232隔离器在通信系统中扮演着至关重要的角色&#xff0c;其主要作用可以归纳如下&#xff1a; 一、保护通信设备 电气隔离&#xff1a;RS232隔离器通过光电隔离技术&#xff0c;将RS-232接口两端的设备电气完全隔离&#xff0c;从而避免了地线回路电压、浪涌、感应雷击、静电…

el-upload组件封装方案

basic-upload.vue——基本上传组件 <template><div class"basic-upload-wrap"><el-uploadref"uploadRef":file-list"fileList":accept"accept"update:file-list"(data) > emits(update:file-list, data)"…

vue+js实现鼠标右键页面时在鼠标位置出现弹窗

首先是弹窗元素 <div class"tanchuang move-win1"id"tanchuang1"><el-button>111</el-button></div>然后在需要弹窗的地方监听点击事件&#xff0c;可以将这个方法写在页面载入事件中 // 获取弹窗元素 var tanchuang document.…

lua中判断2个表是否相等

当我们获取 table 长度的时候无论是使用 # 还是 table.getn 其都会在索引中断的地方停止计数&#xff0c;而导致无法正确取得 table 的长度&#xff0c;而且还会出现奇怪的现象。例如&#xff1a;t里面有3个元素&#xff0c;但是因为最后一个下表是5和4&#xff0c;却表现出不一…

一篇文章搞懂时间复杂度和空间复杂度

不知道小伙伴们有没有刷过力扣上的算法题&#xff0c;我在上研究生的时候&#xff0c;刷过了前40道题&#xff0c;上面的算法题&#xff0c;我觉得还挺难的&#xff0c;当你写完代码的时候&#xff0c;就可以提交自己写的代码到系统上&#xff0c;系统会给你写的代码计算时间复…

页面速度是如何影响SEO的?

搜索引擎使用复杂的算法来衡量您网站的重要方面&#xff0c;以决定是否向您发送流量。 搜索引擎使用您网站的小元素来确定您网站的质量和真实性&#xff0c;然后此操作将转化为您的网页在搜索引擎结果页面 中出现的位置。提高您在 SERP 中的排名的过程称为搜索引擎优化 (SEO)。…