文件包含漏洞利用与防御

1 什么是文件包含漏洞

由于网页包含其他文件而引发的漏洞

1.1 按照原因分类

1.1.1 内容包含

不同的页面包含相同的内容,比如页眉页脚

1.1.2 函数的包含

公共函数,如Utils.php,其他页面可以随时引用

1.2 按照包含方式分类

1.2.1 本地

Local File Inclusion→LFI漏洞

目录遍历漏洞/任意文件访问漏洞

主要是因为使用了include函数

1.2.2 远程

Remote File Inclusion→RFI漏洞

漏洞描述原因后果
XXEXML外部实体注入使用XML传输数据,并且允许解析外部实体导致访问敏感文件、探测端口、执行系统命令
SSRF服务端请求伪造因为使用了curl_exec()之类的函数导致端口扫描、攻击内网主机、绕过防火墙、获取敏感信息、访问大文件造成内存溢出、操作Redis等等
RFI远程文件包含使用了include导致任意文件访问、包含shell代码
  • 如果服务器要支持远程文件包含,则必须再配置文件php.ini中修改

    allow_url_fopen=On
    allow_rul_include=On
    

2 PHP相关函数和伪协议

函数作用
include()include语句包含并运行指定文件
include_once()只包含一次,不重复包含
require()和include一样,不过出错时会停止
require_once()同include_once()
fopen()打开文件或者URL
readfile读取文件并写入到输出缓冲
highlight_file语法高亮一个文件
show_source等于highlight_file()
file_get_contents将整个文件读入一个字符串
file把整个文件读入一个数组中

在这里插入图片描述

3 DVWA靶场实践

3.1 Low级

在这里插入图片描述

<?php
// The page we wish to display
$file = $_GET[ 'page' ];
?>

可见源码只是根据url中page参数的值来包含文件,而没有经过任何过滤,此处会产生漏洞。只需将page改为目标服务器中的指定文件即可读取,如Linux中的etc/passwd,上传的🐎。

注意此处连接shell需要加cookie值。

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

可见源码对url中参数进行了限制,这里可以使用双写方式绕过。

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

可见源码中只允许file伪协议来读取文件。

3.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;
}
?>

此处使用白名单限制了包含的文件,修复了漏洞。

4 挖掘与利用

4.1 URL关键字

  • URL参数名字出现了page、file、filename、include等
  • URL参数值出现了文件名,比如xxx.php、xxx.html等。

4.2 LFISuite

https://github.com/D35m0nd142/LFISuite

https://gitee.com/goforconquering/my-labrary/blob/master/LFISuite.zip

4.3 常见敏感路径

  • robots.txt

  • sitemap.xml

  • 网站的备份数据wwwroot/ xxx.sql xxx.zip

  • 后台登录的目录/admin /manage

  • 源码

  • 上传的目录/upload /upload.php

  • mysql的管理界面phpadmin密码爆破

  • 程序的安装路径/install

  • php探针phpinfo 雅黑探针

  • 文本编辑器Ueditor kindeditor CKeditor

  • Linux: /etc/passwd /etc/shadow→SHA512 /etc/sudoers→sudo

  • MacOS: .DS_Store

  • 编辑器的临时文件 .swp

  • 目录穿越(title=利用文件包含):Windows IIS Apache pikachu

  • tomcat的WEB-INF路径下: web.xmlweb应用程序配置文件,描述了serviet和其他应用组件配置及命名规则,database.properties数据库配置文件,classes用来存放Java类文件,lib用来存放打包郝的库,src用来放源代码

  • 其他 secret.txt password.txt

5 修复方案

  1. PHP配置

    修改php.ini中

    allow_url_fopen=Off
    allow_url_include=Off
    
  2. 禁用动态包含

    文件包含的代码文件被写成了一个变量,且这个变量可以由前端用户传进来,从而引发漏洞。

  3. 过滤协议、目录字符

  4. 设置文件白名单

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值