前言

由于本人的一个习惯,每次遇到漏洞并复现后都要编写poc,以便下一次的直接利用与复测使用。研究Nacos默认密钥和JWT的爱恨情仇的过程中遇到了莫名其妙的问题,在此做以记录,方便日后有大佬遇到相同的问题路过看到能够得以解决。

JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑且独立的方式,用于在各方之间以 JSON 对象的形式安全地传输信息。此信息可以验证和信任,因为它是经过数字签名的。JWT 可以使用密钥(使用 HMAC 算法)或使用 RSA 或 ECDSA 的公钥/私钥对进行签名。

尽管 JWT 可以加密以提供各方之间的保密性,但我们将专注于签名令牌。签名令牌可以验证其中包含的声明的完整性,而加密令牌则向其他方隐藏这些声明。当使用公钥/私钥对对令牌进行签名时,签名还证明只有持有私钥的一方才是签名的一方。

JWT由三部分组成,分别是:header、payload、signature,并且这三部分通过"."来连接,例子:xxxxx.yyyyy.zzzzz

1、header通常由两部分组成:类型以及使用签名算法,例子:

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

然后这部分将被base64url编码,形成JWT的第一部分。

2、payload作为JWT的第二部分,它包含了声明,声明是有关实体和其他数据的结合,有三种类型的声明:已注册、公共、私人。

  1. 已注册声明:这是一组预定义的声明,这些声明不是必需的,但建议使用,以提供一组有用的、可互操作的声明。其中一些是:iss(发行人),exp(到期时间),sub(主题),aud(受众)等。
  2. 公共声明:可以由使用 JWT 的人随意定义。但为了避免冲突,它们应该在 IANA JSON Web 令牌注册表中定义,或者定义为包含抗冲突命名空间的 URI。
  3. 专用声明:这是创建的自定义声明,用于在同意使用它们的各方之间共享信息,既不是注册声明也不是公共声明。

例子:

{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}

然后这部分也将被base64url编码,形成JWT的第二部分。

3、signature作为JWT的第三部分,也叫签名部分,要创建签名部分,您必须获取编码的标头、编码的有效负载、机密、标头中指定的算法并对其进行签名,例子:

HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)

签名用于验证消息在此过程中未被更改,并且在使用私钥签名的令牌的情况下,它还可以验证 JWT 的发件人是否是它所说的人。

将这三部分连在一起,就形成了JWT。

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4Nzc3NTY5NX0.Gyh5fwZavKvHp-Ooitu4iE_8tgYYYqngUb1c4jTEDKs

研究过程

在Nacos身份认证绕过漏洞复现文章中提到jwt.io网站,其中有一个secret base64 encoded的选项,百度一下得知勾选后,即认为密钥是base64编码,加密前会先对密钥进行base64解码。

使用python的base64模块库解码会报错,因为nacos提供的密钥不是4的倍数

随后我尝试了所有base64解码的在线网站都不行,于是就开始了手搓base64解码代码。

解码后

将解码后的字节串和指定header、payload进行JWT加密即可成功绕过身份认证

