DVWA File Inclusion 文件包含全等级分析与实践 – 作者:wakemeup

DVWA File Inclusion 文件包含全等级分析与实践

文件包含函数的参数没有经过过滤或者严格的定义,并且参数可以被用户控制,这样就可能包含非预期文件。如果文件中存在恶意代码,无论文件是什么类型,文件内的恶意代码都会被解析并执行。几乎所有的脚本语言中都会提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多。

文件包含原理:

PHP中提供了四个文件包含的函数,分别是include()、include_once()、require()和require_once()。这四个函数都可以进行文件包含,但作用并不一样。

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

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

include_once:和include()语句类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。 require_once:和require()语句类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。

文件包含分类:

PHP中的文件包含分为本地包含和远程包含。

(一)本地包含 Local File Include (LFI)

1、所包含文件内容符合PHP语法规范:任何扩展名都可以被PHP解析。

2、包含非PHP语法规范源文件,会暴露其源代码。

(二)远程包含 Remote File Include (RFI)

如果要使用远程包含功能,首先需要确定PHP是否已经开启远程包含功能选项(php默认关闭远程包含功能:allow_url_include=off),开启远程包含功能需要在php.ini配置文件中修改。

远程包含与本地包含没有区别,无论是哪种扩展名,只要遵循PHP语法规范,PHP解析器就会对其解析。

危害:

1.web服务器的文件被外界浏览,导致敏感信息泄露

2.脚本被任意执行,导致网站被篡改

Low:

查看源码:

1624618131_60d5b4938e65d07087886.png!small

源码中暴露的问题:

​ page参数没有做任何过滤,直接被include函数包含,造成文件包含漏洞产生

先查看一下三个文件地内容:

1624618141_60d5b49dd4053ed826d40.png!small

1624618149_60d5b4a555fede04914eb.png!small

1624618157_60d5b4adad0994da0191f.png!small

1624618163_60d5b4b3a4cbaaf87e114.png!small

访问http://127.0.0.1/DVWA-master/vulnerabilities/fi/?page=..\..\php.ini

1624618173_60d5b4bd636dfdd0c5967.png!small

Medium:

查看源码:

1624618193_60d5b4d133f09b35a37e7.png!small

分析:

Medium级别的代码增加了str_replace函数,对page参数进行了一定的过滤,将”http:// ”、”https://”、 ” ../”、”..\“”替换为空字符。但str_replace函数并不是很安全,双写就可以绕过了,而且” ../”、”..\”替换为空字符,那么绝对路径来讲,是不受任何影响的

可以选择双写绕过,也可以直接使用..\,因为过滤的是..\”

Payload:

http://127.0.0.1/DVWA-master/vulnerabilities/fi/?page=..\..\php.ini

1624618262_60d5b516324981b91a429.png!small

双写绕过payload:

http://127.0.0.1/DVWA-master/vulnerabilities/fi/?page=…/./…/./php.ini

这里大家可以自己看一下../被过滤后的payload,加深对双写绕过的理解

1624618270_60d5b51e6b4f8d6f3273d.png!small

依然可以,没有受到影响

High:

查看源码:

1624618279_60d5b52727d82243dc04c.png!small

Fnmatch函数:

1624618301_60d5b53dd68b4df1887c1.png!small

分析:

限制了page参数的开头必须是file,但是可以用file://协议类进行文件读取

试一试:

http://127.0.0.1/vulnerabilities/fi/?page=D:/phpstudy_pro/WWW/DVWA-master/phpinfo.php

1624618313_60d5b549c82f1ace60724.png!small

那么就加上file://

Payload:

http://127.0.0.1/DVWA-master/vulnerabilities/fi/?page=file://D:/phpstudy_pro/WWW/DVWA-master/phpinfo.php

1624618329_60d5b55901c2afec0d583.png!small

Impossible:

查看源码:

1624618340_60d5b56498e7069870f6d.png!small

分析:

使用白名单限制page参数只能是include.php或者file1.php或者file2.php或者file3.php

File Inclusion防护总结:

1.设置白名单(文件名可以确定)

2.过滤危险字符(判断文件名称是否为合法的php文件)

3.设置文件目录(对可以包含的文件进行限制,可以使用白名单的方式,或者设置可以包含的目录,如open_basedir)

4.关闭危险配置(无需情况下设置allow_url_include和allow_url_fopen为关闭)

5.严格检查include类的文件包含函数中的参数是否外界可控。

来源:freebuf.com 2021-06-25 18:53:50 by: wakemeup

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论