CSAPP缓冲区溢出攻击实验(上)

CSAPP缓冲区溢出攻击实验(上)

下载实验工具,最新的讲义在。网上能找到的实验材料有些旧了,有的地方跟最新的handout对不上。不过没有关系,大体上只是程序名(sendstring)或者参数名(bufbomb -t)的差异,不影响我们的实验。

1.实验工具

1.1 makecookie

后面实验中,五次“攻击”中有四次都是使你的cookie出现在它原本不存在的位置,所以我们首先要为自己产生一个cookie。实验工具中的makecookie就是生成cookie用的,参数是你的名字:

[root@vm bufbomb]$ file makecookie 
makecookie: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), \for GNU/Linux 2.6.9, not stripped
[root@vm bufbomb]$ chmod +x makecookie

[root@vm bufbomb]$ ./makecookie cdai
0x5e5ee04e

1.2 bufbomb

bufbomb就是我们要“攻击”的程序,我下载的实验工具的这个版本在执行时必须有-t这个参数,表示本人的名字:

[root@vm bufbomb]$ ./bufbomb 
You must include a team name with -t
Usage: ./bufbomb -t team [-n] [-s] [-h]
        -t team:   Specify team name
        -n :       Nitro mode
        -s :       Submit solution via email
        -h :       Print help information

[root@vm bufbomb]$ ./bufbomb -t cdai
Team: cdai
Cookie: 0x5e5ee04e
Type string:I love 15-213
Dud: getbuf returned 0x1
Better luck next time

[root@vm bufbomb]$ ./bufbomb -t cdai
Team: cdai
Cookie: 0x5e5ee04e
Type string:It is easier to love this class when you are a TA
Ouch!: You caused a segmentation fault!
Better luck next time

1.3 sendstring

sendstring小工具(新版叫做hex2raw)能读入我们的制作的string(十六进制),将其发送到bufbomb的标准输入流,避免每次都要在终端上手动输入。cat管道或者直接重定向两种方式都行:

[root@vm bufbomb]$ cat exploit.raw | ./sendstring | ./bufbomb -t cdai

[root@vm bufbomb]$ ./sendstring < cat exploit.raw | ./bufbomb -t cdai

2.热身准备

2.1 “漏洞”代码

下面这一段看似“无辜”的小函数就是产生安全漏洞的源头了,而最根源的root cause就是Gets()函数没有考虑buf缓冲区的大小,直接将用户输入的所有字符都保存进去。如果用户输入过多的字符,就会导致栈上某些数据被覆盖,从而造成了缓冲区溢出的危险:

int getbuf()
{
    char buf[12];
    Gets(buf);
    return 1;
}

2.2 缓冲区栈分析

在开始真正“攻击”之前,我们先要分析一下bufbomb调用getbuf()时的栈是什么样子的。只有全面的了解了栈结构,后面实验时我们才能随心所欲地“攻击”它。首先,通过objdump反汇编getbuf()函数:

[root@vm bufbomb]$ objdump -S -d -z bufbomb | grep -A15 "<getbuf>:"
08048ad0 <getbuf>:
 8048ad0:       55                      push   %ebp
 8048ad1:       89 e5                   mov    %esp,%ebp
 8048ad3:       
  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值