网站地图    收藏   

主页 > 后端 > 网站安全 >

微信某示例代码函数使用不当可能会导致第三方

来源:自学PHP网    时间:2015-04-16 23:15 作者: 阅读:

[导读] 起了一个坏头,潜在影响包括最新版discuzx3 2等详细说明:从官方下了最新的微信开放平台接入示例文件(php)http: mp weixin qq com mpres htmledition res wx_sample zipwx_sample php行27$postStr = $GLOBA...

起了一个坏头,潜在影响包括最新版discuzx3.2等

从官方下了最新的微信开放平台接入示例文件(php)


http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.zip



wx_sample.php行27
 

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
 //extract post data
if (!empty($postStr)){            
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content)



使用了simplexml_load_string函数来解析post过来的xml 这个函数存在xxe威胁

再来看看权限检查的过程

http://mp.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97
 

private function checkSignature(){
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"]; 
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}




 

$tmpArr = array($token, $timestamp, $nonce);



如果TOKEN未初始化 因为$timestamp和$nonce又来自用户提交 所以可以构造出合法的signature绕过函数的检查。
 



另外最新版discuzx3.2也是 默认安装就带有微信插件,但是未启用。换而言之 未初始化TOKEN。

/source/plugin/wechat/wechat.lib.class.php行153
 

$postdata = file_get_contents("php://input");
if ($postdata) {
if (!$this->_checkSignature()) {
return;
}
$postObj = simplexml_load_string($postdata, 'SimpleXMLElement', LIBXML_NOCDATA);
$postObj = $this->_handlePostObj($postObj);
        $this->_activeHook('receiveAllStart', $postObj);



这里先调用了_checkSignature()检查权限,在未初始化状态下,可以用上面说的提交timestamp、nonce和对应的signature绕过检查进入下面的simplexml_load_string

不过很可惜未启用插件的话$hook也一样没初始化 所以_activeHook将找不到对应的class去操作。这里没法形成安全漏洞。不过如果有后台权限可以配置插件的话就另说了。

反正DZ跟你们是一家 就在这说了一样。

修复方案:

慎用simplexml_load_string

检查权限之前判断是否初始化了token



示例代码要用心啊。。人家都是很放心的用你的代码的。

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论