【渗透测试】JWT令牌漏洞攻击

1.JWT是什么

JSON Web Token(JWT),是一种用户身份凭证,常用作身份验证、会话处理和访问控制机制。

2.JWT结构

标头.有效载荷.签名

header.payload.signature

header
{
    "alg": "HS256",
    "typ": "JWT"
}

alg属性表示签名使用的算法,typ表示令牌的类型。

payload
iss (issuer):签发人/发行人
sub (subject):主题
aud (audience):用户
exp (expiration time):过期时间
nbf (Not Before):生效时间,在此之前是无效的
iat (Issued At):签发时间
jti (JWT ID):用于标识该 JWT
Signature

使用header指定的算法对header.payload字符串进行加盐secret组合加密,得到的哈希签名就是signature。服务器验证JWT的正确性只要将JWT的前两个部分同服务器存储的secret进行加密,将计算出的签名值与JWT第三段进行比较,相同则认证通过。

除了使用secret(HMAC算法)还可以使用“RSA或ECDSA的公用/私有key pair密钥对”对JWT进行签名。

JWT认证流程:

用户登录经服务器认证后,客户端会获取一个JWT令牌,每当访问服务器资源时,携带此资源,服务器便能对其授权。

Burp正则表达式匹配

eyJ[A-Za-z0-9_-]*\.[A-Za-z0-9._-]*

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SiAN8poq-1685971924915)(D:\System\Documents\TyporaFiles\Notes\image-20230603231833237.png)]

JWT攻击案例

jwt解码网站

https://jwt.io/

jwt攻击利用工具

https://github.com/ticarpi/jwt_tool

Hashcat下载地址

https://hashcat.net/hashcat/

JWT字典下载地址

https://github.com/wallarm/jwt-secrets
服务器未验证JWT签名

访问该页面提示不是管理员权限
在这里插入图片描述

使用jwt_tool,将sub改为administrator

在这里插入图片描述

替换原有的JWT,再次访问发现,以管理员权限访问成功。

在这里插入图片描述

空签名绕过JWT身份认证

将原有JWT的header的algx属性修改为“none”,payload的sub属性修改为administrator,并删除signature

在这里插入图片描述

替换原有的JWT,再次访问发现,以管理员权限访问成功。

在这里插入图片描述

弱签名密钥爆破绕过JWT身份认证
hashcat -a 0 -m 16500 <jwt> <wordlist>

获取密钥:secret1

在这里插入图片描述

使用密钥生成新的JWT

在这里插入图片描述

替换原有的JWT,再次访问发现,以管理员权限访问成功。
在这里插入图片描述

JWK 公钥注入-伪造密钥(CVE-2018-0114)

JWK 是header里的一个参数,用于指出密钥,存在被伪造的风险。 攻击者可以通过以下方法来伪造JWT:删除原始签名,向标头添加新的公钥,然后使用与该公钥关联的私钥进行签名。

首先,利用Burp插件生成一个新的RSA KEY

在这里插入图片描述

先首先payload的sub为administrator,再点击攻击,设置Embedded JWK。

在这里插入图片描述

替换原有的JWT,再次访问发现,以管理员权限访问成功。

在这里插入图片描述

除此之外,JWT还具有以下安全漏洞问题:

控制JKU参数
操纵X5U,X5C URL
KID 参数可被控制

KIDjwt header中的一个可选参数,全称是key ID,它用于指定加密算法的密钥,因为该参数可以由用户输入,所以也可能造成一些安全问题。格式如下:

{
  "typ": "JWT",
  "kid": "webgoat_key",
  "alg": "HS256"
}

任意文件读取

{
  "typ": "JWT",
  "kid": "/etc/passwd",
  "alg": "HS256"
}

SQL注入

命令注入

KID参数直接传到不安全的文件读取操作可能会让一些命令注入代码流中,攻击者只需在输入的KID文件名后面添加命令,即可执行系统命令:

{
  "typ": "JWT",
  "kid": "/path/to/key_file|whoami",
  "alg": "HS256"
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello_Brian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值