信息搜集
1 | └─# nmap -A -p- --min-rate=1000 -T4 10.10.11.180 |
开了三个端口,9093端口访问后看起来像是配置文件,没找到什么有用的东西(后来看别的wp说这能看出这台机器有mattermost服务)
有个域名 shoppy.htb
,扫子域名扫到mattermost,都添加到hosts里,mattermost这个域名需要账号密码登陆
shoppy.htb这个扫目录扫到登陆口/login,然后看官方对这个机器的介绍是存在Nosql注入
web
Nosql注入介绍以及payload
https://nullsweep.com/a-nosql-injection-primer-with-mongo/
https://xz.aliyun.com/t/9908?time__1311=n4%2BxnD0DuDRDci730%3DD%2FiaRmxjhhIWDRxD5t4%2BQx
https://book.hacktricks.xyz/v/cn/pentesting-web/nosql-injection#sql-mongo
是通过什么判断为Nosql注入的呢?(参考思路:https://arz101.medium.com/hackthebox-shoppy-64cbe52964ed )
login发包是post发送username和password两个参数,按往常那样测试单引号,每次都需等待很久的时间然后返回504,直接sqlmap跑也无效,当我们随便访问一个不存在的目录时返回的是,这表明这个web在使用路由
所以可能是在使用Node.js,他存在使用Nosql注入漏洞绕过登陆限制,经过尝试,可以使用admin' || 'a'=='a
绕过
登陆后跳转到/admin,主要是有个search功能点,没找到别的点了,搜索admin,给了一个json文件,里面有admin密码的哈希(爆破不出来)
但是不知道有没有别的用户,继续使用Nosql的payloadadmin' || 'a'=='a
,这次多看到一个用户的密码
爆破后拿到账号密码josh:remembermethisway
,成功登陆mattermost那个域名的登陆口,在聊天窗口中找到jaeger的账号密码,ssh登陆成功,拿到user
提权
sudo -l看到 (deploy) /home/deploy/password-manager
,password-manager是个二进制文件,strings查看,貌似是输入正确的密码后能拿到deploy目录下的creds.txt
传到本地,ida看了一下,密码就在源代码里,Sample
输入正确密码后拿到deploy的密码
登陆deploy输入id,发现deploy在docker组里,有相关的提权方法
1 | deploy@shoppy:/home/jaeger$ id |
docker提权参考链接
有个docker提权的漏洞,大概思路就是创建一个新的容器,该容器中挂载了整个文件系统。在这个容器中,我将是根用户,因此可以完全访问容器中的所有文件(包括完整的主机文件系统)。
• docker run: 运行一个新的 Docker 容器。
• -v /:/mnt: 将宿主机的根目录 / 挂载到容器内部的 /mnt 目录。这样,容器可以通过 /mnt 访问到宿主机的文件系统。
• –rm: 容器在退出后会自动删除,不会保留临时文件或容器。
• -it: 以交互模式运行容器,并分配一个伪终端。这样你可以在容器中运行命令并看到输出。
• alpine: 指定使用 Alpine Linux 这个小型的 Linux 发行版镜像作为容器的基础镜像。
• chroot /mnt: 使用 chroot 命令将 /mnt 作为新的根目录,将容器的根文件系统切换到宿主机的根目录。
• bash: 运行 bash,给你一个新的 shell 环境。
于是我们可以成功读到root.txt,后续也可以通过读取shadow或是ssh私钥等方法来获得真正的宿主机root
总结
这个靶机还挺有意思的,主要涉及到Nosql注入和docker提权,都是第一次遇见,过后要好好消化一下这两个知识了。。