利用Laudanum攻破Tomcat:当Metasploit失效时的实战技巧

本文详细介绍了在Metasploit攻击Tomcat失败后,如何使用Laudanum的WAR文件获取系统shell。涵盖了常见错误解决方案、Tomcat安全配置绕过技巧,以及实验室环境搭建指南,为渗透测试人员提供实用技术参考。

利用Laudanum攻破Tomcat:当Metasploit失效时的实战技巧

在最近的一次安全测试[1]中,我发现了一个使用默认用户名和密码的Tomcat服务器。太好了,我心想,可以轻松获取shell。我启动了Metasploit,选择了multi/http/tomcat_mgr_deploy模块,指向服务器并执行。砰,失败了。我以前从未遇到过这种情况,于是检查了选项并再次尝试,还是失败。再次检查选项和服务器后发现是Linux x86_64系统,但64位payload似乎已损坏。于是我尝试了通用payload,仍然无效。

在Metasploit邮件列表上求助后,很快得到了回复:“它已损坏且无法修复,我打算删除它”。回复很快,但不是我想要的答案,至少这阻止了我继续浪费时间在永远无法成功的事情上。

既然我已经完全访问管理控制台,却无法轻松获得shell,如此接近成功我绝不会放弃。在Metasploit列表讨论中,有人建议使用Secure Ideas(前身为InGuardians)的Laudanum。这是一组可以上传到Web服务器以获取shell和其他有趣功能的文件。

使用Laudanum与Tomcat相当简单:从jsp目录获取cmd.war文件,通过Web控制台上传。如果幸运的话,应用程序会自动部署并出现在应用程序列表中,只需查找名称cmd。下一步自然是点击cmd链接,但如果这样做,会得到一个标题为"HTTP Status 404 - /cmd/“的页面。我对此咒骂了一会儿,更接近了却仍然没有shell!查看war文件附带的源代码,没有index.jsp但有一个cmd.jsp,于是我将它添加到URL末尾,砰,屏幕上出现了一个漂亮的文本框要求我输入命令。快速输入ls,目录列表显示在屏幕上,我高兴地跳起了root之舞。

不满足于此,我决定回家后在实验室里玩玩Tomcat,并遇到了一些需要提及的问题,因为它们可能在测试中成为阻碍。第一个是遇到Apache 404页面,这与Tomcat 404页面明显不同。如果遇到这种情况,我认为是因为Tomcat未设置为自动部署新应用程序,需要修改后台的XML文件来启用此功能。如果遇到此错误,那就麻烦了,这种攻击路径将无法工作。

另一个错误是500错误,在"root cause"部分提到:

java.security.AccessControlException: access denied (java.io.FilePermission «ALL FILES» execute)

这意味着服务器已设置为禁止系统命令,这是另一个shell失败。从Tomcat 5.5.25版本开始,此设置成为标准。

最后一点是在Windows机器上,需要在命令前添加:

cmd.exe /c

否则会出现命令未找到或类似错误,我的实验室没有Windows设置,因此无法提供确切消息。

这是我第一次不得不超越使用标准Metasploit模块简单利用Tomcat,我很高兴这样做,因为我现在对Tomcat有了更多了解,并且萌生了一个新工具的想法,可能会或可能不会很快出现,具体取决于工作量。

实验室实践

如果想在实验室中使用Laudanum,Turnkey提供了一对预构建的Tomcat服务器,一个是纯Tomcat,另一个是Apache上的Tomcat。我下载时的版本都配置为防止shell工作。基于Apache的版本不会自动部署,而Tomcat版本启用了命令执行保护。我建议获取两者以查看不同的错误,但如果想让一切正常工作并查看shell,请获取Tomcat版本并创建文件/etc/tomcat5.5/policy.d/99hack.policy,内容如下:

grant { permission java.security.AllPermission; };

然后重启Tomcat。

如果要在基于Apache的服务器上手动部署shell,需要编辑/etc/tomcat5.5/mod_jk.conf并添加以下行:

JkMount /cmd ajp13_worker JkMount /cmd/* ajp13_worker

然后重启Tomcat和Apache。

结论

那么,这一切的意义何在?首先,如果Metasploit失败,不要假设完全失败并放弃,我相信有很多shell因此被错过。如果有时间,做一些研究并提出一些问题,可能仍然能获得那个shell。其次,试试Laudanum。诚然,它的shell不如Meterpreter shell好,但有时简单就是您所需要的,如果您是编码人员,它为您提供了一个良好的基础来创建自己的超级shell。

如果有人想指出这里的任何错误,请联系我。这里的所有内容都来自Google和实验,如果有更好的方法或解决任一错误的方法,我很乐意知道。

[1] 实际上可能是六个月前,但我写了大部分文章后就被其他事情分心,一直搁置等待完成至今。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计