免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: converse
打印 上一主题 下一主题

【好玩】缓冲区溢出攻击实验 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2004-11-09 11:00 |只看该作者

【好玩】缓冲区溢出攻击实验

原帖由 "aero" 发表:


不是吧。上面win_hate已经说的很明白了,是因为后面的'\0'会破坏test压入的ebp,以致于无法在返回main函数的时候,进入正确的“轨道”。


抱歉,刚才没仔细看,呵呵
这个出题目的一定是老美,
deadbeef在Solaris的调试器里面有特殊含义,抱歉

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
32 [报告]
发表于 2004-11-09 11:08 |只看该作者

【好玩】缓冲区溢出攻击实验

原帖由 "Solaris12" 发表:


抱歉,刚才没仔细看,呵呵
这个出题目的一定是老美,
deadbeef在Solaris的调试器里面有特殊含义,抱歉


哦,虾米特殊含义啊?说来听听。   

论坛徽章:
0
33 [报告]
发表于 2004-11-09 11:30 |只看该作者

【好玩】缓冲区溢出攻击实验

原帖由 "aero" 发表:


哦,虾米特殊含义啊?说来听听。   

其实deadbeef不止在Solaris下,恐怕在UNIX/LINUX文化里,都有
特殊含义:

DEADBEEF /ded-beef/ n.
(From the Jargon file)
The hexadecimal word-fill pattern for freshly allocated memory under a number of IBM environments, including the RS/6000. Some modern debugging tools deliberately fill freed memory with this value as a way of converting heisenbugs into Bohr bugs. As in "Your program is DEADBEEF" (meaning gone, aborted, flushed from memory); if you start from an odd half-word boundary, of course, you have BEEFDEAD. See also the anecdote under fool and dead beef attack.

deadbeef就是指引用已经free的内存

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
34 [报告]
发表于 2004-11-09 12:32 |只看该作者

【好玩】缓冲区溢出攻击实验

^_^,原来还有典故的说。

论坛徽章:
0
35 [报告]
发表于 2004-11-09 15:16 |只看该作者

【好玩】缓冲区溢出攻击实验

哇,一个比一个强

论坛徽章:
0
36 [报告]
发表于 2004-11-10 10:58 |只看该作者

【好玩】缓冲区溢出攻击实验

我想你们应用C++写一个了呀呵呵  

论坛徽章:
0
37 [报告]
发表于 2004-12-23 14:23 |只看该作者

【好玩】缓冲区溢出攻击实验

我有一点不明白,你们如何算出缓冲区的大小 ? 是否是在getbuf中 ebp-esp 的值。

  1. (gdb) disas getbuf
  2. Dump of assembler code for function getbuf:
  3. 0x080484b0 <getbuf+0>;:  push   %ebp
  4. 0x080484b1 <getbuf+1>;:  mov    %esp,%ebp
  5. 0x080484b3 <getbuf+3>;:  lea    0xffffffe8(%ebp),%eax
  6. 0x080484b6 <getbuf+6>;:  sub    $0x28,%esp
  7. 0x080484b9 <getbuf+9>;:  mov    %eax,(%esp)
  8. 0x080484bc <getbuf+12>;: call   0x8048420 <getxs>;
  9. 0x080484c1 <getbuf+17>;: mov    %ebp,%esp
  10. 0x080484c3 <getbuf+19>;: mov    $0x1,%eax
  11. 0x080484c8 <getbuf+24>;: pop    %ebp
  12. 0x080484c9 <getbuf+25>;: ret
  13. 0x080484ca <getbuf+26>;: lea    0x0(%esi),%esi
  14. End of assembler dump.
  15. (gdb) b *0x080484bc
  16. Breakpoint 2 at 0x80484bc
  17. (gdb) run
  18. The program being debugged has been started already.
  19. Start it from the beginning? (y or n) y

  20. Starting program: /home/pigjj/prog/c/atack/a.out

  21. Breakpoint 2, 0x080484bc in getbuf ()
  22. (gdb) i reg
  23. eax            0xbfffefd0       -1073745968
  24. ecx            0x40148080       1075085440
  25. edx            0x10     16
  26. ebx            0x4014e620       1075111456
  27. [color=red]esp            0xbfffefc0       0xbfffefc0
  28. ebp            0xbfffefe8       0xbfffefe8[/color]
  29. esi            0x400164a0       1073833120
  30. edi            0xbffffa04       -1073743356
  31. eip            0x80484bc        0x80484bc
  32. eflags         0x286    646
  33. cs             0x23     35
  34. ss             0x2b     43
  35. ds             0x2b     43
  36. es             0x2b     43
  37. fs             0x0      0
  38. gs             0x0      0

复制代码


从上面可以看出 函数getbuf的栈帧大小是 0x28 ,就是40个字节。可是我的程序输入23 个字节就 segmentation fail  

  1. (gdb) run
  2. Starting program: /home/pigjj/prog/c/atack/a.out
  3. Type Hex string:01 02 03 04 05 06 07 08 09 10 11 12 13 14 05 16 17 18 19 2021 22 23
  4. getbuf returned 0x1

  5. Program exited normally.
  6. (gdb) run
  7. Starting program: /home/pigjj/prog/c/atack/a.out
  8. Type Hex string:01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 2021 22 23 24
  9. getbuf returned 0x1

  10. Program received signal SIGSEGV, Segmentation fault.
  11. 0x00000400 in ?? ()
  12. (gdb)
复制代码


我想问下各位大哥,你们是怎样确定缓冲区大小的,谢谢 :)[/code]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
38 [报告]
发表于 2004-12-23 14:28 |只看该作者

【好玩】缓冲区溢出攻击实验

^_^,你要先明白啥是缓冲区的概念,然后知道为什么会溢出,然后分析明白栈帧的哪里到哪里是表示什么的。

呵呵,看看偶blog上对这个问题的详细分析。应该对你有帮助。

论坛徽章:
0
39 [报告]
发表于 2004-12-24 11:04 |只看该作者

【好玩】缓冲区溢出攻击实验

不好意思我太糊涂了,犯了错误。
我明白缓冲区溢出是我们输入的字节超出了gcc分配给buf的大小,可是问题的关键是我们如何确定gcc分配给buf的空间,

调用getxs 前getbuf 的栈帧
-----------------
|                |   <-------保存的ebp 4个字节
------------------
|               |
|               |
|               |
|               | buf在这段空间的哪一部分,如何确定大小
|               |
|               |
|               |
|               |
-----------
|               | 返回地址4个字节。
-----------

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
40 [报告]
发表于 2004-12-24 11:08 |只看该作者

【好玩】缓冲区溢出攻击实验

看源码啊,然后结合编译器的对齐规则。^_^,其实,各种不同的编译优化选项也可以使它不同呢,甚至可以不使用ebp呢。

看源码,然后编译,然后调试,然后确定,然后实验,然后去试目标。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP