MASTG-Hacking-Playground 后端篇:Rails API 硬编码 JWT 密钥 12341234 的破解全过程

📅 2026/8/21 15:32:39
MASTG-Hacking-Playground 后端篇:Rails API 硬编码 JWT 密钥 12341234 的破解全过程
MASTG-Hacking-Playground 后端篇Rails API 硬编码 JWT 密钥 12341234 的破解全过程【免费下载链接】MASTG-Hacking-Playground项目地址: https://gitcode.com/gh_mirrors/ma/MASTG-Hacking-Playground想要彻底搞懂JWT 密钥破解的原理今天就带你把 MASTG-Hacking-Playground 这个移动安全测试靶场里的 Rails API 后端翻个底朝天。这个项目专为安全测试者设计后端藏着一个硬编码 JWT 密钥的真实漏洞KEY 12341234。我们将完整走一遍从发现密钥、伪造 token 到接管用户数据的Rails API 安全测试全过程零基础也能看懂什么是 MASTG-Hacking-PlaygroundMASTG-Hacking-Playground 是 OWASP Mobile Security Testing GuideMASTG配套的漏洞靶场用来练习移动应用安全测试技能。项目结构清晰Android/存在多种漏洞的 Kotlin 与 Java 应用iOS/带 JWT 与密钥链问题的 Swift 应用️Serverside/本次的主角——一个基于 Rails 5.1.4 的 Todo REST API后端 API 提供注册、登录、Todo 列表增删改查功能采用JWT 无状态认证非常适合用来练习API 认证绕过。第一步找到硬编码 JWT 密钥的源头要破解 JWT先要定位密钥在哪。在源码里搜索 JWT 相关逻辑很快就能发现关键文件Serverside/rails-api-original/app/lib/json_web_token.rb其中写着#HMAC_SECRET Rails.application.secrets.secret_key_base KEY 12341234问题一目了然开发者原本打算从secrets.yml读取安全的随机密钥secret_key_base却改成了注释直接写死了一个只有 8 位的弱密钥12341234。这就是典型的硬编码密钥漏洞。同时config/secrets.yml里明明有 64 位随机secret_key_base却被完全无视——安全机制形同虚设。第二步理解这套 Rails API 的 JWT 认证流程先弄懂认证逻辑才知道从哪下手。整套流程如下登录/注册POST /auth/login或POST /signup签发令牌AuthenticateUser验证密码后调用JsonWebToken.encode用密钥生成 token访问保护资源客户端在请求头带Authorization: Bearer token校验令牌AuthorizeApiRequest调用JsonWebToken.decode验签通过后返回用户对象相关代码文件Serverside/rails-api-original/app/controllers/authentication_controller.rb登录入口Serverside/rails-api-original/app/auth/authenticate_user.rb账号密码校验Serverside/rails-api-original/app/auth/authorize_api_request.rbtoken 解析与校验Serverside/rails-api-original/app/controllers/application_controller.rb全局授权钩子攻击面就在JsonWebToken.encode/decode——既然密钥已知我们就能自己铸造任何合法 token。第三步注册账号并拿到合法 Token先在本地把 API 跑起来Docker 或bundle install rails db:migrate均可然后注册一个新用户POST /signup 参数: nametestuser, emailtestexample.com, passwordfoobar返回结果里就带了一个auth_token形如eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo2LCJleHAiOjE1MTI1Mzk5MzF9.2BF5UVKk_FvfZtUQ4E2sT7uWqMCDhAqMRvFnqsqJ4PQ这个 token 由三段组成Header、Payload、Signature用.分隔。Header 说明算法是HS256Payload 里是user_id和过期时间exp签名则由密钥12341234计算而来。第四步伪造 JWT Token 接管任意用户现在进入核心环节——伪造 JWT token。既然密钥已知我们完全可以绕过登录直接冒充任意用户。先看看 Payload 里都有什么字段。伪造的思路是把user_id改成目标用户的 ID比如管理员的user_id: 1再用密钥12341234重新签名。用 Python 几行代码就能搞定import jwt, time payload {user_id: 1, email: adminexample.com, exp: int(time.time()) 86400} token jwt.encode(payload, 12341234, algorithmHS256) print(token)关键点在于服务端decode时只用同一个密钥验证签名不校验签发方所以任何人拿到密钥都能铸造出官方token。第五步用伪造 Token 调用受保护 API带着伪造的 token 去访问受保护接口例如GET /todos Authorization: Bearer 伪造的token正常情况下TodosController会返回当前用户的待办清单current_user.todos由于我们伪造的是user_id: 1服务端会直接返回该用户的数据——身份冒充成功更进一步还能对/todos、/todos/:id/items做任意增删改查实现完整的越权操作。这就是 JWT 密钥泄露带来的致命后果。第六步修复硬编码密钥的正确姿势问题找到了修复方案也很明确给新手三个建议密钥放入环境变量用ENV[SECRET_KEY_BASE]替代硬编码字符串部署时单独配置恢复使用 Rails secrets取消注释HMAC_SECRET Rails.application.secrets.secret_key_base让系统读取随机密钥定期轮换与最小化权限密钥定期更换且不要把弱密码、默认值带进生产环境修复后的校验逻辑应当类似HMAC_SECRET Rails.application.secrets.secret_key_base JWT.encode(payload, HMAC_SECRET) JWT.decode(token, HMAC_SECRET)这样攻击者无法预测密钥伪造 token 的难度将呈指数级上升。写在最后MASTG 靶场的意义通过本次对 MASTG-Hacking-Playground 后端 Rails API 的破解实战你应该掌握了三条核心知识✅ 如何通过源码审计发现硬编码 JWT 密钥✅ 如何利用已知密钥伪造 JWT token 绕过认证✅ 如何在真实项目中修复此类API 认证漏洞JWT 密钥破解是移动安全测试的高频考点也是 CVSS 高危漏洞的常见成因。建议你亲自 clone 这个靶场仓库地址https://gitcode.com/gh_mirrors/ma/MASTG-Hacking-Playground按照本文步骤实操一遍再对照Serverside/rails-api-original/目录下的源码逐行复盘。安全测试动手比看十遍更有效【免费下载链接】MASTG-Hacking-Playground项目地址: https://gitcode.com/gh_mirrors/ma/MASTG-Hacking-Playground创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考