Test Lab是一个与Offensive Security的实验室类似的在线渗透测试虚拟实验室。这个实验环境中包含12个系统,分别有各种各样的漏洞和配置错误。在每个系统上都有一个token,我们需要找到它并将其上传,用于验证攻破该系统。

首先,你需要在这里注册,注册之后你可以在那儿获取你的VPN配置文件和口令。在开始之前,我们建议你使用Kali Linux,因为用到的所有工具那上面都有,实验室提供了一个网络拓扑图,这有助于你分析目标。

030916_2324_TestLabV8Pa1.png

正如在上面的网络拓扑图中看到的,有两个网关 192.168.101.6和192.168.101.7。通过第一个网关,只能访问3个系统,它们是site、cabinet和ssh-dev。通过第二个网关,可以访问其它剩下的机器。在这篇文章的第一部分,我们将攻下两个系统网站和cabinet,其它机器我们会在下一部分攻破。

030916_2324_TestLabV8Pa2.png

所以,我们这次的主要目标是网站和cabinet,他们可以通过192.168.101.6访问。让我们开始行动吧。

攻击SITE

从利用nmap扫描开始,命令为:

nmap -sS -sV -Pn -p1-65535 192.168.101.6

030916_2324_TestLabV8Pa3.jpg

在上面的输出中我们发现了两个开放端口,80和443。用浏览器访问IP和80端口,显示是一个SAS银行程序,有一个登录功能。

030916_2324_TestLabV8Pa4.jpg

我们浏览这个应用程序,查看它的源代码寻找一些线索,但是什么都没发现。运行dirb工具枚举目录,命令为:

dirb http://192.168.101.6/ /usr/share/wordlists/dirb/common.txt/ -v

030916_2324_TestLabV8Pa5.jpg

在工具运行完之后,我们注意到每一个请求的响应码都是403,这意味着禁止访问。当我们尝试打开任何一个应用程序中不存在的页面时,它会返回一个404响应码。

030916_2324_TestLabV8Pa6.jpg

这说明防火墙封锁了我们的请求。现在我们对dirb工具稍作调整,增加一个-a参数,这参数允许我们指定一个不同的user agent。在这个例子中,我们增加了lceweasel浏览器的user agent,命令为:

dirb http://192.168.101.6/usr/share/wordlists/dirb/common.txt/ -v -a “Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.5.0

030916_2324_TestLabV8Pa7.jpg

现在我们看到结果不同了,我们得到了404和200响应。利用浏览器打开.htaccess文件,没有发现感兴趣的东西,随后打开.git/HEAD文件,.git目录可以访问,这说明其它的配置文件也可以访问,并且可以下载下来。有一个名为DVCS Ripper的工具,它可以从网站上下载所有的.git仓库,前提是.git目录可以访问。

我们使用下面的命令执行该工具:

./rip-get.pl -u http://192.168.101.6/.git/ -o /root/Desktop/app

030916_2324_TestLabV8Pa8.jpg

在工具执行后,所有的代码都保存在了我的app文件夹中。

030916_2324_TestLabV8Pa9.jpg

我们浏览应用程序所有源代码,从DatabaseSeeder.php中找到两个登录凭证, 该文件位于app/database/seeds目录中。

030916_2324_TestLabV8Pa10.jpg

我们尝试使用得到的用户口令登录,登录后发现了第一个token。

030916_2324_TestLabV8Pa11.jpg

攻击CABINET

这个系统同样可以通过相同的网关192.168.101.6访问,利用443端口,并且有一个登录功能。

030916_2324_TestLabV8Pa12.jpg

我们再一次运行dirb工具寻找隐藏的目录和文件,命令如下:

dirb https://192.168.101.6/ /usr/share/wordlists/dirb/common.txt/ -a “Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.5.0”


030916_2324_TestLabV8Pa13.jpg

正如上图看到的,我们找到了api目录,试着打开这个目录,它返回一个错误“You can use only /api/auth or /api/balance”。

030916_2324_TestLabV8Pa14.jpg

我们通过浏览器打开api/auth目录,同样地,它抛出一个错误,需要填写email和password。

030916_2324_TestLabV8Pa15.jpg

我们在请求时增加两个使用随机数填写的参数,然后访问URL。

030916_2324_TestLabV8Pa16.jpg

可以看到,它显示email无效,这说明请求是可以的,现在我们需要找到有效的email id。

所以我们转到下一个目录api/balance,访问之后,它同样返回了错误,需要填写api session token和id。

030916_2324_TestLabV8Pa17.jpg

我们增加了两个必须的参数,用随机数赋值,然后访问URL,它又返回一个消息,api session token的值必须是40个字符。

030916_2324_TestLabV8Pa18.jpg

我们增加了一个40个字符的参数之后再次请求。应用程序返回了一个null值。这意味着起作用了。

030916_2324_TestLabV8Pa19.jpg

让我们尝试下SQL注入,给token参数的值赋一个精心制作的40个字符长的SQL注入语句,然后再次发送请求。

030916_2324_TestLabV8Pa20.jpg

SQL注入成功了,返回了所有的emails,在读完所有的email之后,我们选择了RalWestfall的email,因为它包含了sas-bank.lab域名。

现在我们回到需要一个有效email的/api/auth页面,我们通过email参数提交了获取的email,现在它返回了一个不同的错误消息,password或email错误。

030916_2324_TestLabV8Pa21.jpg

在这个例子中,我们100%确定email是有效的,因为如果我们提供一个随机的email,它会显示“选择的email无效”的信息。现在我们需要密码,可以使用BurpSuite proxy来暴力猜解password参数。

030916_2324_TestLabV8Pa22.jpg

我们使用fuzzdb的密码表作为密码列表,如下所示。

030916_2324_TestLabV8Pa23.jpg

执行intruder一段时间后,我们发现了密码是“freeman”。

尝试使用Ralph Westfall的密码和猜解出的密码登录,成功了。

030916_2324_TestLabV8Pa24.jpg

在登录之后,我们浏览所有的应用功能,发现了一个上传资料图片的功能。

030916_2324_TestLabV8Pa25.jpg

尝试上传一个PHP后门,它返回了一个错误,只允许上传图片。

030916_2324_TestLabV8Pa26.jpg

后来,我们查看应用程序的源代码,发现资料图片上传的位置位于uploads目录下。

030916_2324_TestLabV8Pa27.jpg

我们浏览upload文件夹,尝试访问PHP shell文件,虽然应用程序抛出了错误但是文件还在那儿。

030916_2324_TestLabV8Pa28.jpg

现在我们有了一个shell访问权限,浏览所有的root目录,我们在/var/www/文件夹中找到了token.txt文件。

030916_2324_TestLabV8Pa29.jpg

我们打开了text文件,找到了token。

在下个部分,我们将进攻其它的机器。

参考链接

https://lab.pentestit.ru/pentestlabs/4

https://github.com/fuzzdb-project/fuzzdb

https://github.com/kost/dvcs-ripper