(1)检查应用程序解析过程中得到的结果,确定应用程序使用的、可能包含可访问的管理接口的Web服务器与其他技术。
(2)对Web服务器进行端口扫描,确定在指向主目标应用程序的不同端口上运行的所有管理接口。
(3)对于确定的接口,查阅制造商文档资料与常用密码表,获得默认证书。使用Metasploit的内置数据库扫描服务器。
(4)如果默认证书无效,使用第6章描述的技巧尝试猜测有效的证书。
(5)如果能够访问一个管理接口,审查可用的功能,确定是否可以利用这项功能进一步攻破主机与主应用程序。
大多数Web服务器中含有可用于攻击服务器自身或主目标应用程序的默认内容与功能。以下是一些可能有用的默认内容。
用于演示某些常见任务的样本功能。
本应禁止公众访问,但无意中允许公众访问的强大功能。
包含仅在安装时有用的信息的Web服务器手册。
1.调试功能
通常,为方便管理员进行诊断而设计的功能对攻击者极其有用,因为其中包含与服务器和它上面运行的应用程序的配置及与运行状态有关的重要信息。
图18-1为默认页面phpinfo.php,许多Apache版本中都含有该页面。这个页面运行PHP函数phpinfo()并返回其结果。页面中包含大量与PHP环境、配置设置、Web服务器模块和文件路径有关的信息。
图18-1 默认页面phpinfo.php
2.样本功能
许多服务器默认包含各种样本脚本与页面,其目的在于演示某些Web服务器功能与API的用法。通常,这些样本功能并无害处,也不会给攻击者提供攻击的机会。但实际上,基于以下两点原因,事实并非如此。
许多样本脚本包含安全漏洞,可被攻击者用于执行脚本作者不希望执行的操作。
许多样本脚本甚至执行可被攻击者直接利用的功能。
第一个问题的示例为Jetty版本7.0.0中包含的Dump Servlet。此Servlet可以通过/test/jsp/dump.jsp之类的URL访问。一旦被访问,它会打印Jetty安装及当前请求的各种详情,包括请求查询字符串。 因此,攻击者只需在URL中包含脚本标签,如/test/jsp/dump.jsp?%3Cscript%3Ealert(%22xss%22)%3C/script%3E,即可实施跨站点脚本攻击。
Apache Tomcat中的Sessions Example脚本是第二个问题的典型示例。如图18-2所示,这个脚本可用于获取并设置任意会话变量。如果在服务器上运行的应用程序将敏感数据保存在用户会话中,攻击者就可以查看这些数据,将通过修改它的值来破坏应用程序的处理过程。
图18-2 Apache Tomcat中的默认SessionsExample脚本
3.强大的功能
许多Web服务器软件包含一些公众无法访问的强大功能,但终端用户通过某种方式可以访问这些功能。许多时候,只要提供正确的管理证书,应用程序服务器都允许通过应用程序本身使用的同一HTTP端口来部署Web档案(WAR文件)。应用程序的这种部署过程是黑客的主要攻击目标。常见的渗透测试框架能够自动完成以下过程:扫描默认证书、上传包含后门的Web档案,然后执行该档案以获取远程系统上的命令外壳,如图18-3所示。
4.JMX
JBoss默认安装的JMX控制台是一种典型的强大默认内容。JMX控制台被描述为“JBoss应用程序服务器微内核的原始视图”。实际上,通过它可以直接访问JBoss应用程序服务器中的任何托管Bean。由于可用功能的数量众多,因此,人们从中发现了大量安全漏洞。其中,最简单的利用方法,是使用DeploymentFileRepository中的store方法创建包含后门的WAR文件,如图18-4所示。
图18-4 JMX控制台包含可用于部署任意WAR文件的功能
例如,以下URL将上传一个包含后门的cmdshell.jsp页面:
如图18-5所示,该URL将成功创建可执行以下代码的服务器端后门:
图18-5 使用JMX控制台在JBoss服务器上部署后门WAR文件的成功攻击
然后,内置的部署扫描器会自动将木马WAR文件部署到JBoss应用程序服务器中。部署该文件后,即可以在新建的cmdshell应用程序中访问这个文件,在本示例中,其中仅包含cmdshell.jsp:
注解
要解决上述问题,需要将GET和POST方法仅限于管理员使用。但是,只需使用HEAD方法提出上述请求,即可轻松突破这种限制( 有关详细信息,请访问www.securityfocus.com/bid/39710/)。和任何基于配置的漏洞一样,Metasploit等工具能够相当高效地利用各种此类JMX漏洞。
5.Oracle应用程序
强大的默认功能的最典型示例,要属Oracle应用程序服务器实施的PL/SQL网关;其他Oracle产品,如电子商务套件(E-Business Suite)也采用了这个网关。这项功能提供一个接口,通过它可向一个后端Oracle数据库提出Web请求。攻击者可以使用类似于下面的URL向数据库过程提交任意参数:
这项功能本用于将某个数据库执行的业务逻辑转换成用户友好的Web应用程序。但是,由于攻击者能够指定任意过程,因此,他可以利用PL/SQL网关访问数据库中的强大功能。例如,SYS.OWA_UTIL.CELLSPRINT过程可用于执行任意数据库查询,从而获取敏感数据:
为防止这种攻击,Oracle引入一个名为PL/SQL排除列表(Exclusion List)的过滤器。该过滤器检查被访问的包的名称,并阻止攻击者访问任何以下面的表达式开头的包:
该过滤器旨在阻止攻击者访问数据库中功能强大的默认功能。但是,上面的列表并不全面,无法阻止攻击者访问数据库管理员拥有的其他功能强大的默认过程,如CTXSYS与MDSYS。此外,本章后面还会介绍与PL/SQL排除列表有关的一些问题。
当然,PL/SQL网关最初主要用于传送数据包和过程,但此后发现它的许多默认功能都包含漏洞。2009年,电子商务套件的默认数据包组成部分被证实包含若干漏洞,包括可被攻击者用于编辑任意页面。研究人员提供了使用icx_define_pages.DispPageDialog在管理员的登录页面中注入HTML,以实施保存型跨站点脚本攻击的示例: