文件包含漏洞随笔

一、文件包含漏洞的定义

当我们使用文件包含的函数的时候(方法,如python模块),这个时候如果我们过滤不严格,那么就会导致我们这个文件可以包含恶意文件的情况,从而出现文件包含漏洞

二、文件包含漏洞原理

原理:当我们使用文件包含的函数的时候,由于是动态的使用,所以我们可以会考虑的不全面,导致出现一些意外的情况,比如用户可以将一些恶意文件输入其中,获取get shell等

三、文件包含漏洞的所涉及的函数

include:当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时之给出一个警告,继续向下执行。

include_ once:功能与Include()相同,区别在于当重复调用同一文件时,程序只调用一次

require:require()与include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行。

require_ once:功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次

highhlight_ file::highlight_ file() 函数对文件进行PHP语法高亮显示,语法通过使用HTML标签进行高亮。

当使用该函数时,整个文件都将被显示,包括密码和其他敏感信息!

show_source:show_source() 是 highlight_file() 的别名。

readfile:从文件指针指向的位置开始将数据读出到一个文件中, 且支持同步和异步操作

file_ get_contents:主要用于将文件的内容读入到一个字符串中的首选方法,但遇到读大文件操作时,不建议使用。可以考虑curl等方式代替

fopen:打开文件的函数之一

file:用于绕过文件包含漏洞的方式之一,伪函数之一

php://filter:用于绕过文件包含漏洞的方式之一,伪函数之一

php://input:用于绕过文件包含漏洞的方式之一,伪函数之一

zip://:用于绕过文件包含漏洞的方式之一,伪函数之一

compress.bzip2://:用于绕过文件包含漏洞的方式之一,伪函数之一

zlib//:用于绕过文件包含漏洞的方式之一,伪函数之一

data://:用于绕过文件包含漏洞的方式之一,伪函数之一

addslashes:addslashes() 函数在指定的预定义字符前添加反斜杠。这些字符是单引号(')、双引号(")、反斜线(\)与NUL(NULL字符)。

四、include和require函数的区别

 inlude :包含的文件不存在,程序会继续执行

 require:包含文件不存在,程序停止执行

五、文件包含漏洞的危害

通过文件包含漏洞,可以读取系统中的敏感文件,源代码文件等,如密码文件,通过对密码文件进行暴力破解。

若破解成功则可获取操作系统的用户账户,甚至可通过开放的远程连接服务进行连接控制。

另外不管是本地文件包含还是远程文件包含,文件包含漏洞还可能导致执行任意代码。

六、文件包含漏洞的分类

本地包含:可以进行一些本地的文件读取
远程包含:可以对外网上的文件进行读取

七、文件包含可能出现的位置

当url中出现了?page=和?file=以及?home=,可能会有文件包含漏洞(使用文件包含的函数【模块】的地方)

八、本地文件包含的条件

1.allow_url_fopen = On(是否允许打开远程文件)

allow_url_include = On(是否允许include/require远程文件)

2. 用户可以动态控制变量

九、远程文件包含的条件

1.在php.ini中需要allow_url_include = on和allow_url_fopen= on

2.所需的远程文件后缀不能与目标服务器的语言相同,如目标服务器解析PHP代码,则远程文件后缀不能为.php。

十、本地文件包含漏洞利用技巧

包含用户上传的文件 (我们上传的一句话木马等等)

包含data:// 或 php://input 等伪协议

包含 Session 文件

包含日志文件      ( 通过构造语句让服务器报错并将一句话随报错信息写入日志;找到日志文件路径,包含此文件;用菜刀连接;拿下网站的Webshell )

十一、远程文件包含所使用的主要函数

passthru函数:把这个文件保存到我们主机的服务器上(可以是不支持PHP的主机)

ll 列目录、文件(相当于Windows下dir)

pwd 查看当前绝对路径

whoami 查看当前用户

wget 下载指定URL的文件

十二、文件包含的绕过思路

1、直接绕过,../../之类的,查看父目录,主要看phpinfo.php和robits文件

2、%00绕过

3、加点绕过

4、空格绕过

5、点 空格绕过

6、/、绕过

7、双写绕过

8、伪协议绕过(file://,php://filter,php://input,zip://,compress.bzip2://,zlib//,data://

十三、防御修复文件包含漏洞

1、在php中关闭allow_url_fopen 和 allow_url_include

2、设置白名单过滤,只能包含我们指定的文件

3、将敏感字符过滤(‘,“,/,\等)

4、将大小写,双写,点,空格,%00等过滤

5、将伪协议进行过滤(file://,php://filter,php://input,zip://,compress.bzip2://,zlib//,data://)

6、关闭服务器远程文件包含

7、尽量使用静态文件包含(自己写模块),少使用远程文件包含

8、在php中使用open_ basedir 配置限制访问在指定的区域

posted @ 2021-02-02 19:34  w1hg  阅读(259)  评论(0编辑  收藏  举报