DVWA 靶场(四)文件包含
File Inclusion
File Inclusion(文件包含),是指当服务器开启了allow_url_include选项时,通过一些PHP的特性函数(比如:include(),require(),include_once()和require_once())利用URL去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。
文件包含 分类
本地文件包含
当被包含的文件在本地服务器时,就叫做本地文件包含
- 例:
../../../../../etc/passwd
远程文件包含
当被包含的文件在第三方服务器时,就叫做远程文件包含
- 例:
http://www.baidu.com可以直接打开百度
特性函数 区别
include()
当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。
include_once()
功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次。
require()
require()与include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行。
使用require()函数包含文件时,只要程序一执行,立即调用文件,而include()只有程序执行到函数时才调用。
require()在php程序执行前执行,会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。
require_once()
它的功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。
Low
源码分析
Low 源码中没有做任何的过滤
1 |
|
漏洞利用
点击靶场提供的file1.php获取漏洞利用链接
1 | http://192.168.199.236/dvwa/vulnerabilities/fi/?page=file1.php |
我们可以尝试去查看该主机上的文件
1 | http://192.168.199.236/dvwa/vulnerabilities/fi/?page=./../../phpinfo.php |
除了能看到PhpInfo信息之外
我们还能看到远程服务器的物理路径
Medium
从源码中我们可以发现
../、..\、http:// 和 https:// 会被替换空
这里我们可以使用双写绕过法
源码分析
1 |
|
漏洞利用
我们可以使用双写法构建绕过
| 原始字段 | 双写法绕过 |
|---|---|
| http:// | hthttp://tp:// |
| https:// | hthttps://tps:// |
| …/ | …/./ |
| …\ | ….\ |
所以我们直接构建Payload进行尝试
1 | http://192.168.199.236/dvwa/vulnerabilities/fi/?page=./..././..././phpinfo.php |
High
源码分析
从源码中分析可知
现在需要匹配以file开头或者include.php的文件
否则网页就会输出ERROR: File not found!
1 |
|
漏洞利用
我们需要构建一个file://伪协议Payload
- 难点:需要通过其他方法知道绝对路径
1 | http://192.168.199.236/dvwa/vulnerabilities/fi/?page=file:///C:/xp.cn/www/wwwroot/admin/dvwa/phpinfo.php |
参考 & 引用
https://zhuanlan.zhihu.com/p/565945383
https://www.cnblogs.com/chadlas/articles/15719775.html
https://blog.csdn.net/Wu000999/article/details/101925271
