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

CISP-PTE 靶场环境复现:基于Docker快速搭建5类漏洞实战平台

CISP-PTE 靶场环境复现:基于Docker快速搭建5类漏洞实战平台

在网络安全领域,渗透测试能力的提升离不开高质量的实战环境。传统搭建漏洞靶场往往面临环境配置复杂、资源占用高、难以复现等问题。本文将介绍如何利用Docker技术,快速构建一个包含SQL注入、文件上传、文件包含、命令执行、日志分析等5类经典漏洞的CISP-PTE模拟靶场环境。

1. 环境准备与基础架构设计

1.1 系统要求与依赖安装

在开始之前,请确保您的系统满足以下最低要求:

  • 操作系统:Ubuntu 20.04+/CentOS 7+(推荐使用Linux环境)
  • Docker版本:20.10.0+
  • Docker Compose版本:1.29.0+
  • 硬件配置:4GB内存,20GB磁盘空间

安装必要的依赖组件:

# 更新系统包 sudo apt-get update && sudo apt-get upgrade -y # 安装Docker curl -fsSL https://get.docker.com | sh sudo systemctl enable --now docker # 安装Docker Compose sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose

1.2 靶场架构设计

我们的靶场采用模块化设计,每个漏洞场景独立运行在隔离的容器中:

靶场架构图(文字描述): 1. 前端负载均衡:Nginx反向代理 2. SQL注入靶机:MySQL+PHP应用 3. 文件上传靶机:PHP+自定义过滤机制 4. 文件包含靶机:PHP多版本环境 5. 命令执行靶机:Python Flask应用 6. 日志分析靶机:Apache+自定义日志生成器

2. Docker Compose配置详解

2.1 基础服务配置

创建docker-compose.yml文件,定义共享网络和数据库服务:

version: '3.8' services: # 共享MySQL服务 db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: insecure_password MYSQL_DATABASE: vulndb volumes: - ./mysql-init:/docker-entrypoint-initdb.d networks: - vuln-net # 管理界面 adminer: image: adminer ports: - "8080:8080" networks: - vuln-net networks: vuln-net: driver: bridge

2.2 SQL注入靶机配置

添加SQL注入靶机服务配置:

sqli-target: build: ./sqli ports: - "8001:80" environment: DB_HOST: db DB_USER: root DB_PASS: insecure_password depends_on: - db networks: - vuln-net

对应的sqli/Dockerfile内容:

FROM php:7.4-apache COPY src/ /var/www/html/ RUN docker-php-ext-install mysqli && a2enmod rewrite

3. 漏洞场景实现细节

3.1 SQL注入场景构建

sqli/src目录下创建漏洞页面login.php

<?php $conn = new mysqli($_ENV['DB_HOST'], $_ENV['DB_USER'], $_ENV['DB_PASS'], 'vulndb'); if(isset($_POST['username'])){ $query = "SELECT * FROM users WHERE username='".$_POST['username']."' AND password='".$_POST['password']."'"; $result = $conn->query($query); if($result->num_rows > 0){ echo "Login successful! Flag: FLAG_SQLI_1"; } else { echo "Invalid credentials"; } } ?>

初始化SQL脚本mysql-init/01-init.sql

CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50), password VARCHAR(50), is_admin BOOLEAN ); INSERT INTO users VALUES (1, 'admin', '7b24afc8bc80e548d66c4e7ff72171c5', 1), (2, 'guest', '084e0343a0486ff05530df6c705c8bb4', 0);

3.2 文件上传漏洞实现

创建文件上传靶机服务:

upload-target: build: ./upload ports: - "8002:80" networks: - vuln-net

对应的upload/Dockerfile

FROM php:7.4-apache COPY src/ /var/www/html/ RUN chown -R www-data:www-data /var/www/html/uploads

文件上传处理逻辑upload.php

