第一个缓冲区溢出的全过程实践

首发于:http://www.giantbranch.cn/?p=449


前言

这是8月处写的,缓冲区溢出大家估计听了不少了,但是实践过就更好了


为什么会出现缓存区溢出呢?(这里主要针对栈)

简单来说,首先局部变量,返回地址都是储存在栈上的,当我们的输入很长的一串字符,而且程序不检查长度就直接copy到局部变量上,那么局部变量就可以覆盖返回地址,控制漏洞函数的返回地址,从而控制程序的执行(具体实践实例)。


实例实践与分析

首先编译下面的代码,编译用debug版吧

#include <stdio.h>
#include <windows.h>
int overflow_here(char *key){
char buffer[66];
strcpy(buffer, key);
return 0;
}
int main(){
char  key[666];
FILE *fp;
LoadLibrary("user32.dll");
if (!(fp = fopen("key.txt", "rw+"))){
exit(0);
}
fscanf(fp, "%s", key);
overflow_here(key);
printf("come on, overflow me!");
return 0;
}

可以看到漏洞函数overflow_here,直接将我们输入的key copy到buffer那,又没有对长度进行检查


解析一下代码

1.LoadLibrary("user32.dll");  这动态链接库是为我们等一下运行弹框提供支持


2.还有为什么要从文件读取呢,因为我们覆盖返回地址的话,基本都要输入一些不可见字符,在文件中可以用十六进制编辑器区输入

当然还可以用py

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值