当前位置:   article > 正文

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

jwt渗透
1.JWT是什么

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

2.JWT结构

标头.有效载荷.签名

header.payload.signature

header
{
    "alg": "HS256",
    "typ": "JWT"
}
  • 1
  • 2
  • 3
  • 4

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

payload
iss (issuer):签发人/发行人
sub (subject):主题
aud (audience):用户
exp (expiration time):过期时间
nbf (Not Before):生效时间,在此之前是无效的
iat (Issued At):签发时间
jti (JWT ID):用于标识该 JWT
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
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._-]*
  • 1

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

JWT攻击案例

jwt解码网站

https://jwt.io/
  • 1

jwt攻击利用工具

https://github.com/ticarpi/jwt_tool
  • 1

Hashcat下载地址

https://hashcat.net/hashcat/
  • 1

JWT字典下载地址

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

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

使用jwt_tool,将sub改为administrator

在这里插入图片描述

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

在这里插入图片描述

空签名绕过JWT身份认证

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

在这里插入图片描述

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

在这里插入图片描述

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

获取密钥: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"
}
  • 1
  • 2
  • 3
  • 4
  • 5

任意文件读取

{
  "typ": "JWT",
  "kid": "/etc/passwd",
  "alg": "HS256"
}
  • 1
  • 2
  • 3
  • 4
  • 5

SQL注入

命令注入

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

{
  "typ": "JWT",
  "kid": "/path/to/key_file|whoami",
  "alg": "HS256"
}
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/1005688
推荐阅读
相关标签
  

闽ICP备14008679号