点击蓝字 关注我们
免责声明
本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。
如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。
文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具、思路及技术,我方对于由此引起的法律后果概不负责。
添加星标不迷路
由于公众号推送规则改变,微信头条公众号信息会被折叠,为了避免错过公众号推送,请大家动动手指设置“星标”,设置之后就可以和从前一样收到推送啦
一、JWT介绍
JWT代表JSON Web Token,它是一种用于在网络应用之间传递信息的开放标准。JWT是一个基于JSON的安全令牌,用于在客户端和服务器之间进行身份验证和授权。
1.JWT原理
服务器收到请求,认证成功后,生成json格式的数据包,然后进行签名发送给客户端。
json格式如下:
{
name:"cc1aaac",
role:"administrtor",
time:"16151641121" # 认证到期时间
}
JWT由三个部分组成,它们通过点号分隔开来:
Header(头部):包含了令牌的类型和所使用的签名算法。
Payload(负载):包含了要传输的数据,例如用户的身份信息和其他元数据。
Signature(签名):使用指定的算法和密钥对头部和负载进行签名,以确保数据的完整性和验证令牌的来源。
header是一个json格式的数据,alg表示签名使用的算法,默认是HMAC SHA256(HS256),type表示token的类型为jwt。
payload中用来存放实际传输的数据,可以使用官方的字段,也可以自己定义,数据可是解密后也是json格式
signature:是对前俩部分的签名,防篡改。指定一个只有服务器才知道的密钥,使用header中的签名算法,签名后把三个部分拼成一个字符串,用点分隔,发送给客户端。
{
"alg":"HS256",
"type":"JWT"
}
JWT的工作流程通常如下:
1.用户使用凭据(如用户名和密码)向服务器进行身份验证。
2.服务器验证凭据并生成一个JWT。
3.服务器将JWT返回给客户端。
4.客户端将JWT存储在本地(通常是在浏览器的cookie或本地存储中)。
5.客户端在将来的请求中将JWT作为身份验证凭据发送给服务器。
6.服务器接收到请求后,解析JWT并验证签名以确保其完整性和来源。
7.如果JWT验证成功,服务器使用其中的信息执行相应的操作,如身份验证或授权。
8.服务器返回响应给客户端。
二、接受任意签名
https://portswigger.net/web-security/all-labs#jwt
原理:服务器不会验证它收到的任何 JWT 的签名
使用wiener : peter
登录
登陆后,拦截GET /my-account HTTP/1.1
请求
使用在线工具https://jwt.io/
或者JSON Web Tokens解码
访问/admin
页面,开启拦截后修改JWT,由于是不验证签名,将wiener
改为administrator
注意后面的请求包中,如果携带JWT的要全部修改,修改后即可看到可以删除用户
点击delete后,发现当前的JWT还是wiener用户,我们需要修改为administrator,将后面的请求全部进行修改
Congratulations, you solved the lab!可以看到已经破解
三、接受未签名的令牌
https://portswigger.net/web-security/jwt/lab-jwt-authentication-bypass-via-flawed-signature-verification
看到数据是以 eyJ 开头的,得知是JWT。
访问靶场登陆后发现存在JWT
将/my-account请求包发送到repeater,可以看到是wiener用户
在插件中将alg设置为None,然后删除签名,修改用户名为administrator
修改后重新发送请求,发现用户名为administrator
复制administrator的cookie,然后更新到浏览器中,刷新页面,即可登录administrator
然后访问/admin,删除账号即可过关
四、爆破密钥
https://portswigger.net/web-security/jwt/lab-jwt-authentication-bypass-via-weak-signing-key
登录后尝试前俩个方法无果,进行爆破密钥,最终爆破出密钥为secret1
方法1:
./jwtcrack eyJraWQiOiJkZGVhNTcyYy1hOTAzLTQyYzQtYTcxMi1hMWVhODNiZGQ1OTciLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwb3J0c3dpZ2dlciIsInN1YiI6IndpZW5lciIsImV4cCI6MTY3NjYyMDIyNX0.uo-P1yOr_sdOeF-kM3h5A3Ny2XB_wM9p5C6Lp0wf-U8
方法2:
.hashcat.exe -a 0 -m 16500 eyJraWQiOiI0ZjIyYWI0Zi0yMjM0LTRhZGItOTMxNC1kN2FlOWM2ZGI2ZTIiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwb3J0c3dpZ2dlciIsInN1YiI6IndpZW5lciIsImV4cCI6MTY2ODc2NTg5Nn0.qoqNn749sftmFnsmBO3GoGOUXk4oeTRs770lbpwDEIA C:UsersasukaDesktopjwt.secrets.list
方法3:
python ./jwt_tool.py eyJraWQiOiI0ZjIyYWI0Zi0yMjM0LTRhZGItOTMxNC1kN2FlOWM2ZGI2ZTIiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwb3J0c3dpZ2dlciIsInN1YiI6IndpZW5lciIsImV4cCI6MTY2ODc2NTg5Nn0.
qoqNn749sftmFnsmBO3GoGOUXk4oeTRs770lbpwDEIA -C -d /usr/share/SecLists-2022.2/Passwords/Common-Credentials/10k-most-common.txt
在JSON Web Tokens插件中修改sub,然后根据密钥重新生成一个签名,进行访问
访问后提示Duplicate header names are not allowed,说明头部重复了
删除第16行后发现成功登录administrator
最后将上面的cookie复制到浏览器进行替换,访问/admin后删除用户即可
欢迎关注SecHub网络安全社区,SecHub网络安全社区目前邀请式注册,邀请码获取见公众号菜单【邀请码】
#
企业简介
赛克艾威 - 专注政企安全服务
北京赛克艾威科技有限公司(简称:赛克艾威),成立于2016年9月,提供全面的安全解决方案和专业的技术服务,帮助客户保护数字资产和网络环境的安全。
安全评估|渗透测试|漏洞扫描|安全巡检
代码审计|钓鱼演练|应急响应|安全运维
重大时刻安保|企业安全培训
联系方式
电话|010-86460828
官网|http://www.secevery.com
关注我们
公众号:sechub安全
哔哩号:SecHub官方账号
原文始发于微信公众号(SecHub网络安全社区):Portswigger Burp学院JWT
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论