黑客入门——Internet蠕虫(缓冲区溢出攻击)

Internet蠕虫是世界上第一个缓冲区溢出攻击,曾造成全球多台网络服务器瘫痪。
利用缓冲区溢出执行非授权指令,甚至取得系统特权,进而进行各种非法操作。
缓冲区溢出通常是因gets()、scanf()、strcpy()等函数未对数组越界加以监视和限制,导致有用的堆栈数据被覆盖而引起的。
下面我们看一个例子:
#include<stdio.h>
#include<string.h>
#define N 10
int main()
{
char str[N];
gets(str); //没有限制用户输入字符串的长度
puts(str);
return 0;
}
这个程序看似简单,却存在着缓存区溢出的隐患。原因出在函数gets()上,当用户输入的字符串长度超过N时就会发生缓冲区溢出。
解决的办法是:将gets(str);修改为fgets(str, N*sizeof(char), stdin);
缓冲区攻击都是从缓冲区溢出开始的,一方面利用了操作系统中函数调用和局部变量存储的基本原理,另一方面利用应用程序中的内存操作漏洞,使用特定的参数造成应用程序内存异常,并改变操作系统的指令执行序列,让系统执行攻击者预先设定的代码,进而完成权限获取、非法入侵等攻击任务
可以避免的方法:
在使用strncpy()、strncat()等"n族"字符处理函数时,通过增加一个参数来限制字符串处理的最大长度,可防止发生缓冲区溢出
在使用从函数外部传入的参数之前对其进行检查,小心地防止指针越界,防止代码访问不该访问的内存,那么抵抗缓冲区溢出攻击也并非难事

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值