<?php $upload_dir = "uploads/"; if(isset($_FILES['file'])){ $file_name = basename($_FILES['file']['name']); $target = $upload_dir.$file_name; // 脆弱的过滤逻辑 $blacklist = array(".php", ".phtml", ".php3", ".php4"); foreach($blacklist as $ext){ if(strpos(strtolower($file_name), $ext) !== false){ die("危险文件类型!"); } } if(move_uploaded_file($_FILES['file']['tmp_name'], $target)){ echo "文件上传成功! 路径: ".$target; } else { echo "文件上传失败"; } } ?>

4. 高级漏洞场景配置

4.1 命令执行漏洞

创建命令执行靶机服务:

rce-target: build: ./rce ports: - "8003:5000" networks: - vuln-net

对应的Flask应用app.py

from flask import Flask, request import subprocess app = Flask(__name__) @app.route('/ping') def ping(): host = request.args.get('host', '127.0.0.1') cmd = f"ping -c 1 {host}" try: output = subprocess.check_output(cmd, shell=True) return output.decode() except: return "Ping failed"

4.2 日志分析挑战

配置Apache日志分析靶机:

log-analysis: image: httpd:2.4 ports: - "8004:80" volumes: - ./logs:/usr/local/apache2/logs - ./log-gen:/log-gen command: > sh -c "( /log-gen/gen-logs.sh & httpd-foreground )" networks: - vuln-net

日志生成脚本log-gen/gen-logs.sh

#!/bin/bash while true; do # 生成正常访问日志 curl -s http://localhost/ > /dev/null curl -s http://localhost/admin.php > /dev/null # 随机生成攻击尝试 if [ $((RANDOM%10)) -eq 0 ]; then curl -s "http://localhost/?cmd=ls" > /dev/null curl -s "http://localhost/admin.php?user=admin' OR 1=1--" > /dev/null fi sleep 5 done

5. 环境部署与使用指南

5.1 一键启动与停止

启动所有服务:

docker-compose up -d --build

停止并清理环境:

docker-compose down --volumes

5.2 访问各靶场

服务启动后,可以通过以下URL访问不同漏洞场景:

漏洞类型访问地址默认端口
SQL注入http://localhost:80018001
文件上传http://localhost:80028002
命令执行http://localhost:80038003
日志分析http://localhost:80048004
数据库管理http://localhost:80808080

5.3 教学使用建议

  1. 分阶段教学

    • 初级阶段:关闭容器间的网络隔离,便于理解漏洞原理
    • 高级阶段:启用严格网络策略,模拟真实隔离环境
  2. 自定义难度调整

    • 修改Dockerfile中的安全配置
    • 调整应用代码中的过滤规则
  3. flag设置技巧

    # 在容器中设置flag echo "FLAG_$(date +%s)" > /var/www/html/flag.txt chmod 600 /var/www/html/flag.txt

6. 安全加固与扩展

6.1 靶场安全注意事项

虽然这是用于教学的漏洞环境,但仍需注意:

  1. 网络隔离

    networks: vuln-net: internal: true
  2. 资源限制

    deploy: resources: limits: cpus: '0.5' memory: 512M

6.2 扩展更多漏洞场景

可以通过添加服务来扩展更多漏洞类型:

xss-target: build: ./xss ports: - "8005:80" networks: - vuln-net

对应的XSS漏洞页面示例:

<!-- xss/index.html --> <script> // 脆弱的DOM XSS示例 const params = new URLSearchParams(window.location.search); document.write("Hello, "+params.get('name')); </script>

7. 故障排查与维护

7.1 常见问题解决

问题1:容器启动失败
解决方案

# 查看日志 docker-compose logs <service_name> # 重新构建单个服务 docker-compose up -d --no-deps --build <service_name>

问题2:端口冲突
解决方案

# 查看占用端口的进程 sudo lsof -i :8001 # 修改docker-compose.yml中的端口映射 ports: - "新的端口:容器端口"

7.2 定期维护建议

  1. 更新基础镜像

    docker-compose pull
  2. 备份重要数据

    docker run --rm --volumes-from <container_name> -v $(pwd):/backup busybox tar cvf /backup/backup.tar /path/in/container
  3. 监控资源使用

    docker stats
http://www.cnnetsun.cn/news/3338214.html

相关文章:

  • 5种高效方法:使用NoSleep实用工具实现Windows防休眠完整解决方案
  • 从数据切分到精排优化:构建高精度RAG智能导购系统的全链路实践
  • 图像缩放实战:从原理到OpenCV,剖析最近邻、双线性与双三次插值
  • 企业AI转型实战指南:从准备到落地的关键策略
  • 终极指南:如何使用Awoo Installer高效安装Switch游戏
  • 【实战指南】五大主流视频打架行为数据集评测与应用场景解析
  • Simulink 2024b 三相坐标变换仿真:从 Clarke/Park 到对称分量法的 5 种模型对比
  • 模板驱动型文档自动化:从Word填空到业务逻辑编码
  • STM32F103C8T6 + HC-SR04 超声波测距:从 2cm 到 4m 的 3 种滤波算法实测对比
  • 人脸识别系统 42(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • Claude Code 换成了 Kimi K2.5 后,我再也回不去了
  • Horos医学影像软件:macOS上免费开源的DICOM工作站完整指南
  • 光学设计误区解析:5 种 ZEMAX 像差操作数(LONA/AXCL/FCGT等)的适用场景与数值解读
  • Mythos Preview:AI自动攻防如何重塑企业安全工作流
  • PilotGo-web权限控制方案:构建安全的企业级运维管理系统
  • 深度学习代码|从零实现Multi-Head Attention:张量变换与并行计算详解
  • Windows热键侦探:3分钟快速定位谁“偷走“了你的快捷键
  • C++20 std::source_location:告别宏的现代日志与性能剖析利器
  • openeuler/tp-qemu深度解析:虚拟化测试框架的架构设计与实现原理
  • AI Agent A/B 实验深度解析(上):从实验设计到上线决策
  • AI Agent 工具调用稳定性深度解析:从并行调度到异常自愈
  • STM32与PAM8904驱动的高效声音报警系统设计
  • 创业初期的数据库性能优化:从慢查询分析到索引优化的实战路径
  • 跨平台流媒体下载神器:N_m3u8DL-RE如何彻底解决HLS/DASH/MSS视频保存难题
  • Unity AR项目实战:OpenCVSharp实时摄像头轮廓检测全流程
  • Unity C#集合与随机物体生成:从List管理到预制体实例化实战
  • Python股票数据分析终极指南:3步掌握mootdx通达信数据获取
  • 爱因斯坦棋人机对战:从Minimax算法到Python实现详解
  • 2026 国内控制台品牌排名|指挥中心 / 监控室 / 金融操作台源头工厂选型指南
  • 10个OpenEuler aa-ui实用技巧,提升开发效率与用户体验