基于 Docker 搭建 DVWA + ModSecurity Web 安全实验环境
基于 Docker 搭建 DVWA ModSecurity Web 安全实验环境一、项目简介本项目基于 Docker 构建 DVWADamn Vulnerable Web Application漏洞实验环境通过 SQL Injection 漏洞复现结合 Apache access.log、Docker logs 与 Dozzle 日志监控实现对攻击行为的实时观察与分析。在此基础上进一步接入 ModSecurity OWASP CRSCore Rule Set构建 Web Application FirewallWAF防护环境实现漏洞复现日志追踪攻击链分析WAF 拦截检测整个实验环境适合 Web 安全、渗透测试、安全运维方向初学者学习。二、实验环境组件内容操作系统Windows 11容器平台Docker DesktopWeb 靶场DVWAWeb 服务Apache日志监控DozzleWAFModSecurity OWASP CRSDVWA 端口9090WAF 代理端口9198三、DVWA Docker 部署1. 拉取 DVWA 镜像dockerpull vulnerables/web-dvwa2. 启动 DVWAdockerrun-d--namedvwa-p9090:80 vulnerables/web-dvwa3. 访问地址http://localhost:9090默认账号密码admin / password4. 页面截图DVWA 登录页DVWA 首页四、Dozzle 容器日志监控1. 启动 Dozzledockerrun-d--namedozzle-p9999:8080 amir20/dozzle2. 访问地址http://localhost:99993. Dozzle 的作用Dozzle 可以实时查看 Docker 容器日志。在本实验中主要用于观察 Apache access.log分析 HTTP 请求观察 SQL Injection payload实时监控攻击行为4. Dozzle 页面截图容器列表DVWA 日志页面五、SQL Injection 漏洞复现DVWA Security Level 设置为Low进入DVWA → SQL Injection1. 正常请求输入id1页面正常返回用户信息。页面回显access.log 日志GET /vulnerabilities/sqli/?id1SubmitSubmit HTTP/1.1日志截图这是一条正常 HTTP 请求。2. SQL 注入测试输入 payload or 11由于 DVWA low 难度没有过滤用户输入参数被直接拼接进入 SQL 查询导致 SQL 逻辑被修改从而成功获取全部数据。注入成功页面access.log 日志GET /vulnerabilities/sqli/?id%27or%271%27%3D%271SubmitSubmit HTTP/1.1日志截图其中%27是单引号的 URL 编码。可以明显看到or等 SQL Injection 特征。六、Apache 日志分析通过 Dozzle 可以直接观察 Apache access.log。日志中常见字段包括客户端 IP请求路径请求参数HTTP 状态码来源页面User-Agent示例日志172.17.0.1 - - [21/May/2026:09:40:09 0000] GET /vulnerabilities/sqli/?id%27or%271%27%3D%271SubmitSubmit HTTP/1.1 200 1853日志分析172.17.0.1为 Docker bridge 网络地址200表示请求成功请求参数中包含 SQL Injection payload攻击行为可通过日志完整还原七、接入 ModSecurity WAF为了模拟真实 Web 防护环境本项目进一步引入ModSecurityOWASP CRSCore Rule Set形成如下结构Browser ↓ ModSecurity WAF ↓ DVWA八、配置 Reverse ProxyModSecurity 容器通过 Nginx reverse proxy 转发流量。关键配置proxy_pass http://host.docker.internal:9090/;浏览器访问http://localhost:9198请求会先经过ModSecurity → OWASP CRS 规则检测然后再进入 DVWA。九、WAF 攻击检测实验再次发送 SQL Injection payload or 11请求首先进入ModSecurity WAFWAF 会根据 OWASP CRS 规则进行检测。可能出现的结果请求被拦截403 Forbidden请求被放行日志中出现规则命中记录ModSecurity 日志命中WAF 拦截日志十、日志链路分析本实验存在两条访问链路。1. 原始漏洞环境Browser ↓ DVWA (9090)日志主要记录在dvwa容器中。2. WAF 防护环境Browser ↓ ModSecurity (9198) ↓ DVWA (9090)请求会同时出现在ModSecurity 容器DVWA 容器中。十一、ModSecurity 检测原理分析本实验中ModSecurity 使用 OWASP CRSCore Rule Set规则集对 HTTP 请求进行检测。当浏览器发送请求时Browser ↓ Nginx Reverse Proxy ↓ ModSecurity ↓ OWASP CRS Rules ↓ DVWAModSecurity 会对URL 参数HeaderCookiePOST 数据User-Agent等 HTTP 内容进行规则匹配。SQL Injection 检测示例实验中的 payload or 11进入 HTTP 请求后?id or 11ModSecurity 会检测单引号SQL 逻辑关键字or条件恒成立表达式SQL 特征组合OWASP CRS 中包含大量 SQL Injection 检测规则。当请求命中特征后记录日志增加风险评分达到阈值后进行拦截因此会出现403 Forbidden或者规则命中日志。ModSecurity 的本质ModSecurity 本质上是基于规则匹配的 Web Application Firewall它并不理解 SQL 语义而是检测危险特征分析请求行为匹配攻击模式从而识别 Web 攻击。OWASP CRS 的作用OWASP CRSCore Rule Set是公开的 Web 攻击检测规则集。可用于检测SQL InjectionXSS文件包含命令执行路径穿越恶意 User-Agent等常见 Web 攻击行为。本实验中的意义本实验不仅完成了漏洞复现还实现了攻击 → 日志 → WAF检测 → 攻击拦截的完整攻击链观察。相比单纯打靶场更接近真实 Web 安全环境。十二、后续计划后续计划继续扩展BurpSuite 抓包分析sqlmap 自动化注入ModSecurity 规则分析WAF bypass 实验