|
![]() | 作者: cck123 [cck123]
![]() |
登录 |
本文作者: angel 文章出处: 安全天使 发布日期: 2003-11-04 前言 phparticle恐怕是最好最爽的PHP文章管理系统了,但毕竟是商业程序。虽然我有这套程序。但我没有用。还是尊重作者吧。没有钱就老老实实用Myarticle了,Myarticle是免费用户的首选。后台管理功能强大,前台简洁清爽,速度快。作为一个专业的站点最适合不过了。个人认为比夜猫的好。所以我一直用。作为一个安全站点。使用的程序有漏洞是可悲的,被该漏洞黑了是可怜的。再完美的程序也有出状况的时候。估计Myarticle也是。就从我做起,分析一下源代码,结果发现两个漏洞。 漏洞一 涉及版本: Myarticle 0.02以下 描述: 由于后台管理入口验证代码存在严重缺陷。导致任何用户可以只在用户名里输入任何字符可以进入后台。 详细: 在admin/admin_global.inc.php文件里的151行的代码是这样写的: function verifyUser($name, $pwd) { global $DB_site,$table_user; $usrpwd = $DB_site->query_first("select password FROM $table_user where username = '$name'"); return $pwd==md5($usrpwd); } 看出问题了吧?因为输入的是一个没有的用户名,所以它的密码肯定是为空的,自然就等于你输入的密码了。自然登陆了。 解决办法: 将上面的代码改为: function verifyUser($name, $pwd) { global $DB_site,$table_user; $usrpwd = $DB_site->query_first("select password FROM $table_user where username = '$name'"); $num=mysql_affected_rows($DB_site->link_id); if ($num) { if ($pwd==md5($usrpwd)) return true; } return false; } 其实这个漏洞好象0.03也存在。可是测试了网上几个0.03的站点。有些可以。有些不可以。在本地调试0.03的就不能利用。不知何故?哪位高手能指点一二?感激不尽。 漏洞二 涉及版本: 目前所有版本 描述: 由于category.php、article.php、print.php……多个文件对用户提交的变量过滤不足。导致非法用户可以进行SQL Injection攻击。 详细: 这几个文件的相关代码是这样写的(这几个文件的代码不一定相同): if (!isset($aid)){ showerror('error_articleid'); } 没有检查变量用户提交的变量。不过在PHP里注入有点困难。因为MYSQL4以下的版本是不支持子语句的,而且新版本的php.ini里的 magic_quotes_gpc 选项默认是 On 的。当 magic_quotes_gpc 打开时,所有的 ' (单引号), " (双引号), \ (反斜线) and 空字符会自动转为含有反斜线的溢出字符。这样我们就无法注入了,所以注入语句就不说了,大家自己看看相关MYSQL语句再碰碰运气自己尝试添加用户吧。 解决办法: 检查用户输入的代码。比如检查提交的数据是否为数字类型。在以上代码后面加入以下代码检查变量: $idid=str_replace(" ","",${"aid"}); if (is_numeric($idid)==0 || $idid=="") { print "非法参数"; exit(); } 后记: 由于是在网吧用下机前的15分钟看的源代码。难免有遗漏、疏忽的地方。有兴趣的朋友可以继续分析。有结果请第一时间告诉我,因为我也用myarticle。谢谢。 |
地主 发表时间: 11/09 00:44 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号