cookie(放在浏览器)
cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。
cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的
session(放在服务器)
session 从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方肯定有某种特征(长相等)表明他就是张三。
session 也是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。至于客户端怎么保存这个“身份标识”,可以有很多种方式,对于浏览器客户端,大家都默认采用 cookie 的方式。
服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。
token
在Web领域基于Token的身份验证随处可见。在大多数使用Web API的互联网公司中,tokens 是多用户下处理认证的最佳方式。
以下几点特性会让你在程序中使用基于Token的身份验证
- 无状态、可扩展
- 支持移动设备
- 跨程序调用
- 安全
jwt(json web token)
jwt用来验证客户端身份,
json是一种数据格式,json用来处理不同数据之间的转换,一种中间的语言格式
jwt就是使用json格式的token,优点一目了然jwt存在相当于cookie的字段
JWT构成
JWT(JSON Web Token)由三部分组成:头部(Header)、载荷(Payload)、签名(Signature)。
头部(Header):
头部通常由两部分组成,算法类型和令牌类型。
算法类型:指定用于生成签名的算法,例如 HMAC、RSA 或者 ECDSA。
令牌类型:指定令牌的类型,常见的是 JWT。
头部使用 Base64Url 编码表示,并作为整个 JWT 的第一部分。头部的一个示例(json格式):
{
"alg": "HS256",none //alg中的HS256为加密算法类型
"typ": "JWT"
}
载荷(Payload):
载荷存储了有关用户或实体的声明和其他有关信息。
声明:如用户 ID、角色、权限等信息。
注册声明:包含一些标准的声明(比如发行人、过期时间等)和一些自定义的声明。
载荷也使用 Base64Url 编码表示,并作为整个 JWT 的第二部分。载荷的一个示例:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
签名(Signature):
用于验证JWT是否完整,真实有效,只有第一段第二段有效。
签名生成方式:将头部和载荷进行 Base64Url 编码后拼接在一起,然后使用指定的加密算法(如 HMAC、RSA)进行签名,将生成的签名添加到 JWT 中。
JWT渗透思路
1. 将头部中的HS256替换为none时,不校验签名,没有算法,签名没有意义,服务器不看签名,WebGoat第四关
{
"alg": "none",none //alg中的HS256为加密算法类型
"typ": "JWT"
}
2.修改算法为none,exp时间为有效时间,第七关
jwt payload的常用字段
3.修改exp有效时间和爆破密钥 ,第五关
WebGoat靶场
kali使用jar包文件
启动靶场
sudo java -jar jar包的名字 --server.port=8888 --server.address=kali ip
访问页面
ip:port/WebGoat
注册用户
靶场位置
工具网站:
JWT官方解码网站
第四关
tom现有票数
重置票数,发现没有权限
抓包
网站解码
修改头部算法为none,admin为true,成功
第五关
提示
爆破命令
hashcat -m 16500 jwt.txt -a 3 -w 2 1.txt --force
-m 16500 这里的16500对应的就是jwt的token爆破;
-a 3 代表蛮力破解
-w 3 可以理解为高速破解,就是会让桌面进程无响应的那种高速
jwt.txt 是我把题目要求破解的token保存到的文件
pass.txt 密码字典
爆破
可能会爆破不出来,需要kali虚拟机至少4g内存,如果还有问题可以重启靶场
修改exp为有效时间,在解码网站输入爆破出来的密钥
将JWT放到 文章来源:https://www.toymoban.com/news/detail-780361.html
第七关
要求以tom身份结账 点击提示 发现JWT 网站解码 修改HS512为none,修改时间戳为实时时间以后的时间 复制前两部分,不要签名,签名已经失效,放到bp中,成功文章来源地址https://www.toymoban.com/news/detail-780361.html
到了这里,关于JWT 安全 JWT-WebGoat靶场的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!