关于缓冲区溢出攻击(stack smashing attack)的学习笔记(一)

  最近写网络安全作业,研究了一下缓冲区溢出攻击的原理,实现过程。原理网上很多,这里就不在赘述了。

我的实验环境是虚拟机ubuntu 18.04.1 LTS,首先来看一段代码。

//bufoverflow.c
#include<stdio.h>

int main(int argc,char **argv){
        char buf[10];
        strcpy(buf,argv[1]);
        printf("buf is 0x%8x\n",&buf);
        return 0;
}

  这里从命令行输入参数,传到长度为10Bytes的缓冲区里,显然如果我们传入的数据大于10,这里的缓冲区就溢出了。来测试一下,由于现在GCC自己带有缓冲区溢出攻击的检测功能,这里使用-fno-stack-protector先把这个功能关闭掉。终端输入

pan@ubuntu:~/Documents/myClab$ gcc bufoverflow.c -fno-stack-protector -o bufoverflow.out

  对bufoverflow.c进行编译,来运行一下生成的.out文件

pan@ubuntu:~/Documents/myClab$ ./bufoverflow.out `perl -e 'print"A"x10'`

这里用到了perl语言来打印10个大写的A, 那如果我们要打印10个A,后面再跟四个B,怎么写呢?那如果我们打印完又想换行又该如何写呢?

pan@ubuntu:~/Documents/myClab$ perl -e 'print "A"x10,"B"x4'
AAAAAAAAAABBBBpan@ubuntu:~/Documents/myClab$ perl -e 'print "A"x10;print "B"x4 ;print "\n"'
AAAAAAAAAABBBB
pan@ubuntu:~/Documents/myClab$ 

当然,要实现上面功能的写法多种多样,读者可以深入研究perl语言。

回到主题,我们运行生成的.out文件,得到如下所示:

pan@ubuntu:~/Documents/myClab$ ./bufoverflow.out `perl -e 'print"A"x10'`
buf is 0x4eda6f9e

说明了缓冲区的地址是0x4eda6f9e,但是别着急,尝试再运行一次会得到什么呢?

pan@ubuntu:~/Documents/myClab$ ./bufoverflow.out `perl -e 'print"A"x10'`
buf is 0x2f190b2e
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值