文件包含漏洞
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件包含漏洞相关的知识,希望对你有一定的参考价值。
1.文件包含漏洞是“代码注入”的一种。
2.导致文件包含的函数:
php:include()、include_once()、require()、require_once()、fopen()、readfile()
JSP/Servlet:ava.io.File()、Java.io.FileReader()
ASP:include file、include 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_include为On的话,则include、require等函数可以加载远程文件(远程文件包含漏洞RFI),RFI可以直接用来执行任意命令。
8.能够打开并包含本地文件的漏洞交本地文件包含漏洞(LFI):
LFI执行PHP代码:
(1)包含用户上传的文件
(2)包含data://或php://input等伪协议
需要服务器支持,要求allow_url_include设置为ON,PHP5.2.0后支持data伪协议
(3)包含session文件
能控制部分session文件的内容,session在/tmp目录下
(4)包含日志文件,比如Web Server的access log
Apache一般的攻击步骤:先通过读取httpd的配置文件httpd.conf,找到日志文件所在的目录。httpd.conf一般会在Apache的安装目录下。
(5)包含/proc/self/environ文件
用户可以控制它的内容,这是web进程运行时的环境变量,最常见的是在User-Agent中注入PHP代码。
(6)包含上传的临时文件(RFC1867)
PHP会为上传文件创建临时文件,其目录在php.ini的upload_tmp_dir中定义。但该值默认为空。此时在Linux下会使用/tmp目录,在Windows下会使用C:\Windows\temp目录。
临时文件的文件名是随机的,但PHP没有使用安全的随机函数,因此可以暴力猜解文件名。
(7)包含其他应用创建的文件,比如数据库文件、缓存文件、应用日志等。
以上是关于文件包含漏洞的主要内容,如果未能解决你的问题,请参考以下文章