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

文件包含靶场

文件包含漏洞靶场搭建

一、漏洞原理简介

文件包含漏洞(File Inclusion) 是由于服务器端 include()require() 等函数对用户输入的文件路径缺乏校验,导致攻击者可以包含本地或远程文件,从而实现:

  • 本地文件包含(LFI):包含服务器上的敏感文件
  • 远程文件包含(RFI):包含外部恶意文件,实现命令执行(仅当 PHP 允许远程)

二,搭建过程

项目目录结构

file-include-lab/
├── Dockerfile
└── src/
    ├── index.php
    ├── include/
    │   └── flag.txt
    ├── home.php
    ├── about.php
    ├── contact.php
    └── assets/
        └── style.css

通过命令查看:

tree file-include-lab

操作命令流程

创建目录结构
mkdir -p file-include-lab/src/{include,assets} && cd file-include-lab
写入Dockerfile
cat > Dockerfile <<EOF
FROM php:7.4-apache

COPY src/ /var/www/html/
RUN chown -R www-data:www-data /var/www/html

EXPOSE 80

CMD ["apache2-foreground"]
EOF

# 写入PHP主文件
cat > src/index.php <<'EOF'
<!DOCTYPE html>
<html>
<head>
    <title>文件内容查看器</title>
    <link rel="stylesheet" href="assets/style.css">
</head>
<body>
    <div class="container">
        <h1>📁 文件内容查看系统</h1>
        <form method="GET">
            <input type="text" name="page" placeholder="输入文件路径(如:home.php)">
            <button type="submit">查看</button>
        </form>
        <div class="content">
            <?php
            $allowed_pages = ['home.php', 'about.php', 'contact.php'];
            $page = $_GET['page'] ?? 'home.php';
            
            if (in_array($page, $allowed_pages)) {
                include($page);
            } else {
                @include($_GET['page']);
            }
            ?>
        </div>
        <div class="menu">
            <a href="/?page=home.php">首页</a>
            <a href="/?page=about.php">关于</a>
            <a href="/?page=contact.php">联系我们</a>
        </div>
    </div>
</body>
</html>
EOF
写入CSS样式文件
mkdir -p src/assets && cat > src/assets/style.css <<EOF
body {
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    max-width: 800px;
    margin: 20px auto;
    padding: 20px;
    background-color: #f0f2f5;
}

.container {
    background: white;
    padding: 30px;
    border-radius: 10px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}

h1 {
    color: #2c3e50;
    border-bottom: 2px solid #3498db;
    padding-bottom: 10px;
}

form {
    margin: 20px 0;
}

input[type="text"] {
    width: 300px;
    padding: 8px;
    border: 1px solid #ddd;
    border-radius: 4px;
}

button {
    padding: 8px 15px;
    background: #3498db;
    border: none;
    color: white;
    border-radius: 4px;
    cursor: pointer;
}

.content {
    min-height: 150px;
    padding: 20px;
    border: 1px solid #eee;
    margin: 20px 0;
}

.menu a {
    margin-right: 15px;
    color: #3498db;
    text-decoration: none;
}
EOF
写入flag文件
echo "flag{W3zYcT8rDxV5sQmK}" > src/include/flag.txt
创建辅助页面
for page in home about contact; do 
cat > src/${page}.php <<EOF
<h2>${page^}</h2>
<p>This is ${page} page content.</p>
EOF
done
docker一键搭建
# 构建镜像
docker build -t file-include-lab .

# 启动容器
docker run -d -p 8001:80 --name include-lab file-include-lab
http://www.dtcms.com/a/130078.html

相关文章:

  • sql 向Java的映射
  • docker compose搭建博客wordpress
  • 基于springboot的“流浪动物管理系统”的设计与实现(源码+数据库+文档+PPT)
  • Losson 4 NFS(network file system(网络文件系统))
  • 地毯填充luogu
  • 【CS*N是狗】亲测可用!!WIN11上禁用Chrome自动更新IDM插件
  • 使用PyTorch实现目标检测边界框转换与可视化
  • 深入探讨MySQL存储引擎:选择最适合你的数据库解决方案
  • 【微服务】SpringBoot 整合 Lock4j 分布式锁使用详解
  • 网络安全课程笔记整理
  • CTF--bp
  • Spring开发系列教程(15)——DAO
  • 力扣每日打卡 1922. 统计好数字的数目 (中等)
  • 时序约束高级进阶使用详解二:Set_Min_Delay
  • C++多线程编程时的伪共享问题及其定位和解决
  • LLMs之Agent之A2A:A2A的简介、安装和使用方法、案例应用之详细攻略
  • 制作一款打飞机游戏教程2:背景滚动
  • ISIS协议(动态路由协议)
  • Java基础:一文讲清多线程和线程池和线程同步
  • 通过扣子平台工作流将数据写入飞书多维表格
  • TDengine 语言连接器(Go)
  • Android 之美国关税问题导致 GitHub 403 无法正常访问,责任在谁?
  • leetcode-单调栈26
  • 开源项目介绍:GroundingDINO-TensorRT-and-ONNX-Inference
  • 2003-2016年各省互联网普及率数据
  • Ubuntu系统美化
  • 雅思练习总结(二十六)
  • defer关键字
  • RVOS-4.实现上下文切换和协作式多任务
  • 力扣每日打卡 50. Pow(x, n) (中等)