| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 安全365社区 |
安全365
收藏本站
设为首页
会员登录:
安全365
站内搜索: 新闻中心 系统安全 网络安全 安全技术 下载中心
| 网络安全首页 | 信道安全 | 设备安全 | 协议安全 | Web安全 |
入侵检测PHP程序中的目录遍历漏洞
入侵检测PHP程序中的目录遍历漏洞
作者:不详 文章来源:华盟收集 点击数: 更新时间:2007-4-28 17:04:56

目录遍历漏洞在国内外有许多不同的叫法,比如也可以叫做信息泄露漏洞,非授权文件包含漏洞.名称虽然多,可他们却有一个共同的成因,就是在程序中没有过滤用户输入的../和./之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件,其危害可想而知.这类漏洞大家比较熟悉的可能就是在一些邮件列表程序以及网络硬盘程序中,其实这类漏洞还广泛存在与一些国外的BLOG程序中,这类漏洞大概分两种下面就来通过实例来说明这类漏洞是如何产生以及该如何防范.

首先,我们来看一个国外的BLOG,前几天从网上下了一个名为LoudBlog的BLOG程序,
在它的index.php页面中看到如下代码:
<?if (!isset($_GET['page'])) { $loadme = "inc/backend_postings.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");
}
?>
<?
$blog_id = $_GET['blogid'];
if ($blog_id == '')
{
include("blog.txt");
}
else
{
include("./blog_entries/$blog_id.txt");
}
?>
从上面的代码可以清晰的看出问题所在,第一段程序获得$_GET[]提交的数据并赋值给$act,这里没有对act做任何的过滤,而在后面判断如果变量为空就把blog.txt包含进来,如果不为空就包含act目录下的$act.txt文件,不过只能读以.txt结尾的文件,读别的文件加上 txt后缀后会提示找不到文件,可以配合某些上传漏洞把文件包含进去,比如提交如下URL:
index.php?act=blog&blogid=../../filename这样带到程序里就成了include("./filename.txt");包含近来的文件只要里面含有PHP代码就算后缀是TXT文件也会被执行,原理给上面的一样,我就不截图了.
上面分别介绍了现在最主要的两种目录遍历漏洞,从表面上看基于TXT的PHP程序如果有这类漏洞似乎利用更方便一些,其实两者的危害性都是等价的.其实避免这类漏洞也是很简单的事情,象$blog-id这类数字形的参数只需用intval()函数强制整形化就可以了,对于字符形的参数我们可以自己写一个过滤函数把危险字符过滤掉,类似代码如下:
function fuckchar($var){
  $var = str_replace("..","",$var);
  $var = str_replace(".","",$var);
  $var = str_replace("/","",$var);
  $var = str_replace("\","",$var);

[1] [2] [3] [4] 下一页

文章录入:移山愚公    责任编辑:洋葱头 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    Web程序源代码加以保护
    Smartgate SSL Server目
    APPC:高级程序间通信协
    X.500:目录访问协议
    Sun Java系统目录服务器
    PHP程序中的常见漏洞
    phpArticle安装程序未删
    JSP应用程序开发中安全问
    Hostname欺骗导致PHP/AS
    全面保护你的Java程序安
    站长邮箱:webmaster@anquan365.com
    联系电话:86-10-67634029
    Copyright © 2006-2008 www.anquan365.com 北京华安普特网络科技有限公司 版权所有