JWT 安全 JWT-WebGoat靶场

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的身份验证

  1. 无状态、可扩展
  2. 支持移动设备
  3. 跨程序调用
  4. 安全

jwt(json web token)

jwt用来验证客户端身份,

json是一种数据格式,json用来处理不同数据之间的转换,一种中间的语言格式

jwt就是使用json格式的token,优点一目了然jwt存在相当于cookie的字段![](https://img-
blog.csdnimg.cn/direct/9e55a42ce2854f2d96a8a707f1ada474.png)

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的常用字段![](https://img-
blog.csdnimg.cn/direct/85880bcd047b4a838414ed5937e2ea0f.png)

3.修改exp有效时间和爆破密钥 ,第五关

WebGoat靶场

kali使用jar包文件![](https://img-
blog.csdnimg.cn/direct/7e7a21105ac04542a49f27d042c66364.png)

启动靶场

sudo java -jar jar包的名字 --server.port=8888 --server.address=kali ip

访问页面

ip:port/WebGoat

注册用户

靶场位置![](https://img-
blog.csdnimg.cn/direct/cdbc114fb1594530a50b030b2226a4f2.png)

工具网站:

JWT官方解码网站

第四关

tom现有票数![](https://img-
blog.csdnimg.cn/direct/0831ddc59ee347d5b7ab9f905be7e38f.png)

重置票数,发现没有权限 ![](https://img-
blog.csdnimg.cn/direct/e48c8c3f03f94c85bd312e4c0bd11794.png)

抓包

网站解码 ![](https://img-
blog.csdnimg.cn/direct/ae6fd60169154ff5ab89ca71c38ee967.png)

修改头部算法为none,admin为true,成功 ![](https://img-
blog.csdnimg.cn/direct/eb97decdc289417f9d55296d35b120c2.png)

第五关

提示

爆破命令

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内存,如果还有问题可以重启靶场![](https://img-
blog.csdnimg.cn/direct/667dde92ec3149bb91fa3790fe54e7ad.png)

修改exp为有效时间,在解码网站输入爆破出来的密钥![](https://img-
blog.csdnimg.cn/direct/4ea088edcad548f289a978beb8453ead.png)

将JWT放到 ![](https://img-
blog.csdnimg.cn/direct/d56773e72b3b4a15afa339c443cd202e.png)

第七关

要求以tom身份结账![](https://img-
blog.csdnimg.cn/direct/9ee673d5a6894cfb8eb4028a5eca9dfd.png)
点击提示![](https://img-
blog.csdnimg.cn/direct/eb6e5630e02a4d81b313de979f675ed1.png)
发现JWT![](https://img-
blog.csdnimg.cn/direct/20dab69d66e444139f1aae0a7efff26e.png)
网站解码![](https://img-
blog.csdnimg.cn/direct/34ff0da9da9a4777a1c1c37789d615e4.png)
修改HS512为none,修改时间戳为实时时间以后的时间 ![](https://img-
blog.csdnimg.cn/direct/32a45f0d91a1406aa5628f4a3f19a8fa.png)复制前两部分,不要签名,签名已经失效,放到bp中,成功![](https://img-
blog.csdnimg.cn/direct/f5125cdbde444e10bac244e6b7ff9cf8.png)

学习计划安排


我一共划分了六个阶段,但并不是说你得学完全部才能上手工作,对于一些初级岗位,学到第三四个阶段就足矣~

这里我整合并且整理成了一份【282G】的网络安全从零基础入门到进阶资料包,需要的小伙伴可以扫描下方CSDN官方合作二维码免费领取哦,无偿分享!!!

如果你对网络安全入门感兴趣,那么你需要的话可以

点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

①网络安全学习路线
②上百份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥HW护网行动经验总结
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析

  • 35
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值