| 首页 | 技术文章 | 软件下载 | 博客 | 论坛 | 精品教程 | 黑客动画 | 视频资源 | 在线服务 | 黑客游戏 | 

您现在的位置: 中国X黑客小组 >> 技术文章 >> 安全防御 >> 漏洞分析 >> 文章正文 用户登录 新用户注册
  安全天使(sarticle)文章管理系统存在安全隐患         ★★★ 【字体:
安全天使(sarticle)文章管理系统存在安全隐患
作者:stone    文章来源:冰火网络    点击数:    更新时间:2005-1-16    

近日学习PHP编程,想找一些代码参考,在朋友的建议下下载了安全天使的sarticle v1.8学习。安全天使对自己的程序非常有自信,但

是人就难免会有大意的时间,由于水平有限看了一半也没有发现有什么太大的问题。但看到后台的时间发现了一个问题。通过这个bug可以

得到系统仍至服务器的控制权。
大家请看下面代码:
if($_POST['action'] == "update")
{
//更新数据库
foreach ($_POST['config'] AS $name=>$value) {
            $DB->query("UPDATE ".$db_prefix."setting SET value='".trim(addslashes($value))."' WHERE

name='".addslashes($name)."'");
   }
//将配置信息写入配置文件
$config_filename = "settings.php";
   $fp = fopen($config_filename,w);

   $contents = "<?php\n\n\n";
$settings = $DB->query("SELECT * FROM ".$db_prefix."setting");

   while ($setting = $DB->fetch_array($settings)) {
$contents .= "/*##### $setting[title] #####*/\n";
$setting['value']=addslashes($setting['value']);
$contents .= "\$configuration[$setting[name]] = \"".$setting['value']."\";\n\n\n";
   }

   $contents .= "?>";

   fwrite($fp,$contents);
   fclose($fp);
//
   redirect("更新常规信息成功!", "./configurate.php");
} //end update


好像没有什么问题,刚开始我也这么认为,但后来我在测试安全性时发现有问题。下面这些代码把插入数据库的变量都过滤了,应该不

会有什么问题了,但问题就出来这里。
$DB->query("UPDATE ".$db_prefix."setting SET value='".trim(addslashes($value))."' WHERE name='".addslashes($name)."'");
下面让我们来试一试,进入后台基本设置,在文章系统的版权信息中填入版权信息如www.1626.com,这些随便写,重要的是你写入下面

代码:
";echo PHP_OS;"
也没什么作用,就是输出服务器的操作系统。这样一来settings.php中的$configuration[copyright]变量值就变成了:
$configuration[copyright] = "www.1626.com";echo PHP_OS;"";
而这些原本是不该这样的,'和“应该被过滤掉,理论上应该是:
$configuration[copyright] = "www.1626.com\";echo PHP_OS;\"";
好像 $DB->query("UPDATE ".$db_prefix."setting SET value='".addslashes(trim($value))."'WHERE
name='".addslashes($name)."'");中addslashes()没有起到作用,到底是为什么没起到作用我也搞不明白,毕竟我也是刚学这个。
先不管这些现在我们随便点开那个页面,都会在页面的左上角发现:WINNT(我是在这下测试的:))
再写入下面代码:
";
$c="dir";
system($c);
"
正确执行,到了这里我想不用我说太多了吧,也就是说你可以写入任意PHP代码,程序都会给你执行了。要不放个webshell进去?:)那

个我就不多说了,都是些很容易的事情。不过就算你知道了这个BUG也没有什么用,想要好好的利用上,你还得利用另外的一个BUG取得管

理账号。然后你就可以为所欲为了。为了安全其见,另外的一个BUG我就先不公布了。有兴趣的朋友可以到www.1626.com找我,我们可以交

流一下。
修正办法:
改:
   while ($setting = $DB->fetch_array($settings)) {
$contents .= "/*##### $setting[title] #####*/\n";
$contents .= "\$configuration[$setting[name]] = \"".$setting['value']."\";\n\n\n";
   }
为:
   while ($setting = $DB->fetch_array($settings)) {
$contents .= "/*##### $setting[title] #####*/\n";
$setting['value']=addslashes($setting['value']);
$contents .= "\$configuration[$setting[name]] = \"".$setting['value']."\";\n\n\n";
   }

PHP学习中,有喜欢PHP的朋友请和我联系交个朋友,大家共同学习。
                                                  ccxer写于2005.01.15

文章录入:IceRiver    责任编辑:IceRiver 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    6月安全专题集中营
    网银安全性成重点 勿把所有银
    Microsoft 9月安全公告的摘要
    快速了解关于IDS和IPS的安全
    入侵检测技术:网络安全的第
    “HTML制毒者”躲避查杀 降低
    密保卡不再安全 警惕WOW新式
    微软本月仅发4个安全补丁
    无线安全:无线局域网的安全
    加强边界路由器安全防护能力
      网友评论:(只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
    Powered by ICE RIVER - STUDIO
    » CnXHacker.CoM   © CopyRight 2002-2006, CnXHacker.CoM™, Inc. All Rights Reserved.