【CSAPP】探秘AttackLab奥秘:level 2的解密与实战

2024-03-08 17:10

本文主要是介绍【CSAPP】探秘AttackLab奥秘:level 2的解密与实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

⏰雅致吟赋:翠竹婆娑夏雨收,意随花香扬袅袅。 忧愁轻解梦初醒,光阴流水自逍遥。

📋 前言

 🎉欢迎大家关注🔍点赞👍收藏⭐️留言📝

 🔔作者留言:

欢迎来到我的【CSAPP】攻击实验室!这里是探索计算机系统安全领域的秘境,我的学习笔记博客将引导你进入CSAPP的攻击之门。在这个实验室中,我不仅分享计算机系统的基本原理和高级技术,还涵盖了实用的攻击技术和项目经验的秘密武器。无论你是初学者还是安全大师,这个实验室将为你呈现学术与实践的魔法,助你在CSAPP的攻击领域中展开一场刺激的冒险。准备好了吗?跟随我的引导,让我们一同挑战那些神秘的攻击代码,揭开计算机系统安全的神秘面纱!

目录

📋 前言

🌳1. CSAPP与AttackLab简介

🌼1.1 CSAPP

🌼1.2 AttackLab

🌳2. AttackLab

🌼2.1 实验环境

🌼2.2 实验过程

🌼2.3 level 2

🌻2.3.1 解决思路

🌻2.3.2 问题验证

🌼2.4 实验结果

🌼2.5 实验体会

📝 总结 


🌳1. CSAPP与AttackLab简介

🌼1.1 CSAPP

《CSAPP》是指计算机系统基础课程的经典教材《Computer Systems: A Programmer's Perspective》,由Randal E. Bryant和David R. O'Hallaron编写。该书的主要目标是帮助深入理解计算机系统的工作原理,包括硬件和软件的相互关系,其涵盖了计算机体系结构、汇编语言、操作系统、计算机网络等主题,旨在培养学生系统级编程和分析的能力。


🌼1.2 AttackLab

target1实验通常与CS:APP书中的“Buffer Overflow Attack”相关。这个实验旨在教授计算机系统的安全性,防止攻击者定位攻击和锻炼使用金丝雀防护,特别是关于缓冲区溢出漏洞的理解和利用。在这个实验中,尝试利用缓冲区溢出漏洞来修改程序的执行流程,从而实现未授权的操作,比如执行恶意代码或获取系统权限。要求深入了解程序内存布局、堆栈和函数调用等概念,并学会利用输入缓冲区溢出漏洞来修改程序行为,这有助于理解系统安全中的一些基本原则和漏洞。

资源获取:关注公众号【科创视野】回复  csappattacklab


🌳2. AttackLab

🌼2.1 实验环境

  • VMware Workstation虚拟机环境下的Ubuntu 64位。

🌼2.2 实验过程

实验准备阶段:首先需要使用ubuntu联网环境跳转到链接下载实验所需的attacklab:attacklab源文件

下载target1压缩包并输入

tar –xvf target1.tar

进行解压缩,进入该目录所有文件如下所示:

​​​​

当前提供材料包含一个攻击实验室实例的材料:

1.ctarget

带有代码注入漏洞的Linux二进制文件。用于作业的第1-3阶段。

2.rtarget

带有面向返回编程漏洞的Linux二进制文件。用于作业的第4-5阶段。

3.cookie.txt

包含此实验室实例所需的4字节签名的文本文件。(通过一些Phase需要用到的字符串)

4.farm.c

rtarget实例中出现的gadget场的源代码。您可以编译(使用标志-Og)并反汇编它来查找gadget。

5.hex2raw

生成字节序列的实用程序。参见实验讲义中的文档。(Lab提供给我们的把16进制数转二进制字符串的程序)

在终端处输入命令

tar -xvf target1.tar

将压缩包解压如下:

​​​​

图3-2

实验过程阶段:

使用

objdump -d ctarget > ctarget.asm

objdump -d rtarget > rtarget.asm

对ctarget以及rtarget进行反汇编,得到ctarget.asm和rtarget.asm。

​​​​

在官方文档的目标程序给出,CTARGET和RTARGET都从标准输入读取字符串。它们使用下面定义的函数getbuf来执行此操作:

​​​

