Nacos未授权访问
靶机地址: 192.168.142.112
知识点
Jwt(json web token): 定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任。
当用户通过服务端的校验之后,服务端会根据用户的用户名和密码去查用户的信息,例如:用户id、用户手机号等,再通过jwt的方式生成一个token,token中包含用户的信息,下次用户的所有请求都会带着token到达服务端,服务端从token里解析出来用户的信息,基于这些信息,认证用户成功登录后再执行之后的业务。
Jwt由Header头部、Payload负载、Signature签名组成,它们之间用圆点(.)连接。
使用https://jwt.io/可以对jwt信息进行解码
Nacos访问认证绕过:
cat nacos/conf/application.properties|grep “key”在application.properties文件中查找key
该key值固定,在nacos使用jwt构造认证token,使用HS256算法,把配置文件中nacos.core.auth.plugin.nacos.token.secret.key的默认值当作私钥生成Signature,将用户名和时间戳写到jwt token里,所以可以在登录时对accessToken进行伪造,从而实现访问认证绕过
复现
搭建好本地靶场,访问http://192.168.142.112:8848/nacos/#/login登录界面(8848为nacos服务默认端口)
使用用户名nacos、密码nacos进行登录,使用burp获取数据包,成功登录后会返回Authorization,accessToken作为用户登录凭证
复制保存Authorization:Bearer
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY5NDYxNzAzNX0.g8rgWYSiZgwhMgfyLHqLl4EUdipye9hAwHrWocJqsjA
退出nacos登录,使用任意账户密码试图登录,抓包修改数据
在数据包加上Authorization后,点击转发,成功登录,且为超级管理员权限
修复方式
-
修改配置文件中的nacos.core.auth.plugin.nacos.token.secret.key默认值
-
升级nacos到最新版