JWT利用在ctfhub-easy_login拿到flag

目录

什么是JWT?

jwt由三个部分组成:header.payload.signature

header部分:

payload部分:声明

signature部分:

JWT验证过程:

ctfhub-easy_login

目的:拿到flag

过程分析以及实操:

 我们的flag为:


什么是JWT?

JWT的全称是Json Web Token。将用户信息加密到token里,服务器不保存任何用户信息,只保存密钥信息,通过使用特定加密算法验证token;服务器通过密钥验证token的正确性,判断是否通过验证。jwt 之前,使用 session 来做用户认证,session需要服务器执行查询操作。

jwt由三个部分组成:header.payload.signature

令牌采用 base64-url 编码,由三部分组成。header.payload.signature 每一部分由.进行链接而成,如下所示:

根据算法,签名将被添加到令牌中。这样,您可以验证某人没有修改令牌(对令牌的一次更改将使签名无效)。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

header部分:

{
       "alg" : "HS256",
       "typ" : "jwt"
}

payload部分:声明

{

    "user_role" : "finn",    //当前登录用户

    "iss": "admin",          //该JWT的签发者

    "iat": 1573440582,        //签发时间

    "exp": 1573940267,        //过期时间

    "nbf": 1573440582,         //该时间之前不接收处理该Token

    "domain": "example.com",   //面向的用户

    "jti": "dff4214121e83057655e10bd9751d657"   //Token唯一标识

}

signature部分:

signature的功能是保护token完整性。 生成方法为将header和payload两个部分联结起来,然后通过header部分指定的算法,计算出签名。

JWT验证过程:

 

1、用户访问网站,输入帐号密码登入

2、服务器校验通过后,生成JWT,不保存JWT,直接返回给客户端

3、客户端将JWT存入cookie或者localStorage

4、此后用户发起的请求,都将使用js从cookie或者localStorage读取JWT放在http请求的header中,发给服务端

5、服务端获取header中的JWT,用base64URL算法解码各部分内容,并在服务端用同样的秘钥和算法生成signature,与传过来的signature对比,验证JWT是否合法。

ctfhub-easy_login

目的:拿到flag

过程分析以及实操:

1、首先注册一个新用户(注册的时候可以使用bp抓包,查看数据包的内容,我们是否可以进行利用)

2、拿着我们注册的帐号密码进行登录(这里必须使用bp工具进行抓包,在数据包发现了JWT的相应内容)

 使用JWT平台    JSON Web Tokens - jwt.io

3、我们的目的是拿到flag,登录成功后尝试拿flag(你以为就这么简单?当然不是,在getglag时候,提示我们的权限不够,也就是说,我们的权限很低,猜想应该是管理员权限,这里我尝试用admin 和 root试了下,不过第一次使用admin账户就成功了)

4、根据分析目标也就明确了,那就是将用户名ssss修改为admin,但是我们又没有signature签名(密匙),修改后肯定也不会成功啊,有没有什么手段,不需要拿到这个signature,就可以完成。

 那就是修改我们的header部分和payload部分;

使用编码工具,base64编码格式

修改原因是这里代表是一种加密算法,我们将算法修改为none;

 红色标记的内容是,使用第几个 signature 签名,我们将它也修改为空;

 修改后的令牌:(每个人的肯定不一样)

ewogICJhbGciOiAibm9uZSIsCiAgInR5cCI6ICJKV1QiCn0.ewogICJzZWNyZXRpZCI6IFtdLAogICJ1c2VybmFtZSI6ICJhZG1pbiIsCiAgInBhc3N3b3JkIjogInNzc3MiLAogICJpYXQiOiAxNjc3OTg2OTUxCn0.

 进行重新登录提交:(抓包少不了),

修改的内容

 然后放包,这里就是以admin的身份到达服务端的,也就是说我们此时的权限为admin

点击getflag 抓包查看

 我们的flag为:

{"flag":"ctfhub{327725b85023e9ff368d8036}\n"}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值