什么是溢出攻击

#说明:

一般情况下,在程序中使用了缓冲区,但又没有做安全的判断时
就可能会被覆盖缓冲区的方式来进行溢出攻击,比如最常用的就是返回值覆盖
返回值一旦被覆盖,代码接下来的运行轨迹就会被更改到恶意代码块了。

#栈缓冲区溢出攻击演示:

ESP
-4   字符串A < 缓冲区= 4 bytes >
+0   返回值
+4   1
+8   0

因为此时开发者只需要字符串A的大小为4

char str[4] ; 
strcpy(str,arg_str);

这种时候攻击者就会精心的构造一个新的字符串传入(arg_str)
长度为8,后4位则为一个代码块入口地址
目的就是覆盖掉ESP+0处的返回值,让函数返回时能够跳转到一个新的地址中去执行

#解决方案:

严格的控制变量的长度,比如上面的例子完全可以使用strcpyn来给定长度。
返回值覆盖只是攻击方式的一种,从设计源头保持严谨的代码才能不给攻击者可乘之机。

转载于:https://my.oschina.net/tasker/blog/814067

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值