缓冲区溢出——堆溢出

上次讲的是栈溢出,其实不止是栈,在使用堆时也会溢出。
例如:
#include <stdio.h>
#inlcude <string.h>
int main(){
    char *name;
    char *color;
    color=malloc(10);//使用内存分配函数在堆中
    name=malloc(10);//分配内存
    strcpy(name,"leisure");
    printf("please input your favorite color/n");
    gets(color);//著名的缓冲区溢出函数
    printf("your name is %s/n",name);
    printf("your favorite color is %s/n,color);
return o;
}
这里的实例程序中使用了malloc函数来为变量分配内存,后面又调用了典型的缓冲区溢出函数gets来获得输入,当我们输入的字符大于分配的缓冲区时,就会溢出掉,而去把name值给覆盖了。虽然我们分配的是10字节,但是其实分配的是16字节,所以当我们输入blueblueblueblueroot后,输出将显示name是root!而color就是blueblueblueblueroot!
    可以看出,堆的缓冲区溢出比栈缓冲区溢出简单得多,也更好理解。下面是有用的工具,为了使攻击程序开发者和用户(脚本小子)之间有一定的交互性,H.D Moore和Spoonm发布了Metasploit,这是一个漏洞攻击程序架构,使用Ruby和部分C语言编写,可以运行windows和Linux下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值