赞
踩
什么是JWT:
JSON 网络令牌 (JWT) 是一种标准化格式,用于在系统之间发送加密签名的 JSON 数据。它们理论上可以包含任何类型的数据,但最常用于发送有关用户的信息(“声明”),作为身份验证、会话处理和访问控制机制的一部分。
与经典会话令牌不同,服务器需要的所有数据都存储在 JWT 本身的客户端。这使得 JWT 成为高度分布式网站的热门选择,用户需要与多个后端服务器无缝交互。
简单理解JWT的本质就是:把用户信息通过加密后生成的一个字符串。
JWT的数据结构:
JWT认证流程:
当客户端提交POST表单后,在后端验证完成时会生成一个JWT,接下来服务端会返回JWT至客户端,在随后的请求中都会带上JWT,即可工作。
JWT特点分析:
JWT攻击影响:
JWT攻击影响通常很严重,如果攻击者能够创建自己的具有任意值的有效令牌,则他们能够提升自己的权限或冒充其他用户,从而完全控制该账户。
实验靶场:
本文采用Burp Suit官方靶场Postwigger进行漏洞靶场实验。
链接地址:All labs | Web Security Academy
LAB 1 未经验证的签名绕过 JWT 身份验证
1. 首先进入第一关实验靶场。
根据题目要求得知,需使用账号+密码:wiener : peter登录,后访问/admin页面,根据要求删除carlos用户即可通关。
2. 点击Access the lab开启靶场后,点击登录处,输入账号密码登录。
3. 登录成功后对次页面进行抓包请求,可发现红字JWT数据。
4. 对JWT经过工具进行解密,可知。
解密网站链接:JWT在线解码 - 开发工具箱
可见Payload中当前登录用户为wiener。
5. 根据题目提示第二步,使用Burp suit改包请求 /admin。
6. 由此可以使用工具将JWT数据中Payload的wiener修改成administrator后继续尝试请求。
7. 成功访问,点通过访问敏感链接 /admin/delele?username=colos 删除用户。
LAB 2 有缺陷的签名验证绕过 JWT 身份验证
1. 同lab 1 一样正常登入账户密码抓包,按照lab 1方法修改administrator账号访问 /admin 后发现,仍无法成功。
因为在Header中,设置alg的值可以选择签名方式,可以选择HS256,即HMAC和SHA256。在某种情况下可以设置为None,即不签名,但是一般都会过滤这种危险的设置。
2. 将header中的alg修改成none,payload中的sub修改成administrator,并删除第三段,保留到“ . ”结束。
3. 测试访问成功!
4. 通过请求 /admin/delete?username=carlos来删除用户carlos。
5. 账户删除成功,通过lab 2
LAB 3 弱签名密钥绕过 JWT 身份验证
1. 通过弱签名绕过JWT身份认证,虽然签名含密钥且为单向,但是如果使用的弱密钥,是可以用相应的工具来完成破解的。
2. 这里选用的是hashcat进行密钥破解,因为是单向破解,需要相关字典进行辅助。
Hashcat下载地址:https://hashcat.net/hashcat/
JWT字典下载地址:https://github.com/wallarm/jwt-secrets
3. Hashcat破解命令:hashcat -a 0 -m 16500 <jwt> <wordlist>
4. 破解成功,获取密钥:secret1
5. 打开网站JSON Web Tokens - jwt.io 将JWT放进去解密,并修改Payload为administrator,添加密钥secret1.
6. 将新生成得secrt1放入burp中访问得。
7. 删除用户。
8. 通过
LAB 4 JWK 标头注入绕过 JWT 身份验证
PS: 首先需通过Burp下载插件。
1. 实验室说明
2. 登录后点击My account通过Burp抓包获取令牌,并进入JSON WEB Token中操作令牌;图二中得JWS是JWT的另一种表现形式,两者结构相同。
3. 修改JWS标头,首先生成RSA私钥,然后将公钥保存在JWT的标头中,每次只需要验证公钥的安全性即可,这里利用自己构造的公钥可以直接修改Payload。
4. 生成完成后选择RSA秘钥,重新构造JWS 标头。
5. 利用生成后的JWT直接删除用户carlos即可。
6. 删除完成。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。