admin 管理员组文章数量: 1184232
2024年4月23日发(作者:霹雳布袋戏最强十人)
PHP文件包含漏洞详解(1)
一、什么才是”远程文件包含漏洞”?
回答是:服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不
严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的。
涉及到的危险函数:include(),require()和include_once(),require_once()
Include:包含并运行指定文件,当包含外部文件发生错误时,系统给出警告,但整个php文件继
续执行。
Require:跟include唯一不同的是,当产生错误时候,include下面继续运行而require停止运
行了。
Include_once:这个函数跟include函数作用几乎相同,只是他在导入函数之前先检测下该文件
是否被导入。如果已经执行一遍那么就不重复执行了。
Require_once:这个函数跟require的区别 跟上面我所讲的include和include_once是一样的。
所以我就不重复了。
配置文件:allow_url_fopen=off 即不可以包含远程文件。Php4存在远程&本地,php5
仅存在本地包含。
二、为什么要包含文件?
程序员写程序的时候,不喜欢干同样的事情,也不喜欢把同样的代码(比如一些公用的函数)写
几次,于是就把需要公用的代码写在一个单独的文件里面,比 如 ,而后在其它文件
进行包含调用。在php里,我们就是使用上面列举的那几个函数来达到这个目的的,它的工作流
程:如果你想 在 里包含,我将这样写include(“”)就达到目的,
然后就可以使用中的 函数了,像这个写死需要包含的文件名称的自然没有什么问题,
也不会出现漏洞,那么问题到底是出在哪里呢?
有的时候可能不能确定需要包含哪个文件,比如先来看下面这个文件的代码:
if ($_GET[page]) {
include $_GET[page];
} else {
include ””;
}
很正常的一段PHP代码,它是怎么运作的呢?
上面这段代码的使用格式可能是这样的:
/m4r10/php/?page=或者
/m4r10/php/?page=
结合上面代码,简单说下怎么运作的:
1.提交上面这个URL,在中就取得这个page的值($_GET[page])。
2.判断$_GET[page]是不是空,若不空(这里是)就用include来包含这个文件。
3.若$_GET[page]空的话就执行else,来 include ”” 这个文件。
PHP文件包含漏洞详解(2)
三、为什么会产生漏洞?
你也许要说,这样很好呀,可以按照URL来动态包含文件,多么方便呀,怎么产生漏洞的呢?问
题的答案是:我们不乖巧,我们总喜欢和别人不一样,我们 不会按照他的链接来操作,我们可
能想自己写想包含(调用)的文件,比如我们会随便的打入下面这个URL:http: //
/m4r10/php/?page=。然后我们的程序就傻傻按照上面我们说得
步骤去执行:取 page为,然后去include(),这时问题出现了,因为我们
并没有这个文件,所以 它 include的时候就会报警告,类似下列信息:
Warning: include() [e]: failed to open stream: No such file or
directory in /vhost/wwwroot/php/ on line 3
Warning: include() [e]: Failed opening ’’ for inclusion
(include_path=’.:’) in /vhost/wwwroot/php/ on line 3
注意上面的那个Warning就是找不到我们指定的文件,也就是包含不到我们指定路径
的文件;而后面的警告是因为前面没有找到指定文件,所以包含的时候就出警告了。
四、如何利用?
上面可以看到,问题出现了,那么我们怎么利用这样的漏洞呢,利用方法其实很多,但是实质上
都是差不多的,我这里说三个比较常见的利用方法:
1.包含读出目标机上其它文件
由前面我们可以看到,由于对取得的参数page没有过滤,于是我们可以任意指定目标主机上的
其它敏感文件,例如在前面的警告中,我们可以看到暴露的绝对路径(vhost/wwwroot/php/),那
版权声明:本文标题:PHP文件包含漏洞详解 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1713835799a653751.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论