函数Gets类似于标准库函数gets—它从标准输入中(从缓冲区)读取字符串 (以’ \n '或文件结束符结束) 并将其(连同空结束符)存储在指定的目的地。即空格/Tab/回车可以写入数组文本文件,不算作字符元素, 不占字节,直到文件结束, 如果是命令行输入的话,直到回车结束(区别getchar ():是在输入缓冲区顺序读入一个字符 (包括空格、回车和 Tab)结束,scanf:空格/Tab/回车都当作结束。函数Gets()无法确定它们的目标缓冲区是否足够大,以存储它们读取的字符串。它们只是复制字节序列,可能会超出在目的地分配的存储边界(缓冲区溢出)对应汇编代码:

​​​

因为Ctarget就是让我们通过缓冲区溢出来达到实验目的,所以可以推断sub $0x28,%rsp的40个字节数就等于输入字符串的最大空间,如果大于40个字节,则发生缓冲区溢出(超过40个字节的部分作为函数返回地址,如果不是确切对应指令的地址,则会误入未知区域,报错:

Type string:Ouch!: You caused a segmentation fault!段错误,可能访问了未知额内存)


🌼2.3 level 2

第2阶段涉及注入少量代码作为漏洞利用字符串的一部分。

在文件ctarget中,存在用于具有以下C表示的函数touch2的代码:

​​​​

任务是让CTARGET执行touch2的代码,而不是返回测试,且输入的字符串要与Cookie文件中的字符串相匹配。


🌻2.3.1 解决思路

    根据文件中的信息,得知首先需要把字符串送到寄存器%rdi中,再进入touch2函数,即可通过Level2

所以,指令应该包括以下两个部分:

1.把字符串cookie mov进%rdi中

2.进入touch2

在vim中,编写 InjectCode1.s文件,编写汇编之后再反汇编,将得到的指令的机器码写入最后运行的十六进制(字符串)文件中即可。

查找函数touch2的地址为4017ec:

​​​​

新建一个anwer1.s文件,输入内容如下:

​​​​

其中,movq $0x59b997fa,%rdi是为了将cookie字符串存到%rdi中,pushq $0x4017ec是为了将touch2的地址压入栈中,而retq指令是为了将栈中值弹出,然后跳转到该地址。

创建完成后如下所示

​​​​

输入命令:

gcc -c anwer1.s

会生成机器码文件anwer1.o, 输入命令:

objdump -d anwer1.o > anwer1.txt

进行反汇编,得到anwer1.o和anwer1.txt:

​​​​

进入anwer1.txt得到反汇编结果如下:

​​​​

其中,汇编指令对应的机器码如下:

48 c7 c7 fa 97 b9 59
68 ec 17 40 00
c3

接下来需要找到40个字符 开栈的位置(即调用getbuf()函数数据压入栈后栈顶指针%rsp的值),让getbuf()返回到这片代码区域(touch2的地址即最终返回地址)

查看函数getbuf的汇编代码:

​​​​

起始地址为4017a8,所以需要在4017a8处设置断点(即还没运行4017a8),查看栈顶指针寄存器%rsp的值。

输入命令调试:

gdb ctarget 

设置断点:

b *0x4017a8 

r -q运行, p $rsp查看%rsp的值

​​​​

得到%rsp此时为 0x5561dca0,根据开栈40字节推算:0x5561dca0-0x28 = 0x5561dc78,即40个字节的开栈位置为0x5561dc78,然后把操作指令放到该位置,让getbuf()返回到这片代码区域(touch2的地址即最终返回地址)。


🌻2.3.2 问题验证

输入命令:

vim lever2.txt

创建内容如下:

​​​​

输入命令:

./hex2raw < level2.txt | ./ctarget -q

​​​​


🌼2.4 实验结果

由于实验通关过程中是分阶段的,故展示通关过程中所需的创建文件如下:

​​​​


🌼2.5 实验体会

  1. 深度理解底层系统编程: AttackLab实验让我深入理解了底层系统编程的复杂性。通过解密与实战,我不仅掌握了汇编语言和底层系统的关键概念,还学到了如何在这个层面上进行攻击和防御。这对于一个计算机科学学生来说是一次宝贵的体验,让我更好地理解计算机系统的运作原理。

  2. 挑战与解决问题的能力: AttackLab实验为我提供了一个真实世界的挑战,需要我动用在CSAPP课程中学到的知识,尤其是在解密Level 2时。这锻炼了我的问题解决能力和逆向工程技能,使我能够更灵活地思考和应对不同的计算机系统问题。

  3. 安全意识的提升: 通过攻击和实战,我深刻认识到计算机系统的脆弱性和安全性的重要性。AttackLab实验让我不仅仅停留在理论层面,更能够将安全意识应用到实际中,为未来的计算机系统设计和维护提供了有力的支持。这种实践性的体验是我学习过程中的一大亮点。


📝 总结 

在计算机系统的广袤领域,仿佛是一片未被揭示的复杂网络,隐藏着深奥的密码,而CSAPP的AttackLab实验正是那一场引人入胜的冒险之旅。这实验不仅深入挖掘计算机系统的基本概念,更将目光投向底层的系统实现,逐步揭开计算机系统内核、汇编语言和数据结构这些层次的神秘面纱。

对于那些渴望挑战计算机系统安全学习路径,以及希望掌握底层系统编程技术的冒险者们,AttackLab提供了一个独特的机会。点击下方链接,你将能够深入研究计算机科学的奇迹,探讨安全编程技术的实际应用和创新。我们引领趋势的🌱计算机科学专栏《斯坦福大学之CSAPP》将为你展开一场精彩的学术冒险,带你穿越计算机系统的迷雾,解锁其中的奥秘。🌐🔍

​​​​​​​

这篇关于【CSAPP】探秘AttackLab奥秘:level 2的解密与实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/787794

相关文章

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习