文件包含漏洞

文件包含漏洞

一、文件包含漏洞概述

​ 程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某个函数的时候,直接调用该文件,无需再次编写,这种调用文件的过程通常称为包含。

​ 而程序开发人员都希望代码更加灵活,所以通常会把被包含的文件设置为变量,来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用任意文件,造成文件包含漏洞。

​ 几乎所有的脚本语言都会提供文件包含功能。文件包含漏洞在PHP Web Application中居多,在JSP/ASP/ASP。net程序中比较少。

二、文件包含PHP函数

1
2
3
4
include("") / include ""    #如果包含文件不存在,产生警告,后续语句仍然执行
include_once("") / include_once "" #同include(),所包含的文件只能在当前页面被包含一次
require() #如果包含文件不存在,产生错误,后续语句不执行
require_once() #同require(),所包含的文件在当前页面只被包含一次

三、漏洞产生的原因

1、Web应用实现了动态包含

2、动态包含的文件路径参数,客户端可控

四、PHP相关配置

1、关于PHP操作远程文件的配置(远程文件包含):

1
2
allow_url_fopen=On/Off
allow_url_inclode=On/Off

五、文件包含漏洞的特点

使用PHP文件包含函数包含的文件,无论该文件是什么拓展名或者类型,都会作为php文件进行解析

六、文件包含漏洞实验

1、00截断的利用(PHP<5.3.4 && 关闭魔术引号配置 magic_quotes_gpc)

1
2
3
4
5
6
7
8
9
<?php
if(isset($_GET['path']){
include $_GET['path'].".html";
} else {
echo "Not Have arGc";
}
]))
?>
#采用%00截断可使其绕过后面的.html, Payload: ?path=info.php%00

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器