0


JWT攻击详解 --Burp suit官方靶场

什么是JWT:

      JSON 网络令牌 (JWT) 是一种标准化格式,用于在系统之间发送加密签名的 JSON 数据。它们理论上可以包含任何类型的数据,但最常用于发送有关用户的信息(“声明”),作为身份验证、会话处理和访问控制机制的一部分。
      与经典会话令牌不同,服务器需要的所有数据都存储在 JWT 本身的客户端。这使得 JWT 成为高度分布式网站的热门选择,用户需要与多个后端服务器无缝交互。

          简单理解JWT的本质就是:把用户信息通过加密后生成的一个字符串。

JWT的数据结构:

  1. HEADER:令牌头部,记录了整个令牌的类型和签名算法
  2. PAYLOAD:令牌负荷,记录了保存的主体信息,比如你要保存的用户信息就可以放到这里,可以减少数据库的访问。
  3. Signature【签名】:就是把header + payload + 密匙进行加密以后的密文数据。(传递数据的时候,header,payload也会进行加密,而签名就是在前面的加密基础之上再次进行加密)

JWT认证流程:

当客户端提交POST表单后,在后端验证完成时会生成一个JWT,接下来服务端会返回JWT至客户端,在随后的请求中都会带上JWT,即可工作。

JWT特点分析:

  1. JWT最大的缺点是服务器不会保存会话状态,所以在使用期间不可能取消令牌或更改令牌的权限,一旦JWT签发,在有效期内会一直生效。
  2. JWT不仅仅可用于认证,还可以用来信息交换,善用JWT有助于减少服务器请求数据库的次数。
  3. JWT本身包含 认证信息,因此一旦信息泄露,任何人都可以获得令牌的所有权限。

JWT攻击影响:

JWT攻击影响通常很严重,如果攻击者能够创建自己的具有任意值的有效令牌,则他们能够提升自己的权限或冒充其他用户,从而完全控制该账户。

实验靶场:

本文采用Burp Suit官方靶场Postwigger进行漏洞靶场实验。

链接地址:All labs | Web Security Academy

LAB 1 未经验证的签名绕过 JWT 身份验证

  1. 首先进入第一关实验靶场。

根据题目要求得知,需使用账号+密码:wiener : peter登录,后访问/admin页面,根据要求删除carlos用户即可通关。

  1. 点击Access the lab开启靶场后,点击登录处,输入账号密码登录。

  1. 登录成功后对次页面进行抓包请求,可发现红字JWT数据。

  1. 对JWT经过工具进行解密,可知。

解密网站链接:JWT在线解码 - 开发工具箱

           JSON Web Tokens - jwt.io

可见Payload中当前登录用户为wiener。

  1. 根据题目提示第二步,使用Burp suit改包请求 /admin。

  1. 由此可以使用工具将JWT数据中Payload的wiener修改成administrator后继续尝试请求。

  1. 成功访问,点通过访问敏感链接 /admin/delele?username=colos 删除用户。

LAB 2 有缺陷的签名验证绕过 JWT 身份验证

  1. 同lab 1 一样正常登入账户密码抓包,按照lab 1方法修改administrator账号访问 /admin 后发现,仍无法成功。

因为在Header中,设置alg的值可以选择签名方式,可以选择HS256,即HMAC和SHA256。在某种情况下可以设置为None,即不签名,但是一般都会过滤这种危险的设置。

  1. 将header中的alg修改成none,payload中的sub修改成administrator,并删除第三段,保留到“ . ”结束。

  1. 测试访问成功!

  1. 通过请求 /admin/delete?username=carlos来删除用户carlos。

  1. 账户删除成功,通过lab 2

LAB 3 弱签名密钥绕过 JWT 身份验证

  1. 通过弱签名绕过JWT身份认证,虽然签名含密钥且为单向,但是如果使用的弱密钥,是可以用相应的工具来完成破解的。

  2. 这里选用的是hashcat进行密钥破解,因为是单向破解,需要相关字典进行辅助。

Hashcat下载地址:https://hashcat.net/hashcat/

JWT字典下载地址:https://github.com/wallarm/jwt-secrets

  1. Hashcat破解命令:hashcat -a 0 -m 16500 <jwt> <wordlist>

  2. 破解成功,获取密钥:secret1

  1. 打开网站JSON Web Tokens - jwt.io 将JWT放进去解密,并修改Payload为administrator,添加密钥secret1.

  1. 将新生成得secrt1放入burp中访问得。

  1. 删除用户。

  1. 通过

LAB 4 JWK 标头注入绕过 JWT 身份验证

PS: 首先需通过Burp下载插件。

  1. 实验室说明

  1. 登录后点击My account通过Burp抓包获取令牌,并进入JSON WEB Token中操作令牌;图二中得JWS是JWT的另一种表现形式,两者结构相同。

  1. 修改JWS标头,首先生成RSA私钥,然后将公钥保存在JWT的标头中,每次只需要验证公钥的安全性即可,这里利用自己构造的公钥可以直接修改Payload。

  1. 生成完成后选择RSA秘钥,重新构造JWS 标头。

  1. 利用生成后的JWT直接删除用户carlos即可。

  1. 删除完成。

本文转载自: https://blog.csdn.net/m0_60742333/article/details/129732662
版权归原作者 Freekking 所有, 如有侵权,请联系我们删除。

“JWT攻击详解 --Burp suit官方靶场”的评论:

还没有评论