当服务端功能获取用户提供的 URL、解析 XML 实体或在缺少可靠验证的情况下信任 JWT 字段时,就可能形成攻击路径。本课程通过针对故意脆弱服务的终端练习,研究 SSRF、XXE 和 JWT 篡改。
你将从识别每种服务端行为开始,逐步验证其安全影响:访问内部服务、读取本地文件、修改令牌声明以及获取签名密钥。最终挑战会把 XXE 文件泄露与生成有效 HS256 管理员令牌串联起来,以访问受保护 API。
你将学到什么
- 识别 URL 获取参数,并验证请求确实由服务器发出。
- 使用替代 IP 表示绕过字面 localhost 过滤,访问内部管理服务。
- 通过 SSRF 查询模拟云元数据服务,并检查预置凭据数据。
- 确认 XML 解析和实体展开,再构造读取
/etc/passwd的外部实体。 - 提取 JWT、拆分三个组成部分,并解码 Base64Url 请求头与载荷声明。
- 针对错误接受
none算法的实验 API,伪造无签名管理员令牌。 - 将 XXE 泄露应用密钥与 Python 生成 HS256 签名结合,访问受保护 Flag。
本课程适合谁
这是一门中级课程,适合已理解基本请求构造、希望研究服务端组件内部信任边界的 Web 安全学习者,也适合准渗透测试人员、API 安全学习者,以及需要了解不安全 URL 获取、XML 解析器配置和 JWT 验证实例的开发人员。
前置要求: 熟悉 Linux 终端和 curl、HTTP 方法与请求头、基础 XML 和 JSON 语法、Shell 文本处理与 Base64 概念,并能够阅读简短 Python 脚本。
学习环境: Ubuntu 22.04 终端,包含本地 5000、8080 端口的脆弱应用、169.254.169.254:8000 上的模拟元数据服务,以及 Python jwt 库。第一次 SSRF 检查会让本地应用获取 example.com,后续利用目标均为实验预置服务。
常见问题
云元数据凭据是真实的吗?
不是。元数据端点及其 IAM 风格响应都是托管在实验 8000 端口上的模拟内容,用于展示请求路径和潜在影响,不会使用真实云账户。
XXE 实验会使用 Burp Suite 或图形化代理吗?
不会。你将在终端创建和编辑 XML 载荷文件,再用 curl 提交。该流程无需图形化拦截工具即可学习请求结构与解析器行为。
解码 JWT 等同于破解其加密吗?
不等同。实验中的 JWT 请求头和载荷采用可读取的 Base64Url 编码,并非由加密保护。安全性取决于正确的签名验证和签名密钥保护。
两种 JWT 攻击有什么区别?
引导实验利用服务器错误接受 alg: none,因此伪造令牌没有签名;最终挑战中的服务器正确要求 HS256,你需要先通过 XXE 泄露密钥,再生成真正带签名的管理员令牌。





