1 / 9
文档名称:

缓冲区溢出.ppt

格式:ppt   大小:576KB   页数:9页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

缓冲区溢出.ppt

上传人:liangwei2005 2021/10/12 文件大小:576 KB

下载得到文件列表

缓冲区溢出.ppt

相关文档

文档介绍

文档介绍:缓冲区溢出攻击
缓冲区溢出技术原理
缓冲区溢出分类
---基于栈的缓冲区溢出
---格式串溢出
---基于堆的缓冲区溢出
防范缓冲区溢出
1
缓冲区溢出攻击
缓冲区溢出技术原理

通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的 。
2
缓冲区溢出分类
内存的概念
内存高址
Stack(栈)
Heap(堆)
Bss(非初始化文本区域)
初始化文本区域
Text(文本区)
内存低址
3
缓冲区溢出分类
基于栈的缓冲区溢出
桟是程序的临时变量的存储区域。一个简单的桟溢出的例子:
int main(int argc, char **argv)
{
char buffer[16]; // 存储在Stack
strcpy(buffer,argv[1]); //strcpy拷贝没有检测argv[1]参数的长度
//导致溢出
}
4
缓冲区溢出分类
基于栈的缓冲区溢出
程序执行流程:
压入当前的指令(寄存器(IP)作为函数返回的地址(ret)
压入当前的桟帧ebp寄存器
给局部变量分配空间(sub $0x10,%esp)
[局部变量 16 字节][ebp 4字节][ret 4字节]
|----填充大于16字节的数据导致溢出-----|
5
缓冲区溢出分类
格式化字符串溢出攻击
格式化字符串:就是在*printf()系列函数中按照一定的格式对数据进行输出,可以输出到标准输出,即printf(),也可以输出到文件句柄,字符串等。
黑客可以利用的几个条件:
(1)参数个数不固定造成访问越界数据
(2)利用%n/%hn格式符写入跳转地址
(3)利用附加格式符控制跳转地址的值
6
缓冲区溢出分类
格式化字符串溢出攻击
一个简单的例子:
int main()
{
long retloc = 0;
long shell_addr = 0xffbeffac, reth, retl;
char buf[256], buf1[256];
reth = (shell_addr >> 16) & 0xffff ;
retl = (shell_addr >> 0) & 0xffff ;
sprintf(buf, "%%.%uu%%hn%%%uc%%hn", reth , retl - reth + 0x10000);
printf("Before overwrite: retloc = 0x%.8x\n", retloc);
printf(b