LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: pgtm_love

婷婷:缓冲区溢出源代码

[复制链接]
发表于 2003-5-12 00:54:16 | 显示全部楼层
The first program, it declared a global char array "shell[]" and then
in the main() function, declared a local char array "shell[1024+300]" which hides the global shell[], what is that for?
 楼主| 发表于 2003-5-12 12:46:52 | 显示全部楼层

哇,来英文的

shell[] 是存放被攻击程序的缓冲区中被攻击者植入的代码的数组空间,
比如buffer中:
盏底  盏中间  盏顶
NOP   BUF     shell[]

Next time plese use Chinese, Because we are Chinese!!
(婷婷愿意结识各位有实力的大虾,请多多指教)
发表于 2003-5-12 18:42:36 | 显示全部楼层
如果我猜得不错的话,viper兄应该是在国外吧,喜欢用英语回答问题的人,大多数是在国外的。从你上网的时间来看,很有可能是在美国或者加拿大。
发表于 2003-5-12 23:38:42 | 显示全部楼层
上次找不到中文输入法,临时用英文凑数,抱歉了!

我是感觉有点奇怪,那个全局变量 shell[] 在 main() 里面不是给局部变量 shell[] 给遮盖起来了么?

这个程序真的会工作吗?我编译了一下,运行的结果是下面这样子的。
在这输出内容里面找不到那段利用缓冲区溢出来调用/bin/sh的代码。

  1. $ ./bf1 100 | od -t x1z
  2. 0000000 50 4f 53 54 20 2f 20 48 54 54 50 2f 31 2e 30 0d  >POST / HTTP/1.0.<
  3. 0000020 0a 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a  >.Content-Length:<
  4. 0000040 20 31 30 32 35 2c 20 55 73 65 72 2d 61 67 65 6e  > 1025, User-agen<
  5. 0000060 74 3a 20 0d 0a 90 90 90 90 90 90 90 90 90 90 90  >t: .............<
  6. 0000100 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90  >................<
  7. *
  8. 0000460 90 90 90 90 90 ef bf ef bf ef bf ef bf ef bf ef  >................<
  9. 0000500 bf ef bf ef bf ef bf ef bf ef bf ef bf ef bf ef  >................<
  10. *
  11. 0002060 bf ef bf d6 4c 90 0d 0a                          >....L...<
  12. 0002070
复制代码


还有这一段,既然 esp + (long) offset 是 long 类型的,怎么写到了 *((int*)&buf) 里面去,然后每次还要做 i+=2。这样的结果是输出里面有一大串的 ef bf 了。

  1. for (i = 256; i < BUFLEN - 3; i += 2)
  2. {
  3.     *((int *) &buf[i]) = esp + (long) offset;
  4.     shell[ sizeof(shell)-1 ] = 0;
  5. }
复制代码
发表于 2003-5-13 02:23:10 | 显示全部楼层
kj501 贴的那一大段比较好,让我认真读读。

其实我不是喜欢用英文的,实在是不好意思没有安装输入法。
发表于 2003-5-13 07:39:51 | 显示全部楼层
那段文章是我从linuxforum上找来的,只是不懂汇编,无法问津了。
 楼主| 发表于 2003-5-13 11:52:12 | 显示全部楼层

请教

你编译这代码后,有去攻击别的机子吗?就是跟别的机子建立通信了吗,还有,你这手数据是在你自己的机子还是被攻击的机子收集到的?用什么入侵检测工具?还是直接从LINUX的系统日志显示?
发表于 2003-5-13 18:31:04 | 显示全部楼层
:p 那个叫viper的老弟,可千万不要在装啦,人家kj501老兄都吧你认为是在国外啦,你要是在装大家都回以为你是洋鬼子了,拜托!!!!
 楼主| 发表于 2003-5-13 20:56:48 | 显示全部楼层

你别管了

你管人家是不是在国外,他只要有水平,我们能跟人家探讨问题共同进步就行了嘛?人家也没说他是在外国,只是喜欢半夜上网而已。你专心搞你的数据吧,还有,论文快点写,没时间了,哼!事管得不少,还爱罗嗦:mad:
发表于 2003-5-13 22:43:22 | 显示全部楼层
我编译了以后,就直接运行了一下。看这个程序的代码,它只是向标准输出写一些数据,然后运行 nc 把他输出的数据送到被攻击的运行 linuxconf 的机器上。这样,我把他输出的数据用 od 检查一下,发现里面没有供给所用的代码。

按我理解,缓冲区溢出的道理就是我们向一个存在这种漏洞的程序(远程的服务器也好,本地的其他程序也好)输入一些数据,数据的长度比那些存在漏洞的程序内部在堆栈中分配的buffer长度大。当有漏洞的程序不管三七二十一把这些数据全都copy到他在自己堆栈中分配的buffer里面的时候,就把堆栈搞坏了。通过精心设计我们输入给那个程序的数据(计算好地址,在内嵌一些代码),就导致有漏洞的程序转而执行我们给她的代码,从而让我们得到我们本来在那台机器上没有的控制权。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表