CISP-PTE 靶场环境复现基于Docker快速搭建5类漏洞实战平台在网络安全领域渗透测试能力的提升离不开高质量的实战环境。传统搭建漏洞靶场往往面临环境配置复杂、资源占用高、难以复现等问题。本文将介绍如何利用Docker技术快速构建一个包含SQL注入、文件上传、文件包含、命令执行、日志分析等5类经典漏洞的CISP-PTE模拟靶场环境。1. 环境准备与基础架构设计1.1 系统要求与依赖安装在开始之前请确保您的系统满足以下最低要求操作系统Ubuntu 20.04/CentOS 7推荐使用Linux环境Docker版本20.10.0Docker 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-compose1.2 靶场架构设计我们的靶场采用模块化设计每个漏洞场景独立运行在隔离的容器中靶场架构图文字描述 1. 前端负载均衡Nginx反向代理 2. SQL注入靶机MySQLPHP应用 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: bridge2.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 rewrite3. 漏洞场景实现细节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.sqlCREATE 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/DockerfileFROM 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.pyfrom flask import Flask, request import subprocess app Flask(__name__) app.route(/ping) def ping(): host request.args.get(host, 127.0.0.1) cmd fping -c 1 {host} try: output subprocess.check_output(cmd, shellTrue) return output.decode() except: return Ping failed4.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/?cmdls /dev/null curl -s http://localhost/admin.php?useradmin OR 11-- /dev/null fi sleep 5 done5. 环境部署与使用指南5.1 一键启动与停止启动所有服务docker-compose up -d --build停止并清理环境docker-compose down --volumes5.2 访问各靶场服务启动后可以通过以下URL访问不同漏洞场景漏洞类型访问地址默认端口SQL注入http://localhost:80018001文件上传http://localhost:80028002命令执行http://localhost:80038003日志分析http://localhost:80048004数据库管理http://localhost:808080805.3 教学使用建议分阶段教学初级阶段关闭容器间的网络隔离便于理解漏洞原理高级阶段启用严格网络策略模拟真实隔离环境自定义难度调整修改Dockerfile中的安全配置调整应用代码中的过滤规则flag设置技巧# 在容器中设置flag echo FLAG_$(date %s) /var/www/html/flag.txt chmod 600 /var/www/html/flag.txt6. 安全加固与扩展6.1 靶场安全注意事项虽然这是用于教学的漏洞环境但仍需注意网络隔离networks: vuln-net: internal: true资源限制deploy: resources: limits: cpus: 0.5 memory: 512M6.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)); /script7. 故障排查与维护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 定期维护建议更新基础镜像docker-compose pull备份重要数据docker run --rm --volumes-from container_name -v $(pwd):/backup busybox tar cvf /backup/backup.tar /path/in/container监控资源使用docker stats
CISP-PTE 靶场环境复现:基于Docker快速搭建5类漏洞实战平台
发布时间:2026/7/13 11:37:07
CISP-PTE 靶场环境复现基于Docker快速搭建5类漏洞实战平台在网络安全领域渗透测试能力的提升离不开高质量的实战环境。传统搭建漏洞靶场往往面临环境配置复杂、资源占用高、难以复现等问题。本文将介绍如何利用Docker技术快速构建一个包含SQL注入、文件上传、文件包含、命令执行、日志分析等5类经典漏洞的CISP-PTE模拟靶场环境。1. 环境准备与基础架构设计1.1 系统要求与依赖安装在开始之前请确保您的系统满足以下最低要求操作系统Ubuntu 20.04/CentOS 7推荐使用Linux环境Docker版本20.10.0Docker 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-compose1.2 靶场架构设计我们的靶场采用模块化设计每个漏洞场景独立运行在隔离的容器中靶场架构图文字描述 1. 前端负载均衡Nginx反向代理 2. SQL注入靶机MySQLPHP应用 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: bridge2.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 rewrite3. 漏洞场景实现细节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.sqlCREATE 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/DockerfileFROM 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.pyfrom flask import Flask, request import subprocess app Flask(__name__) app.route(/ping) def ping(): host request.args.get(host, 127.0.0.1) cmd fping -c 1 {host} try: output subprocess.check_output(cmd, shellTrue) return output.decode() except: return Ping failed4.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/?cmdls /dev/null curl -s http://localhost/admin.php?useradmin OR 11-- /dev/null fi sleep 5 done5. 环境部署与使用指南5.1 一键启动与停止启动所有服务docker-compose up -d --build停止并清理环境docker-compose down --volumes5.2 访问各靶场服务启动后可以通过以下URL访问不同漏洞场景漏洞类型访问地址默认端口SQL注入http://localhost:80018001文件上传http://localhost:80028002命令执行http://localhost:80038003日志分析http://localhost:80048004数据库管理http://localhost:808080805.3 教学使用建议分阶段教学初级阶段关闭容器间的网络隔离便于理解漏洞原理高级阶段启用严格网络策略模拟真实隔离环境自定义难度调整修改Dockerfile中的安全配置调整应用代码中的过滤规则flag设置技巧# 在容器中设置flag echo FLAG_$(date %s) /var/www/html/flag.txt chmod 600 /var/www/html/flag.txt6. 安全加固与扩展6.1 靶场安全注意事项虽然这是用于教学的漏洞环境但仍需注意网络隔离networks: vuln-net: internal: true资源限制deploy: resources: limits: cpus: 0.5 memory: 512M6.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)); /script7. 故障排查与维护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 定期维护建议更新基础镜像docker-compose pull备份重要数据docker run --rm --volumes-from container_name -v $(pwd):/backup busybox tar cvf /backup/backup.tar /path/in/container监控资源使用docker stats