关于Nacos身份认证绕过漏洞默认密钥和JWT的研究的更多相关文章

  1. CVE-2020-17523:Apache Shiro身份认证绕过漏洞分析

    0x01 Apache Shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. 0x02 漏洞简介 2021年2月1日,Apache Shiro官 ...

  2. Shiro 身份认证绕过漏洞 CVE-2022-32532

    前言 Apache Shiro 是一个强大且易用的 Java 安全框架,通过它可以执行身份验证.授权.密码和会话管理.使用 Shiro 的易用 API,您可以快速.轻松地保护任何应用程序 -- 从最小 ...

  3. Vulhub-Mysql 身份认证绕过漏洞(CVE-2012-2122)

    前言 当连接MariaDB/MySQL时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即便是memcmp()返回一个非零值,也会使MySQL认为两个密码是相同的.也就是说只要知道用户名, ...

  4. AppWeb认证绕过漏洞(CVE-2018-8715)

    AppWeb认证绕过漏洞(CVE-2018-8715) 一.漏洞描述 Appweb简介 Appweb是一个嵌入式HTTP Web服务器,主要的设计思路是安全.这是直接集成到客户的应用和设备,便于开发和 ...

  5. CVE-2022-32532 Apache Shiro 身份认证绕过

    漏洞名称 CVE-2022-32532 Apache Shiro 身份认证绕过 利用条件 Apache Shiro < 1.9.1 漏洞原理 使用RegexRequestMatcher进行权限配 ...

  6. CVE-2017-5521: Bypassing Authentication on NETGEAR Routers(Netgear认证绕过漏洞)

    SpiderLabs昨天发布的漏洞, 用户访问路由器的web控制界面尝试身份验证,然后又取消身份验证,用户就会被重定向到一个页面暴露密码恢复的token.然后通过passwordrecovered.c ...

  7. Phpspy 2011继续身份验证绕过漏洞

    Author: Tm3yShell7 官方目前下载已经修补上了 目前官方下载是2011.php, 文件名为2011ok.php的是带洞版本. 今天m0r5和我说phpspy2011 我都不知道2011 ...

  8. AppWeb认证绕过漏洞(CVE-2018-8715)

    影响范围 Appweb 7.0.2及早期版本. 复现 构造头Authorization: Digest username=admin 返回包里包含session 发送POST请求,添加session到 ...

  9. Libssh认证绕过CVE-2018-10933漏洞复现

    0x00 漏洞描述 libssh 0.6 及以上的版本,在服务端的代码实现中存在身份认证绕过漏洞.在向服务端认证的流程中,攻击者通过将 SSH2_MSG_USERAUTH_REQUEST 消息替换为  ...

  10. 【问题解决】Nacos服务端NVDB-CNVDB-2023674205漏洞

    缘起 最近(2023.03.13)客户现场要求自检有无使用Nacos,原因是Nacos存在认证绕过高危漏洞,其漏洞代码NVDB-CNVDB-2023674205,本文就简单说一下这个事儿,以及如何解决 ...

随机推荐

  1. win7系统部署django项目

        win7系统部署django项目,在Windows电脑上我使用的是  Apache + mod_wsgi 来部署的   # 背景 Python 3.8.3 Django 3.1.7 Apach ...

  2. openGauss数据库扩容指导

    前置条件 当前集群状态正常 操作步骤 1.新节点创建用户和用户组,注意需要与当前集群的用户与用户组一致,密码也要保持一致.假设当前集群用户为 omm. 2.检查新节点环境变量,清理和 openGaus ...

  3. Cert Manager 申请SSL证书流程及相关概念-二

    中英文对照表 英文 英文 - K8S CRD 中文 备注 certificates Certificate 证书 certificates.cert-manager.io/v1 certificate ...

  4. HarmonyOS非线性容器特性及使用场景

      非线性容器实现能快速查找的数据结构,其底层通过hash或者红黑树实现,包括HashMap.HashSet.TreeMap.TreeSet.LightWeightMap.LightWeightSet ...

  5. Spring6

    0x00 环境配置 环境: IDEA >= 2022.1.4 JDK 17 Maven 3.8.6 Spring 6.0.0 JUnit 4.13.2 Log4j2 新建模块 spring001 ...

  6. CentOS 编译安装golang

    一.下载go wget https://studygolang.com/dl/golang/go1.16.4.linux-amd64.tar.gz 二.解压到指定目录 tar -xvf go1.16. ...

  7. CentOS编译安装Nginx1.5.2+PHP5.5.1+ MySQL 5.6.10

    CentOS编译安装Nginx1.5.2+PHP5.5.1+ MySQL 5.6.10 时间:2013-11-15 23:39 来源:blog.s135.com  作者:张宴的博客  举报  点击:1 ...

  8. sql 语句系列(行与列处理)[八百章之第一章]

    排序时对null进行处理 比如说: select * from EMP order by COMM 我需要对红框部分进行desc处理,也就是从大到小排列. 解析: 重点是如何让null独立出去. se ...

  9. Python Flask获取iOS的UDID

    测试iOS app时候,我们可以安装以下4种类型的包 : AdHoc                 -- 一般为正式环境验证AppStore             -- 上传AppStore,只有 ...

  10. vue登录3D效果

    实现的效果 登录动态效果很炫酷,话不多说直接上代码: 组件template <template> <div class="entrance"> <di ...