Board logo

标题: [转载]Myarticle文章系统存在严重漏洞 [打印本页]

作者: 冰血封情    时间: 2004-6-26 10:33     标题: [转载]Myarticle文章系统存在严重漏洞

本文作者: angel

前言

  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');
}
……
……
$article=$DB_site->query_first("SELECT $table_article.*,$table_page.* FROM $table_article
LEFT JOIN $table_page USING (articleid)
WHERE $table_article.articleid=$aid and $table_page.pagenum=$page");
  没有检查变量用户提交的变量。不过在PHP里注入有点困难。因为MYSQL4以下的版本是不支持子语句的,而且新版本的php.ini里的 magic_quotes_gpc 选项默认是 On 的。当 magic_quotes_gpc 打开时,所有的 ' (单引号), " (双引号), \ (反斜线) and 空字符会自动转为含有反斜线的溢出字符。这样我们就无法注入了,所以注入语句就不说了,大家自己看看相关MYSQL语句再碰碰运气自己尝试注入吧。

解决办法:

  检查用户输入的代码。比如检查提交的数据是否为数字类型。将以下代码:
复制内容到剪贴板
代码:
if (!isset($aid)){
showerror('error_articleid');
}
 改为:
复制内容到剪贴板
代码:
if (!isset($aid)){
showerror('error_articleid');
}
$idid=str_replace(" ","",${"aid"});
if (is_numeric($idid)==0 || $idid=="")
{
print "非法参数";
exit();
}
后记:

  由于是在网吧用下机前的15分钟看的源代码。难免有遗漏、疏忽的地方。有兴趣的朋友可以继续分析。有结果请第一时间告诉我,因为我也用myarticle。谢谢。




欢迎光临 邪恶八进制信息安全团队技术讨论组 (https://forum.eviloctal.com/) Powered by Discuz! 20100225