### 简要描述: (最后更新于2014-7-28) 附件: 安全补丁.rar (218 K) 下载次数:15582 看到更新补丁了 再来看看。 绕过这补丁 当然 绕过了这补丁的话 也是通杀qibo多个系统。 ### 详细说明: 之前发的 [WooYun: qibocms V7 整站系统最新版SQL注入一枚 & 另外一处能引入转义符的地方。](http://www.wooyun.org/bugs/wooyun-2014-069746) ———————————————————————————————— [<img src="https://images.seebug.org/upload/201407/282219050d00960706463359cecc17e22d157c04.jpg" alt="1.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/282219050d00960706463359cecc17e22d157c04.jpg) 下载了个补丁下来看看 看了看member目录 竟然没有看到上次我发的那个post.php 我以为没做修复了呢 后来看了看全局文件 inc/common.inc.php中 ``` $_POST=Add_S($_POST); $_GET=Add_S($_GET); $_COOKIE=Add_S($_COOKIE); ``` 依旧是全局的过滤函数 ``` function Add_S($array){ foreach($array as $key=>$value){ if(!is_array($value)){ $key=str_replace(array("'",'"','\\','&'),'',$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{...
### 简要描述: (最后更新于2014-7-28) 附件: 安全补丁.rar (218 K) 下载次数:15582 看到更新补丁了 再来看看。 绕过这补丁 当然 绕过了这补丁的话 也是通杀qibo多个系统。 ### 详细说明: 之前发的 [WooYun: qibocms V7 整站系统最新版SQL注入一枚 & 另外一处能引入转义符的地方。](http://www.wooyun.org/bugs/wooyun-2014-069746) ———————————————————————————————— [<img src="https://images.seebug.org/upload/201407/282219050d00960706463359cecc17e22d157c04.jpg" alt="1.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/282219050d00960706463359cecc17e22d157c04.jpg) 下载了个补丁下来看看 看了看member目录 竟然没有看到上次我发的那个post.php 我以为没做修复了呢 后来看了看全局文件 inc/common.inc.php中 ``` $_POST=Add_S($_POST); $_GET=Add_S($_GET); $_COOKIE=Add_S($_COOKIE); ``` 依旧是全局的过滤函数 ``` function Add_S($array){ foreach($array as $key=>$value){ if(!is_array($value)){ $key=str_replace(array("'",'"','\\','&'),'',$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; } ``` 在这里 可以看到修改了这个过滤函数。 添加了一句 $key=str_replace(array("'",'"','\\','&'),'',$key); 把数组中的key 如果含有' 或者 " 或者 \ 清空成空。 那这样数组里面的key就不能像之前一样含有特殊符号了 看起来好像是没有问题了。 但是这里我们来测试一下。 这里我们调用一下qibocms这函数来测试一下 ``` <?php $_GET=Add_S($_GET); var_dump ($_GET); function Add_S($array){ foreach($array as $key=>$value){ if(!is_array($value)){ $key=str_replace(array("'",'"','\\','&'),'',$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; } ``` [<img src="https://images.seebug.org/upload/201407/282238568b50d151dba154b1aeb2fbc90378d52a.jpg" alt="2.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/282238568b50d151dba154b1aeb2fbc90378d52a.jpg) 这里 我们再在key中加一个单引号 看看会是什么情况。 [<img src="https://images.seebug.org/upload/201407/282240116899d2a1400698d3951d98cbe3554ecc.jpg" alt="3.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/282240116899d2a1400698d3951d98cbe3554ecc.jpg) array(2) { ["a'"]=> string(3) "asd" ["a"]=> string(3) "asd" } 可以看到 其中一个元素有了单引号。 其中一个元素没有单引号。 为什么会有两个元素了。 其实这点我根本没搞懂啊 - - 问了问P神 大概是因为 第一次循环因为单引号被清空了 所以有了一个a元素 然后就创建了一个a元素,导致数组变成了两个元素. 然后这两个元素都在这里面了。。 一个有单引号 一个无单引号。 也就是a'和a两个元素 - - 这里我还是不太懂。 但是就是这样 array(2) { ["a'"]=> string(3) "asd" ["a"]=> string(3) "asd" } key中还是能引入单引号。 所以导致了这补丁被绕过。 __ 绕过了这个 又能通杀多个系统了。 这里我就以整站系统做个演示。 继续在member/post.php ``` elseif($job=='manage') { if(!$atc_power)showerr("你没权限"); if($rsdb[pages]<2){ header("location:post.php?job=edit&aid=$aid&mid=$mid&only=$only");exit; } $erp=get_id_table($aid); if($step==2){ asort($orderDB); $i=0; foreach( $orderDB AS $key=>$value){ $i++; $db->query("UPDATE {$pre}reply$erp SET orderid=$i WHERE aid='$aid' AND rid='$key'"); } refreshto("$FROMURL","排序成功",1); ``` 注册一个会员 然后发布文章 因为这个 ``` if($rsdb[pages]<2){ header("location:post.php?job=edit&aid=$aid&mid=$mid&only=$only");exit; } ``` 所以需要发两页。 [<img src="https://images.seebug.org/upload/201407/28230234b173626c9e4666df5fb5e91bbbde4e8e.jpg" alt="4.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/28230234b173626c9e4666df5fb5e91bbbde4e8e.jpg) 这里我输出一下这变量 可以看到第一个没单引号 第二个有单引号 但是foreach 是循环执行的 所以第二个也能执行到。 ### 漏洞证明: [<img src="https://images.seebug.org/upload/201407/28230555745e7b5ecbf65a5f46821c5d87f1dab8.jpg" alt="5.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/28230555745e7b5ecbf65a5f46821c5d87f1dab8.jpg) 成功注入。