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

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

缺陷编号:wooyun-2015-095097

漏洞标题:Mao10CMS任意文件读取+注入--需条件

相关厂商:mao10.com

漏洞作者: Forever80s

提交时间:2015-04-13 16:12

修复时间:2015-07-12 16:28

公开时间:2015-07-12 16:28

漏洞类型:SQL注射漏洞

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-04-13: 细节已通知厂商并且等待厂商处理中
2015-04-13: 厂商已经确认,细节仅向厂商公开
2015-04-16: 细节向第三方安全合作伙伴开放
2015-06-07: 细节向核心白帽子及相关领域专家公开
2015-06-17: 细节向普通白帽子公开
2015-06-27: 细节向实习白帽子公开
2015-07-12: 细节向公众公开

简要描述:

详细说明:

漏洞证明:

在安装完默认情况下weixin_token是空的,此时也可以利用微信接口文件漏洞
Application/Control/Controller/WeixinController.class.php

public function callback_url(){
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$echostr = $_GET["echostr"];
$token = mc_option('weixin_token');//null
$tmpArr = array($token, $timestamp, $nonce);
// use SORT_STRING rule
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){
echo $echostr;
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr)){
//这里xxe
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$msgtype = $postObj->MsgType;
$content = trim($postObj->Content);
$date = strtotime("now");
if($content!='')
{
//xml元素content未过滤带入sql语句,造成注入
$return_to = M('option')->where('type="wx_huifu" AND
meta_key="'.$content.'"')->getField('meta_value');
if($return_to!='') :
$return_to_user = $return_to;
else :
$return_to_user = '我没有理解您的问题,请访问我们的网站:'.mc_site_url();
endif;
echo "<xml>
<ToUserName>$fromUsername</ToUserName>
<FromUserName>$toUsername</FromUserName>
<CreateTime>$date</CreateTime>
<MsgType>text</MsgType>
<Content>$return_to_user</Content>
</xml>";
}
}
} else {
$this->error('Callback页面不允许直接访问!',U('home/index/index'));
};
}


我们可以根据算法
$tmpArr = array($token, $timestamp, $nonce);
// use SORT_STRING rule
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
计算出$signature使 $tmpStr == $signature,从而利用两个漏洞。
POC:

2Capture.PNG


外部实体可以读取文件
content中有单引号,成功引入sql语句

1Capture.PNG

修复方案:

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2015-04-13 16:27

厂商回复:

感谢反馈

最新状态:

暂无