node js 前端JWT伪造登录

JWT

1、定义
      JSON Web Token(Json web令牌)是一种跨域验证身份的方案,JWT不加密传输的数据,但能够通过数字签名来验证数据未被篡改。
2、与传统的token认证方式的对比

      传统的token认证:用户登录后,服务端会返回一个token给客户端,客户端下次再访问时,携带token访问,服务端获取客户端token后与后端保存的token做校验。

      JWT的token认证:同样,用户登录后,服务端会返回一个token给客户端,下次再访问时,客户端同样需要携带token进行访问,但这次服务端没有保存上一次访问的token,这次服务端拿到用户的token后,会通过JWT特有的格式对用户进行身份验证,一般都是比对jwt的签名是不是用户,不是用户的JWT格式将登录不成功。

     最大的区别就是JWT的token不需要保存在服务端,在一定程度上可以减轻系统资源的占用。

3、JWT的原理与格式

原理:用户登录后,服务端用JWT返回一个token给用户这个token首先先生成一个json对象,json对象类似于如下:

{

"name":"xiaowang",

"age":"20岁"

}

生成的josn对象最终经过base64编码后成为一个jwt的token返回给用户

jwt 的token实际是由三部分组成,类似于如下:

·

这三部分分别是

头部(header),经过解码后类似于:

alg表示token签名时用到的算法、tye表示token的类型。

这里面放的一般就是用户数据的一些字段。

签名(signature)

用户的签名就在里面

上面即是JWT的一些格式和原理讲解,下面将是jwt伪造登录的讲解。

验证

jwt登录的同时也带来了一定的安全问题,以一个平台的靶场环境为例

进入它提供的靶场环境后发现是一个登录框,先注册一个账号,登录时用抓包工具抓取一下数据包

      从数据包最下面那行可以看出它是用JWT的token去进行验证,可以考虑是否存在登录伪造问题,复制一下数据包,然后把包放出去我们可以看到一个提示,提示flag就在里面,但当我们点击进去的时候发现没有权限查看,如下:

     此时想到开启靶场时提示有node js ,还提到它的登录界面,查阅相关资料后发现nodejs有一个重要的文件controllers/api.js,在网址后面加入该文件后,发现页面源码意思为让我们伪造admin用户登录,此时将我们刚刚抓取的登陆包的JWTtoken 提取出来修改为admin的token,并用base64加密,如下:

头部

alg的值修改为none,即后面可以不签名直接登录

声明

secretid的值为[],意思为后面签名的密钥为空,然后将username的值修改为admin进行伪造登录

签名部分的编码值不需添加,删除即可

       重新登录并抓取数据包并将数据包的token换成上面修改的token,username修改为admin,放包返回登录页面即可以admin身份进行伪造登录,且成功绕过用户签名并拿到该题的flag。

注意的是,人们看到token第一印象可能都是防CSRF想着破解token等,而且这种安全问题并不常见,首先数据包的格式要满足JWT的token格式才可以进行后续的测试,其次还要满足是nodejs开发,没拿到cms的情况下你可能还要去猜它的构造,在后续测试过程中也可能遇到waf产品拦截等问题,总之具体情况具体分析。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值