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

本文介绍了在Ubuntu环境下进行缓冲区溢出攻击的学习过程,探讨了ASLR技术,以及如何关闭它。通过实验,解释了如何利用缓冲区溢出执行目标函数,并指出了一些未解的问题,如地址存放位置和溢出数量的差异。实验中使用了C语言、汇编语言和perl,并提到了GDB调试。

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

我的实验环境是虚拟机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

我们看到,两次运行,得到的buf地址是不一样的,这是因为ubuntu的ASLR(地址空间布局随机化)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值