type
status
date
slug
summary
tags
category
icon
password
😀
前言: 在某一次ctf比赛中遇到了这个CVE漏洞,也算是比较常见的一个漏洞,网上也有许多学习分享。写下此篇文章,仅为学习笔记。 参考文章: https://blog.csdn.net/qq_45766062/article/details/121412607 https://blog.csdn.net/qq_70303095/article/details/134105948 https://ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html https://blog.csdn.net/weixin_53090346/article/details/134277438 https://www.secpulse.com/archives/193450.html

JWT攻击

敏感信息泄露

JWT保证的是数据传输过程中的完整性而不是机密性。
由于JWT的payload部分是明文传输(Base64Url编码),若payload中携带敏感信息,可以对payload部分进行Base64Url解码,读取payload携带的敏感信息。
提示:JWT 的头部和有效载荷这两部分的数据是以明文形式传输的,如果其中包含了敏感信息的话,就会发生敏感信息泄露。试着找出FLAG。格式为 flag{}
进入环境,发现登录框
notion image
notion image
随便试一下 123&123
返回
notion image
F12查看cookie,存在一个token
notion image
根据提示,对JWT进行解码,查看头部、有效载荷的信息
notion image
拼接起来
notion image
 

算法修改攻击

JWT中两个常用的加密算法:
HMAC(HS256):是一种对称加密算法,使用秘密密钥对每条消息进行签名和验证 RSA(RS256):是一种非对称加密算法,使用私钥加密明文,公钥解密密文。
HS256自始至终只有一个密钥,而RS256是有两个密钥的。 在通常情况下,HS256的密钥我们是不能取到的,RS256的密钥也是很难获得的,RS256的的公钥相对较容易获取,但无论是HS256加密还是RS256加密,都是无法实现伪造JWT的,但当我们修改RSA256算法为HS256算法时,后端代码会使用公钥作为密钥,然后用HS256算法验证签名,如果我们此时有公钥,那么此时我们就可与实现JWT的伪造。
提示:有些JWT库支持多种密码算法进行签名、验签。若目标使用非对称密码算法时,有时攻击者可以获取到公钥,此时可通过修改JWT头部的签名算法,将非对称密码算法改为对称密码算法,从而达到攻击者目的。
notion image
代码如下:
简单分析一下:
当以用户名为admin,密码不是$flag时,此时登录后JWT中payloadroleguest,而只有当roleadmin时才能够得到Flag,所以这里肯定是需要伪造JWT的,先以admin为用户名,随便输入密码登录一下
此时得到JWT,且下方给出了公钥
notion image
notion image
解一下,发现是RS256加密
notion image
尝试更改算法为HS256,以公钥作为密钥来进行签名和验证,因此我们构造一个伪造JWT的脚本,内容如下
notion image
验证一下
notion image
都没问题了,替换cookie token
可以bp抓包改,也可以直接f12 改cookie
但笔者改完发送没成功,似乎是cookie缺了一个值
没找到原因,有缘再见~
 
红日靶场(一)工具学习-Netdiscover篇