Skip to content

【功能建议】MCP 增加 JWT 爆破工具 jwt_crack / jwt_decode(附参考实现方案) #1676

Description

@hhhanxx

【功能建议】MCP 增加 JWT 爆破工具 jwt_crack / jwt_decode(附参考实现方案)

📝 问题描述

GUI 已有 JWT 爆破功能(弱密钥字典 config/jwt.txt,123,573 条),但 MCP 工具集(v3.4.2 tools/list 实测 10 个)未暴露该能力,自动化工作流无法编程调用。建议在 MCP server 中新增 2 个工具,对齐现有 pwd_crack / ak_verify 的参数风格。

Image

🕹 使用环境

  • 目标系统:Windows 10 / 无影版本:v3.4.2
  • 接入方式:MCP(http://127.0.0.1:8088/mcp),Agent 编程调用

💡 建议的 API 设计

工具 1:jwt_crack — JWT 弱密钥爆破 / 算法绕过检测

参数 类型 必填 说明
token string 完整 JWT(header.payload.signature)
dict string 字典路径,默认 config/jwt.txt;支持绝对路径覆盖
mode string auto(默认:爆破+算法绕过) / crack(仅爆破) / none(仅生成 alg:none 变体)
thread int 并发数,默认 10

工具 2:jwt_decode — JWT 解码与结构分析

参数 类型 必填 说明
token string 完整 JWT

📦 请求/响应示例

// 调用
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call",
  "params": { "name": "jwt_crack", "arguments": {
      "token": "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiYWRtaW4ifQ.xxxxx",
      "mode": "auto" } } }

// 成功命中
{ "cracked": true, "secret": "123456", "alg": "HS256",
  "tried": 78213, "total": 123573, "elapsed_ms": 96 }

// 未命中 → 返回 alg:none 变体列表供重放
{ "cracked": false, "tried": 123573, "total": 123573, "elapsed_ms": 112,
  "alg_none_variants": [ "eyJhbGciOiJub25lIn0.eyJ1c2VyIjoiYWRtaW4ifQ.", ... ] }

🔧 参考实现要点(Go)

// 1. 解析:标准库 + github.com/golang-jwt/jwt,解析失败直接返回错误
header, _ := jwt.ParseUnverified(token, jwt.MapClaims{})
alg := header.Header["alg"].(string)

// 2. 仅对 HMAC 系列爆破(RS*/ES* 无共享密钥不可爆破)
if !strings.HasPrefix(alg, "HS") {
    return result{cracked: false, reason: "alg=" + alg + " 非HMAC系列"}
}

// 3. 并发爆破:worker 池 + channel 分发字典条目
signedStr := strings.Join(strings.Split(token, ".")[:2], ".")
jobs := make(chan string)
for w := 0; w < thread; w++ {
    go func() {   // worker: hmac.Equal 校验签名
        for secret := range jobs {
            mac := hmac.New(sha256.New, []byte(secret))
            mac.Write([]byte(signedStr))
            if hmac.Equal(mac.Sum(nil), wantSig) { found <- secret }
        }
    }()
}

// 4. alg:none 检测:对 "none/None/NONE" × 空签名/保留原签名 生成变体
// 5. 结果 JSON 序列化返回(含 tried/total/elapsed_ms)

关键点

  • 字典逐行流式读取,避免全量载入内存
  • hmac.Equal 防时序侧信道
  • 12.3 万条 HMAC-SHA256 全量约 100ms 级(Go 并发),MCP 调用无超时压力
  • 爆破出的密钥不随结果回传完整 token,避免敏感信息落入日志

🧪 测试用例建议

用例 期望
弱密钥签名的 HS256 token cracked: true + 正确 secret
随机密钥签名(不在字典内) cracked: false + 全量尝试数
alg: none 篡改 token 回放 生成 ≥30 种变体
空签名 / 3 段缺失 token 返回明确错误,不 panic
超大 token(10KB payload) 正常解析,无内存异常

⚠️ 注意事项

  1. 字典保持与 GUI 共用 config/jwt.txt,支持用户自定义字典绝对路径
  2. 返回 JSON 保持 cracked/tried/total/elapsed_ms 字段稳定,便于 Agent 机读判定
  3. 若 MCP 短期不做,能否先开放 config/jwt.txt 的更新机制说明,便于外部工具同步

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions