DVWA靶场通关-File Inclusion(文件包含)

发布时间 2023-09-17 20:02:23作者: TinKode

Brute Force(暴力(破解))、Command Injection(命令行注入)、CSRF(跨站请求伪造)、         File Inclusion(文件包含)、File Upload(文件上传)、Insecure CAPTCHA (不安全的验证码)、       SQL Injection(SQL注入)、SQL Injection(Blind)(SQL盲注)、XSS(DOM)(基于DOM树)、       XSS(Reflected)(反射型跨站脚本)、XSS(Stored)(存储型跨站脚本)

和SQL注入等攻击方式一样,文件包含漏洞也是一种注入型漏洞,其本质就是输入一段用户能够控制的脚本或者代码,并让服务端执行。

有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。

以PHP为例,常用的文件包含函数有以下四种
include(),require(),include_once(),require_once()

区别如下:

require():找不到被包含的文件会产生致命错误,并停止脚本运行
include():找不到被包含的文件只会产生警告,脚本继续执行
require_once()与require()类似:唯一的区别是如果该文件的代码已经被包含,则不会再次包含
include_once()与include()类似:唯一的区别是如果该文件的代码已经被包含,则不会再次包含

include()函数并不在意被包含的文件是什么类型,只要有php代码,都会被解析出来。

上传了一个jpg格式的一句话木马,如果网站有文件包含漏洞,jpg文件就可以被当做php文件解析,所以这就是文件上传漏洞通常配合文件上传使用。

PHP伪协议

1.file://协议

file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响

file:// [文件的绝对路径和文件名]

2.php://协议

php://filter用于读取源码。
php://input用于执行php代码。

3.ZIP://协议

4.data://协议

data:// 同样类似与php://input,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。从而导致任意代码执行。

利用data:// 伪协议可以直接达到执行php代码的效果,例如执行phpinfo()函数:

六、文件包含漏洞防护

1、使用str_replace等方法过滤掉危险字符

2、配置open_basedir,防止目录遍历(open_basedir 将php所能打开的文件限制在指定的目录树中)

3、php版本升级,防止%00截断

4、对上传的文件进行重命名,防止被读取

5、对于动态包含的文件可以设置一个白名单,不读取非白名单的文件。

6、做好管理员权限划分,做好文件的权限管理,allow_url_include和allow_url_fopen最小权限化

 等级low

建立一个文件1.PHP,里面代码随意

http://127.0.0.1/dvwa/vulnerabilities/fi/?page=file1.php

 http://127.0.0.1/dvwa/vulnerabilities/fi/?page=http://127.0.0.1/1.php

 等级Medium

如果传参值中有http:// https:// …/ …\都将替换为空,被过滤了

htthttp://p://127.0.0.1/1.php               双写绕过

等级high

使用fnmatch()函数对page参数进行过滤,要求page必须以“file”开头,服务器才会包含相应的文件

可利用file协议进行读文件file://D://1.php              把1.PHP放到D盘

http://127.0.0.1/dvwa/vulnerabilities/fi/?page=file://D://1.php