2024年计算机系统基础实训三—AttackLab实验(3),涨知识
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。






既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
2.自行注入的攻击的首地址;
3.在后两个阶段中(ROP攻击),与farm.c的对应的可利用的gadget的起始地址,farm.c对应的机器码已经包含在可执行文件中。可以使用的gadget首地址需处于start_farm和end_farm之间的部分。
注意:前三个阶段使用ctarget作为攻击目标文件,后两个阶段中使用rtarget作为攻击目标文件。
每个阶段考察一个缓冲区溢出方式,难度逐级递增:
n阶段1:使用非ROP方式对ctarget进行攻击,调用touch1,且成功输出Touch1!: You called touch1。若不完全满足题目要求,则会提示“Misfire”和FAIL相关字段。
n阶段2:使用非ROP方式对ctarget进行攻击,调用touch2,且成功输出Touch2!: You called touch2。攻击过程中需要改写cookie变量的值。若不完全满足题目要求,则会提示“Misfire” 和FAIL相关字段。
n阶段3:使用非ROP方式对ctarget进行攻击,调用touch3,且成功输出Touch3!: You called touch3。攻击过程中需要使hexmatch的返回值能够正确引导validate函数。若不完全满足题目要求,则会提示“Misfire” 和FAIL相关字段。
n阶段4:使用ROP方式对rtarget进行攻击,调用touch2,且成功输出Touch2!: You called touch2。若不完全满足题目要求,则会提示“Misfire” 和FAIL相关字段。
n阶段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
-
gdb调试器和objdump反汇编指令
-
笔记本
实验过程与结果(可贴图)
ctarget的函数调用链:main() -> test() -> getbuf() -> Gets()
我的cookie值为:0x49e7ed15
现将ctarget生成汇编代码,开始做题:
阶段1
首先查看getbuf的汇编代码:objdump -d ./ctarget
实验过程与结果(可贴图)
ctarget的函数调用链:main() -> test() -> getbuf() -> Gets()
我的cookie值为:0x49e7ed15
现将ctarget生成汇编代码,开始做题:
阶段1
首先查看getbuf的汇编代码:objdump -d ./ctarget

从中可以看出BUFFER_SIZE的大小是56 (16进制 0x38),retq指令作用等价于:可以通过objdump -d命令查看ctarget的汇编代码,从而设计自己的注入字符串。
反汇编函数test

反汇编touch1

touch1函数的起始地址为0x4018e5。getbuf在栈中分配了56个字节的内存来存储输入数据。在执行ret指令后,从%rsp+56处获得返回地址,因此我们需要来利用缓冲区溢出覆盖掉其返回地址,就可以将返回地址修改为touch1的起始地址。
构造合适的字节序列(16进制表示),写到文件phase1.txt 中。

我的机器使用 小端法 。e5 18 40 00 00 00 00 00 表示的地址就是 0x4018e5
执行以下指令进行测试
cat phase1.txt | ./hex2raw | ./ctarget -q

阶段2
在第二个实验中需要在注入字符串中加入一小段的代码

Touch2的起始地址为0x401913,而“cmp %edi,0x203bdb(%rip) ”说明touch2中的val则存在$edi中。也就是我们需要先将edi中的值设置为cookie,然后再跳转到touch2执行。
建立phase2.s文档,输入注入代码内容为:

利用gcc -c phase2.s和objdump -d phase2.o命令得到机器代码:

可以得到三条指令序列如下:
48 c7 c7 15 ed e7 49 68 13 19 40 00 c3
接下来就是寻找%rsp的地址,利用gdb进行调试

地址为0x5561fe38,如上所示,我们获取到了%rsp的地址,结合上文所讲,可以构造出如下字符串,在栈的开始位置为注入代码的指令序列,然后填充满至56个字节,在接下来的8个字节,也就是原来的返回地址,填充成注入代码的起始地址,也就是%rsp的地址,可以得到如下字符串:


阶段3
反汇编代码

参数是一个指针变量(即为内存地址),使用gdb调式得到这个地址量

函数test输入参数所在的内存地址为0x5561fe30,touch3起始地址为0x401a2a,模仿第二关的操作,新建phase3.s,先写出攻击代码的汇编


可以得到三条指令序列如下:
48 c7 c7 78 fe 61 55 68 2a 1a 40 00 c3
在hexmatch代码中我们可以看出需要让touch3参数val等于我的cookie字符的字符串表示。
我的cookie:0x49e7ed15
字符串表示为:34 39 65 37 65 64 31 35
找到%rsp的地址

得%rsp地址为0x5561fe38
得到字符串如下:

验证:

阶段4
与第二关相同,需要我们修改返回地址,调用touch2函数
其中两行攻击的代码是第二关的首地址:401913,还有Cookie值:49e7ed15

利用老师给的四张图

结合网上的教程,test 函数调用 getbuf 返回时,由于无法再像第一部分那用在栈中注入攻击代码。所以需要跳转到合适的 gadget 指令。
popq %rax #将cookie弹入 %rax 中
movq %rax,%rdi #将 %rax 的值复制到 %rdi 中,即 touch2 函数中的第一个参数。
有上述图可知:
popq %rax → 58
movq %rax,%rdi → 48 89 c7
将rtarget进行反汇编



得到有两个答案


阶段5(没做出来)
我直接翻译每一个可通过表格的代码
给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

因篇幅有限,仅展示部分资料
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
ttps://img-blog.csdnimg.cn/direct/a91b9e8100834e9291cfcf1695d8cd42.png#pic_center)
因篇幅有限,仅展示部分资料
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)