目录遍历
漏洞
在国内外有许多不同的叫法
,
比如也可以叫做信息泄露漏洞
,
非授权文件包含漏洞
.
名称虽然多
,
可他们却有一个共同的成因
,
就是在程序中没有过滤用户输入的
../
和
./
之类的目录跳转符
,
导致恶意用户可
以通过提交目录跳转来遍历服务器上的任意文件
,
其危害可想而知
.
这类漏洞大家比较熟悉的可能就是在一
些邮件列表程序以及网络硬盘程序中
,
其实这类漏洞还广泛存在与一些国外的
BLOG
程序中
,
这类漏洞大概
分两种下面就来通过实例来说明这类漏洞是如何产生以及该如何防范
.
首先
,
我们来看一个国外的
BLOG,
前几天从网上下了一个名为
Loud
Blog
的
BLOG
程序
,
在它的
index.php
页面中看到如下代码
:
//build an include-path from the url-request
else {
$loadme = "inc/backend_" . $_GET['page'] . ".php";
}
//yee-hah! finally we do show real content on our page!
include ($loadme);
?>
这段程序很简单却包含了一个可怕的漏洞
,
变量
$page
是我们
GET
上去的
,
如果没有设置
page
参数
,
程序就
自动包含
inc/backend_postings.php
这个文件
,
如果有
page
参数就把
$page
的值放到
inc
目录下以
backend_
前缀开头的文件形成一个新的文件
.
这里并没有对
$page
的值做任何的过滤
,
导致我们可以遍历所有文件了
.
这里要注意的是
,
我们提交的
$page
的值会自动的加上
php
后缀
,
所以我们阅读
php
文件是不会有效果的
.
当
然我们可以读一些配置文件也是很有用的
.
下面就来测试一下
,
我们在
inc
目录外建立一个
TXT
文件
,
内容为
Wh0 !s H4K_BaN?
我们提交如下
URL
看看结果
:
http://localhost/loudblog/loudblog/loudblog/index.php?page=/../../hello.txt%00
这里要说的是由于变量
会加上
php
后缀
,
所以我们要用
%00
来截断后缀这样才能正常显示文件内容
,
结果如图
1
测试成功说明漏洞存在了
,
那我们接着读一些敏感文件吧
,
提交如下
URL:
http://localhost/loudblog/loudblog/loudblog/index.php?page=/../../../../../../conf/httpd.conf%00
结果如
图
2
APACHE
的配置文件也顺利读出来了
,
接下来就来看另外一种情况
.
这类漏洞主要是存在与基于
PHP+TXT
结构的程序中
,
漏洞代码也是来自于一个国外的
BLOG,
代码如下
:
$act = $_GET['act'];
if ($act == '')
{
include("blog.txt");
}
else
{
include("act/$act.txt");
}
?>