CSAPP Lab3: 缓冲区溢出攻击

本文详细介绍了CSAPP实验第三部分关于缓冲区溢出攻击的内容。通过理解函数调用时的栈帧结构,利用输入缓冲区溢出,控制程序流程,执行预期操作。实验涉及Level0-Somke、Level1-Fizz、Level2-Bang和Level3-Test四个阶段,每个阶段都详细阐述了攻击目标、思路和具体操作,包括构造攻击字符串、篡改返回地址、注入代码等技术。同时,文章提到了Linux的栈保护机制及其规避方法。
摘要由CSDN通过智能技术生成

逆向工程【缓冲区溢出攻击】

任务描述

掌握函数调用时的栈帧结构,利用输入缓冲区的溢出漏洞,将攻击代码嵌入当前程序的栈帧中,使程序执行我们所期望的过程。

主要方法

溢出的字符将覆盖栈帧上的数据,会覆盖程序调用的返回地址,这赋予了我们控制程序流程的能力。通过构造溢出字符串,程序将“返回”至我们想要的代码上。
在这里插入图片描述
实验包括三个可执行文件:
—| bufbomb为目标程序
—| makecookie可以生成bufbomb需要的输入参数的cookie(也可以在gdb调试时直接读取寄存器获得)
—| sendstring可以将ASCII码转成字符(实验用到了拓展ASCII码)

程序运行时栈帧结构

在这里插入图片描述

Level0:Somke

getbuf函数在test中被调用,当getbuf返回时继续执行第八行:

void test() 
{
    
	int val; 
	volatile int local = 0xdeadbeef; 
	entry_check(3); /* Make sure entered this function properly */ 
	val = getbuf(); 
	/* Check for corrupted stack */ 
	if (local != 0xdeadbeef) {
    
		printf("Sabotaged!: the stack has been corrupted\n"); 
	} 
	else if (val == cookie) {
    
		......
	}
}

Bufbomb中一个正常情况下不会被执行的函数:

void smoke() 
{
    
	entry_check(0); /* Make sure entered this function properly */ 
	printf("Smoke!: You called smoke()\n"); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值