WEB漏洞—文件包含漏洞

介绍

所谓文件包含漏洞,故名思意,就是在文件中包含(引用)了其他文件所导致的漏洞。例如有些函数在不同代码中的作用都是相同的,在这里我们可以称呼它为“变量”,那么这时程序员就会将该“变量”放在一个文件中,在其他代码中引用该变量文件即可。
当这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校验或者校验被绕过就造成了文件包含漏洞。
在这里插入图片描述

在这里插入图片描述
脚本利用
我们先创建一个带有文件包含脚本的PHP文件放在服务器上,代码如下

<?php
$filename=$_GET['filename'];
include($filename);
?>

这时我又在同一目录下创建了一个a.txt文件
内容就一句:<?php phpinfo();?>
在这里插入图片描述
当我在浏览器中访问test.php文件时,里面的变量?filename=a.txt。
在这里插入图片描述可以看出,a.txt里的内容是以PHP脚本执行的。

对文件包含的检测

白盒可以通过代码审计
黑盒可以通过扫描工具扫出、可以利用网上公开的漏洞、还可以手工去尝试包含检测

文件包含类型

分为本地包含远程包含,也可以分为有限制无限制类型
所谓有限制就是在利用该漏洞时有一定的干扰,而无限制则可以直接包含(上面的脚本利用就是无限制)
在这里插入图片描述
像这样就是有限制的,这里就只能指向html文件。

但是我们可以通过“%00”去将后面.html代码截断,“a.txt%00”即可正常访问
在PHP中,这个%00的使用有两个条件
1.magic_quotes_gpc=off
2.PHP版本<5.3.4
若不满足这两个条件,则无法使用该截断

还有一种方法,可以利用长度截断
在Windows中文件命令长度256,Linux中文件命名长度4096。
当文件名长度超过服务器命名长度数值,则后面的.html也不会生效。

在这里插入图片描述
危险更大的是远程包含
在phpinfo中我们可以查看“allow_url_include”来判定是否有远程包含
在这里插入图片描述
状态为“On”的话就可以包含远程服务器的文件去执行了
在这里插入图片描述
远程包含如果有限制,我们可以通过在代码后加入相关干扰字符尝试去绕过,如%20、%23、?等
在这里插入图片描述

各种协议流玩法

伪协议用法:https://segmentfault.com/a/1190000018991087
php支持的协议和封装协议https://www.php.net/manual/zh/wrappers.php
在这里插入图片描述如果 PHP 的配置选项 allow_url_include、allow_url_fopen 状态为 ON 的话,则include/require 函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞(RFI)

file://+路径:将文件以脚本执行
data://
php://filter 可以在执行代码前将代码换个方式读取出来,只是读取,不需要开启,
读取源代码并进行 base64 编码输出,不然会直接当做 php 代码执行就看不到源代码
内容了
php://input?test=php://input 【post data】<?php phpinfo();?>

春秋靶场web include练习

进入后是这个页面,一串代码加上phpinfo信息
在这里插入图片描述
代码分析

<?php 
show_source(__FILE__);//文件高亮
if(isset($_REQUEST['path'])){//isset — 检测变量是否已声明并且其值不为 null
    include($_REQUEST['path']);//包含变量‘path’请求的文件
}else{
    include('phpinfo.php');//否则展示phpinfo.php这个文件
}

由上可知,存在phpinfo.php这个文件在,所以我们尝试访问下此文件
在这里插入图片描述没问题
既然是文件包含漏洞,我们查看下phpinfo中的allow_url_include是否为On
在这里插入图片描述这样的话我们尝试利用上面说的伪协议,去读取相关信息
用php://input+POST【php脚本】试试
在这里插入图片描述可以看到这里含有三个文件,很明显‘dle345aae.php’这个文件就是我们通过的flag文件
访问它试试
在这里插入图片描述
好像什么都没有爆出,不急,看看网页源代码
在这里插入图片描述
flag出现了

防御手段

  1. 将包含文件固定,不要设置为变量。
  2. 如果有设置变量的必要,那么最好固定文件后缀,如.html
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值