[Shell]Docker remote api未授权访问漏洞(Port=2375)
0x01 简介
该未授权访问漏洞是因为docker remote api可以执行docker命令,从官方文档可以看出,该接口是目的是取代docker 命令界面,通过url操作docker。
Docker remote Api未授权访问的攻击原理与之前的Redis未授权访问漏洞大同小异,都是通过向运行该应用的服务器写文件,从而拿到服务器的权限。
docker swarm是docker下的分布化应用的本地集群,在开放2375监听集群容器时,会调用这个api
当某个主机开放了2375端口时,就要注意了!

url输入ip:2375/version就会列出基本信息,和docker version命令效果一样。

同样,url为ip:2375/v1.23/containers/json会列出容器信息,和docker ps -a效果一样。
0x02 漏洞复现
通过docker客户端远程执行目标服务器容器命令:
1 列出所有镜像:
docker -H tcp://*.*.*.*:2375 images

2 列出所用容器
docker -H tcp://*.*.*.*:2375 ps -a

3 进入容器两种方法:
3.1 进入已有的容器
start 启动一个已经停止的容器
attach 连接一个已经停止的容器
当然这个容器默认entrypoint必须是/bin/bash,关于这点可以在json里看到,还有挂载,后面提权会用到,这个也可以在json文件里看到。

3.2 开启新容器
新运行一个容器并将entrypoint设置为/bin/bash,挂载点设置为服务器的根目录挂载至/mnt目录下

注意:
docker run只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start即可。
docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。
wooyun上lijiejie是因为docker client版本不一致调用api去create重构一个容器,并在attach、start后捕获到输出
0x03 服务器提权的几种方法
1 写入SSH公钥
启动一个容器,挂载宿主机的/root/目录,之后将攻击者的ssh公钥~/.ssh/id_rsa.pub的内容写到入宿主机的/root/.ssh/authorized_keys文件中,之后就可以用root账户直接登录了。
(1)本地获取ssh公钥

(2)将公钥复制到被攻击者的/root/.ssh/authorized_keys文件中

(3)ssh连接远程服务器

2 写入crontab反弹Shell
启动一个容器,挂载宿主机的/etc/目录,之后将反弹shell的脚本写入到/etc/crontab中,攻击机nc -vv -l -p Port会得到一个反弹的shell
攻击机上:

目标机上:

3 写入其他的cron中
也可以挂载var/spool/cron/目录,将反弹shell的脚本写入到/var/spool/cron/root(centos系统)或/var/spool/cron/crontabs/root(ubuntu系统)
0x04 安全隐患
也许有运维同学觉得这是因为监听在了外网,所以攻击者才有机会攻击,如果我不监听在外网就没有安全隐患了,其实监听在内网也有以下安全隐患:
(1)外网攻击者可以通过WEB应用的SSRF漏洞,间接地攻击内网中的这些未授权的Docker remote api服务;
(2)方便已经攻入内网的攻击者扩大攻击范围;
(3)可能会被内部别有用心的人攻击,然后窃取敏感数据。
0x05 安全加固
在不必需的情况下,不要启用docker的remote api服务,如果必须使用的话,可以采用如下的加固方式:
1 设置ACL,仅允许信任的来源IP连接;
2 设置TLS认证,官方的文档为Protect the Docker daemon socket
客户端与服务器端通讯的证书生成后,可以通过以下命令启动docker daemon:
docker -d --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H=tcp://10.10.10.10:2375 -H unix:///var/run/docker.sock
客户端连接时需要设置以下环境变量
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
0x06 参考链接
https://www.secpulse.com/archives/55928.html
https://www.cnblogs.com/itworks/p/7159477.html
[Shell]Docker remote api未授权访问漏洞(Port=2375)的更多相关文章
- 【转+自己研究】新姿势之Docker Remote API未授权访问漏洞分析和利用
0x00 概述 最近提交了一些关于 docker remote api 未授权访问导致代码泄露.获取服务器root权限的漏洞,造成的影响都比较严重,比如 新姿势之获取果壳全站代码和多台机器root权限 ...
- 关于docker remote api未授权访问漏洞的学习与研究
漏洞介绍: 该未授权访问漏洞是因为docker remote api可以执行docker命令,从官方文档可以看出,该接口是目的是取代docker 命令界面,通过url操作docker. docker ...
- docker搭建redis未授权访问漏洞环境
这是redis未授权访问漏洞环境,可以使用该环境练习重置/etc/passwd文件从而重置root密码 环境我已经搭好放在了docker hub 可以使用命令docker search ju5ton1 ...
- Docker环境复现利用Redis未授权访问漏洞 >> 批量扫描检测利用
关于Redis Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库 ...
- redis未授权访问漏洞那拿SHELL
一.什么是redis未授权访问漏洞: 1.redis是一种文档型数据库,快速高效,存储在内存中,定期才会写磁盘.主要用于快速缓存,数据转存处理等.默认redis开在6379端口,可以直接访问.并不需要 ...
- mongodb未授权访问漏洞
catalogue . mongodb安装 . 未授权访问漏洞 . 漏洞修复及加固 . 自动化检测点 1. mongodb安装 apt-get install mongodb 0x1: 创建数据库目录 ...
- Redis 未授权访问漏洞(附Python脚本)
0x01 环境搭建 #下载并安装 cd /tmp wget http://download.redis.io/releases/redis-2.8.17.tar.gz tar xzf redis-.t ...
- Rsync未授权访问漏洞的利用和防御
首先Rsync未授权访问利用 该漏洞最大的隐患在于写权限的开启,一旦开启了写权限,用户就可以,用户就可以利用该权限写马或者写一句话,从而拿到shell. 我们具体来看配置文件的网相关选项(/etc/r ...
- 10.Redis未授权访问漏洞复现与利用
一.漏洞简介以及危害: 1.什么是redis未授权访问漏洞: Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等 ...
随机推荐
- 纯 CSS 画 iphone
好几天没有更新了,直接上效果吧,哈哈!(我想这个应该大部分都会!哈哈哈!) 代码如下: html: <div class="container"> <div cl ...
- 分享一个vue项目“脚手架”项目的实现步骤
搭建缘由 源于公司每次新启动一个由多人协同开发的项目都由负责人初始化项目之后,每个人再去从私服pull一下项目才开始开发.但是每次初始化工程都是一步步的造轮子,一个个依赖去安装,新建一个个不同功能的文 ...
- android RecyclerView的Linear布局案例
1.先创建 activity_recycle_view.xml 和 activity_recycler_linear_item.xml 如下: <?xml version="1.0&q ...
- SIM7600CE http post
SIM7600CE是一款SMT封装的模块,支持 LTE-TDD/LTE-FDD/HSPA+/TD-SCDMA/EVDO和GSM/GPRS/EDGE等频段,支持LTE CAT4(下行速度为150Mbps ...
- AOP初识
AOP是Aspect Oriented Programing的简称,面向切面编程.AOP适合于那些具有横切逻辑的应用:如性能监测,访问控制,事务管理.缓存.对象池管理以及日志记录.AOP将这些分散在各 ...
- (在客户端)https抓包解密
(一)原理分析 https的数据包是用对称秘钥(https协议协商出来的随机数)加密后的密文. 对称秘钥在传输线路上是密文的(被非对称加密过),但是在client.server端是明文的(因为要用于加 ...
- git 放弃merge 回到上一次commit
用git reset --hard 放弃正在合并中merge,返回上一次的commit
- 限制mongoDB内存的方法
docker运行MongoDB,针对于docker容器来进行内存资源的限制 修改MongoDB的运行配置文件,并且重启mongodb storage: dbPath: /var/lib/mongodb ...
- Nginx 配置 HTTPS(多域名)
平常开发要求比较低, 依然在用 HTTP, 但到了微信小程序就不行了, 腾讯和苹果都对 API 提出了 HTTPS 的要求. 尤其是苹果, 不仅要求 HTTPS, 还要求 TLS 协议版本要在 1.2 ...
- p5.BTC-网络
Bitcoin工作在应用层,网络层是P2P . Bitcoin网络通信的设计原则是 simple robust ,but not efficient. 每个节点维护一个邻居节点的集合,消息传播采取 ...