文件包含漏洞

什么是文件包含漏洞

PHP文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。最常见的就属于本地文件包含(Local File Inclusion)漏洞了。

程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这种文件调用的过程一般被称为文件包含。

程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,

但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。

远程文件包含漏洞的类型

1.       本地文件包含漏洞

就是在网站服务器上本身存在恶意文件,然后利用本地包含使用。

2.       远程文件包含漏洞

远程文件包含漏洞就是调用其它网站的恶意文件进行打开

常见的PHP文件包含函数

        require:找不到被包含的文件时会产生致命错误,并停止脚本执行。

        Include:找不到被包含的文件时只会产生警告,脚本将继续执行

        Include_once:与include类似,区别就是如果该文件中的代码已经被包含,则不会再次包含。

        Require_once:与require类似,区别就是如果该文件中的代码已经被包含,则不会再次包含。

文件包含示例

1.       本地包含

修改ph配置文件php.ini

 

 

写一个测试文件qswz,测试页面正常

 

 

 

在写一个文件包含测试页qswz111.php

 

 

这就是一个简单的文件包含过程

接下来,我们把被包含的文件名改为txt文件测试

 

 

事实说明,只要文件里面写的是php代码就会执行。当然,如果包含的不是php语法规则的内容则会暴露源码。

2.       远程包含

 

 

执行的是qswz.txt文件中的内容。

文件包含的利用

1.       读取敏感文件

Eg: 访问URL:localhost/qswz111.php?page=http://127.0.0.1/qswz.txt如果目标主机文件存在,并且具有相应的权限,那么就可以读出文件的内容,反之会被警告。

2.       远程包含shell

如果目标主机allow_url_fopen选项是激活的,就可以尝试远程包含一句话木马

3.     本地包含配合文件上传

4.     PHP封装协议

file://        访问本地文件系统

http://       访问HTTP(S)网址

ftp://          访问FTP(s)URLs

php://         访问输入/输出流  (I/O streams)

zlib://          压缩流

data://         数据(RFC   2397)

ssh2://         Secure Shell 2

expect://      处理交互式的流

glob://            查找匹配的文件路径

a.     可以使用封装协议读取php文件

b.     可以使用封装协议写入php文件  php://input

5.     包含apache 的日志文件

6.     截断包含

 

嗯,就先这么多吧

 

posted @ 2019-11-13 20:33  情殇王子  阅读(409)  评论(0编辑  收藏  举报