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)
- json是一种数据格式
- JSON Web 令牌 - jwt.io
- jwt格式> > jwt由三部分组成:头部(Header)、载荷(Payload)、签名(Signature)
头部
- alg:是说明这个JWT的签名使用的算法的参数,常见值用HS256(默认),HS512等,也可以为None。HS256表示HMAC SHA256。 typ:说明这个token的类型为JWT
payload
实例演示
启动靶场
sudojava-jar webgoat-server-8.1.0.jar --server.port=8888--server.address=10.9.47.170
访问靶场地址注意大小写:10.9.47.170:8888/WebGoat
注册一个新的账号
然后我们找到JWT tokens
投票功能点,选择一个身份
当我们点击清空票数时显示只有admin用户可以清空所有票数
使用burp抓取数据包
使用jwt进行解码
将头部内容修改为none进行base64加密
载荷的admin修改为true也进行base64加密
因为经过修改所以签名已经无法使用,只需要复制头部和payload(payload后面的点不要忘记复制)
先将burp抓到的数据包发送到repeater模块,然后将内容覆盖
这时查看响应包可以看到说我们成功完成了任务
回到网页可以看到投票被修改
购物功能点
这里官方给我们提供了一个日志
我们可以看一下日志内容,这串值就是jwt
将内容复制到jwt
我们可以修改exp的到期时间,接下来先看一下时间戳
我们要修改有效期到当前时间之后(根据你当前时间为准)
修改载荷内的exp然后进行base64加密
同时头部也需要修改为none
最后将新的头部和payload组合
使用burp进行抓包然后将数据发送到repeater
将伪造好的jwt复制到Authorizatio
发送数据包这时显示我们成功通过
版权归原作者 Z99.Rabbit 所有, 如有侵权,请联系我们删除。