1. DVWA靶场与Docker技术背景解析

DVWA(Damn Vulnerable Web Application)是一个专门为安全学习设计的PHP/MySQL Web应用程序,内置了SQL注入、XSS、文件上传等十余种常见漏洞类型。它最大的特点是允许用户自由调整安全等级(Low/Medium/High/Impossible),非常适合用于渗透测试练习和Web安全教学。

传统安装DVWA需要手动配置LAMP环境,对新手而言常会遇到PHP版本兼容、数据库配置等问题。而Docker通过容器化技术将应用及其依赖打包成标准化单元,实现了"一次构建,处处运行"的效果。使用Docker部署DVWA具有以下优势:

  • 环境隔离:不污染主机系统
  • 快速部署:一条命令即可启动完整环境
  • 版本控制:可随时切换不同版本的DVWA
  • 资源高效:比虚拟机更轻量

2. 环境准备与Docker安装

2.1 系统要求检查

在开始前,请确保您的系统满足:

  • 64位操作系统(Windows 10+/macOS 10.15+/Linux内核3.10+)
  • 至少4GB内存(推荐8GB)
  • 20GB可用磁盘空间
  • 已启用虚拟化支持(BIOS中VT-x/AMD-V)

提示:Windows用户可通过任务管理器→性能标签查看虚拟化是否已启用。如果显示"已禁用",需要进入BIOS设置开启。

2.2 Docker引擎安装

各平台安装方法如下:

Windows/macOS:

  1. 访问Docker官网下载Docker Desktop安装包
  2. 双击安装并保持默认配置
  3. 安装完成后在终端执行验证命令:
docker --version
# 应输出类似:Docker version 24.0.5, build 24.0.5-0ubuntu1~20.04.1

Linux(以Ubuntu为例):

# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

# 添加Docker官方GPG密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 设置仓库
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 验证安装
sudo docker run hello-world

3. DVWA容器部署实战

3.1 获取DVWA镜像

官方推荐使用 vulnerables/web-dvwa 镜像:

docker pull vulnerables/web-dvwa:latest

国内用户可配置镜像加速:

# 创建/修改daemon.json
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://<your-mirror>.mirror.aliyuncs.com"]
}
EOF

# 重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker

3.2 启动容器

基本启动命令:

docker run -d -p 80:80 --name dvwa vulnerables/web-dvwa

高级参数说明:

  • -d :后台运行
  • -p 80:80 :将容器80端口映射到主机80端口
  • --name dvwa :指定容器名称
  • -e PHPIDS_ENABLE=true :启用PHP入侵检测(可选)

注意:如果主机80端口被占用,可改用其他端口如 -p 8080:80

3.3 容器管理常用命令

# 查看运行中的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 启动/停止容器
docker start dvwa
docker stop dvwa

# 进入容器shell
docker exec -it dvwa /bin/bash

# 查看容器日志
docker logs dvwa

4. DVWA初始化配置

4.1 首次访问设置

  1. 浏览器访问 http://localhost (或您指定的端口)
  2. 点击"Create/Reset Database"按钮初始化数据库
  3. 使用默认凭证登录:
    • 用户名: admin
    • 密码: password

4.2 安全等级调整

在DVWA Security页面可设置四个安全级别:

  1. Low:无任何防护
  2. Medium:基础过滤
  3. High:增强防护
  4. Impossible:理论上不可攻破

4.3 配置文件说明

关键配置文件路径(容器内):

  • /var/www/html/config/config.inc.php :主配置文件
  • /var/www/html/external/phpids/Config/Config.ini :PHPIDS配置

如需修改配置,建议使用volume挂载:

docker run -d -p 80:80 -v /path/to/local/config:/var/www/html/config --name dvwa vulnerables/web-dvwa

5. 常见问题排查

5.1 连接数据库失败

症状:页面显示"Could not connect to the database" 解决方法:

  1. 确保已点击"Create/Reset Database"
  2. 检查容器内MySQL服务状态:
    docker exec dvwa service mysql status
    
  3. 手动重置数据库:
    docker exec dvwa mysql -uroot -p -e "DROP DATABASE dvwa; CREATE DATABASE dvwa;"
    

5.2 文件权限问题

症状:上传功能异常或报错 解决方法:

docker exec dvwa chown -R www-data:www-data /var/www/html

5.3 性能优化建议

当同时运行多个容器时:

  1. 限制CPU使用:
    docker update --cpus 1.5 dvwa
    
  2. 限制内存使用:
    docker update --memory 512M dvwa
    

6. 安全注意事项

  1. 不要暴露到公网 :DVWA本身存在漏洞,应在内网或隔离环境使用
  2. 定期更新镜像
    docker pull vulnerables/web-dvwa:latest
    docker stop dvwa
    docker rm dvwa
    docker run -d -p 80:80 --name dvwa vulnerables/web-dvwa
    
  3. 使用专用网络
    docker network create dvwa-net
    docker run -d --network dvwa-net --name dvwa vulnerables/web-dvwa
    

7. 扩展应用场景

7.1 集成到渗透测试环境

使用docker-compose部署包含DVWA的完整测试环境:

version: '3'
services:
  dvwa:
    image: vulnerables/web-dvwa
    ports:
      - "80:80"
    networks:
      - pentest-net
  kali:
    image: kalilinux/kali-rolling
    networks:
      - pentest-net
    tty: true

networks:
  pentest-net:
    driver: bridge

7.2 自定义漏洞模块开发

  1. 获取DVWA源码:
    docker cp dvwa:/var/www/html ./dvwa-code
    
  2. 开发新漏洞模块后重建镜像:
    FROM vulnerables/web-dvwa
    COPY ./my-module /var/www/html/vulnerabilities/custom/
    
  3. 构建并运行:
    docker build -t my-dvwa .
    docker run -d -p 80:80 --name custom-dvwa my-dvwa
    

我在实际使用中发现,将DVWA与Burp Suite配合使用时,建议在容器启动时添加 -e PHPIDS_ENABLE=false 参数,可以避免安全检测对渗透测试的干扰。另外,定期执行 docker system prune 可以清理不再使用的镜像和容器,节省磁盘空间。

更多推荐