首页 > 代码库 > 文件包含漏洞

文件包含漏洞

1.文件包含漏洞是“代码注入”的一种。

2.导致文件包含的函数:

PHPinclude()include_once()require()require_once()fopen()readfile()

JSP/Servlet:ava.io.File()Java.io.FileReader()

ASP:include fileinclude virtual

3.当使用include()include_once()require()require_once()包含一个新文件时,该文件会作为PHP()代码执行,PHP内核并不会在意该被包含的文件是什么类型

4.成功利用文件包含漏洞,需要满足两个条件:

(1)include()等函数通过动态变量的方式引入需要包含的文件

(2)用户能够控制该动态变量

5.目录遍历:使用../这种方式来返回到上层目录中,还可以通过不同的编码方式来绕过一些服务器端逻辑如%2e%2e%2f等同于../(当PHP配置了open_basedir时可以保护服务器:限制在某个特定目录下PHP能打开文件)

6.解决文件包含:避免包含动态变量,尤其是用户可以控制的变量。使用枚举

7.远程文件包含:如果PHP的配置选项allow_url_includeOn的话,则includerequire等函数可以加载远程文件(远程文件包含漏洞RFI),RFI可以直接用来执行任意命令。

8.能够打开并包含本地文件的漏洞交本地文件包含漏洞(LFI):

LFI执行PHP代码:

1)包含用户上传的文件

(2)包含data://php://input等伪协议

需要服务器支持,要求allow_url_include设置为ONPHP5.2.0后支持data伪协议

(3)包含session文件

能控制部分session文件的内容,session/tmp目录下

(4)包含日志文件,比如Web Serveraccess log

Apache一般的攻击步骤:先通过读取httpd的配置文件httpd.conf,找到日志文件所在的目录。httpd.conf一般会在Apache的安装目录下。

(5)包含/proc/self/environ文件

用户可以控制它的内容,这是web进程运行时的环境变量,最常见的是在User-Agent中注入PHP代码。

(6)包含上传的临时文件(RFC1867

PHP会为上传文件创建临时文件,其目录在php.iniupload_tmp_dir中定义。但该值默认为空。此时在Linux下会使用/tmp目录,在Windows下会使用C\Windows\temp目录。

临时文件的文件名是随机的,但PHP没有使用安全的随机函数,因此可以暴力猜解文件名。

(7)包含其他应用创建的文件,比如数据库文件、缓存文件、应用日志等。

文件包含漏洞