PHP:文件包含漏洞
Posted s1ye
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP:文件包含漏洞相关的知识,希望对你有一定的参考价值。
简单记录一些文件包含漏洞的常用方法
产生原因:
文件包含漏洞的产生原因是在通过引入文件时,由于传入的文件名没有经过合理的校验,或者校检被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
常见的导致文件包含的函数如下:
php: include(), include_once(), require(), require_once(), fopen(), readfile() ...
当使用前4个函数包含一个新的文件时,该文件将作为 php 代码执行,php 内核不会在意该被包含的文件是什么类型。
本地文件包含(LFI):
当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。我们可以通过该漏洞读取服务器文件,并执行包含php代码的文件。以DVWA为例:
我们成功读取了php探针文件。而本地文件包含在遇到过滤的情况下也需要一些绕过方法,比如%00截断,点号截断等。
%00截断:
`/etc/passwd%00`
(需要 magic_quotes_gpc=off,PHP小于5.3.4有效)
%00截断目录遍历:
`/var/www/%00`
(需要 magic_quotes_gpc=off,unix文件系统,比如FreeBSD,OpenBSD,NetBSD,Solaris)
路径长度截断:
`/etc/passwd/././././././.[…]/./././././.`
(php版本小于5.2.8(?)可以成功,linux需要文件名长于4096,windows需要长于256)
点号截断:
`/boot.ini/………[…]…………`
(php版本小于5.2.8(?)可以成功,只适用windows,点号需要长于256)
修复方案:
限制用户访问区域,并校验和过滤用户传入的参数。
远程文件包含(RFI):
这里注意一下,当我们远程服务器上的文件为xx.php与xx.txt时,存在远程文件包含漏洞的服务器在执行这两个文件时结果是不同的,以DVWA为例:
这是xx.txt文件执行phpinfo后所显示的ip。
这是xx.php执行phpinfo后的ip地址。
这说明远程文件包含漏洞所包含的文件为非php后缀才是正确的,因为当后缀名为php结尾的文件被执行时实在攻击者本机上执行的,而非php后缀的文件实在受害机上执行的。
PHP的部分常用伪协议:
* file 协议读取本地文件:`file=file://etc/passwd`
(需要allow_url_fopen=On并且 allow_url_include=On)
* 利用php流input:`?file=php://input`
(需要allow_url_include=On,详细→http://php.net/manual/en/wrappers.php.php)
* 利用php流filter:`?file=php://filter/convert.base64-encode/resource=index.php`
(同上)
* 利用data URIs:`?file=data://text/plain;base64,SSBsb3ZlIFBIUAo=%00`
(需要allow_url_include=On)
当网站存在本地文件包含漏洞和上传漏洞时我们可以配合两个漏洞GETSHELL。
任重而道远,共勉!
以上是关于PHP:文件包含漏洞的主要内容,如果未能解决你的问题,请参考以下文章