zoukankan      html  css  js  c++  java
  • Docker Remote API 未授权访问

    简介

    docker 在使用集群管理(如:Kubernetes,swarm)时,要使用remote api对节点进行管理。remote api无认证时的默认端口是2375(需要TLS认证默认登录是2376)。 remote api默认是可以不需要认证能直接访问,能直接对docker进行操作,如新建容器,删除容器,查看镜像容器信息等操作。

    remote api操作方法可以参考:docker官方文档

    检测方法

    检测docker remote api 未授权访问可以使用curl或者直接用浏览器访问

    http://ip:2375/info

    漏洞利用:

    通过docker client执行目标服务器容器命令。

    1、列出所有镜像

    2、列出所用容器

    3、进入容器两种方法:

    start 启动一个已经停止的容器 
    attach 连接一个已经停止的容器

    当然这个容器默认entrypoint必须是/bin/bash,关于这点可以在json里看到,还有挂载,后面提权会用到,这个也可以在json文件里看到。

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

    注意:

    • docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。
    • docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。

    wooyun上lijiejie是因为docker client版本不一致调用api去create重构一个容器,并在attach、start后捕获到输出

    4、服务器提权的几种方法

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

    本地获取ssh公钥

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

    启动一个容器,挂载宿主机的/etc/目录,之后将反弹shell的脚本写入到/etc/crontab中,攻击机nc -vv -l -p Port会得到一个反弹的shell,因为没有公网IP,就不试了。

    目标机上:

    攻击机上:

    也可以挂载var/spool/cron/目录,将反弹shell的脚本写入到/var/spool/cron/root(centos系统)或/var/spool/cron/crontabs/root(ubuntu系统)

    参考:https://www.cnblogs.com/itworks/p/7159477.html

    总会有不期而遇的温暖. 和生生不息的希望。
  • 相关阅读:
    Windows环境安装tesseract-ocr 4.00并配置环境变量
    python问题集
    使用CefSharp在.Net程序中嵌入Chrome浏览器(八)——Cookie
    python虛擬環境和工具
    pycharm使用(持续更新)
    醒过来的都市
    下一个十年计划6-作品
    下一个十年计划5-方向选择
    下一个十年计划4-反向选择
    负逻辑的实际应用
  • 原文地址:https://www.cnblogs.com/devi1/p/13486411.html
Copyright © 2011-2022 走看看