TryHackMe-dogcat

在线靶机链接:dogcat

信息收集

开放服务探测
nmap

网站路径探测
dir

网站首页

漏洞探测

通过随意点击页面的dog和cat按钮,可以猜测到是本地文件包含。

尝试使用/etc/passwd来测试,但是请求被拒绝了。

通过右键查看源代码,已经包含图片的页面,可以发现是有一个./cats目录的,所以可以通过这个路径来绕过。
构造payload

1
view=./cats/../index.php

但是构造了这个payload之后,还是不成功,因为它会自动帮你添加一个php的后缀。

如果我们只是要查看php文件的话,那就无所谓,但是我们不仅要查看php文件,还要看其他的系统文件。先使用以下payload来看网站源代码是如何自动加后缀的。

1
?view=php://filter/read=convert.base64-encode/resource=./dogs/../index

base64解码之后得到以下代码

可以看到如果传入了ext参数,他就不会自己去添加php的后缀了。所以我们可以手动的去传入一个ext参数。

漏洞利用

解决了后缀的问题后,因为是文件包含,所以可以尝试apache日志注入导致命令执行来获得shell,构造以下payload。

1
?view=./cats/../../../log/apache2/access.log&ext

可以看到我已经正确的执行了whoami的命令了。所以我们可以直接通过生成一句话来获得web-shell。

发送请求之后,访问生成的文件。

不是返回404就是成功了。

直接蚁剑连接成功

第一个flag:

1
***{****_**_***_*_******_********}

第二个flag:

1
***{***_**_***_******}

提权

因为在蚁剑的终端上,我不能正常的反弹shell,所以我创建了一个shell.sh文件,里面是反弹shell的命令。获得反弹回来的shell之后,查看能执行的sudo程序是什么。

恩,是env。那我们可以直接运行以下命令来获得shell

1
sudo env sh

1
flag3:***{*********_************_******}

拿到flag3之后,在拿flag4的路上我卡了很久。因为目录拿到的root权限只是在docker镜像中,我们并没有获得目标服务器真正的root权限。最后在/opt/backups下找到一个backup.sh这个文件的内容平平无其,只是打包网站根目录而已。但是解压出来之后文件是dockfile什么的通过搜索,得知docker有一个定时执行任务的机制叫做DockerContainerDocker Container中启动定时任务范例。抱着尝试的心态,往backup.sh中写入反弹shell的命令,开启监听后,过了一会就获得了真正的root权限了。

1
flag4:***{***********_**_***********_**_***********_********************************}

总结

加深了对本地文件包含的印象。发现自己对docker没什么了解,以后考虑要好好学习一波。。