与 任何其他应用程序一样,Web应用程序也依赖于支持它的其他技术栈(technology stack),包括Web服务器、操作系统与网络基础架构。这些组件中的任何一个都可能成为攻击者的目标,应用程序依赖的技术往往可使攻击者能够完全攻破整个应用程序。
本书主要讨论渗透测试员如何攻击Web应用程序,因此大多数上述类型的攻击不在本书的讨论范围之内,但针对Web服务器层的攻击以及相关应用程序层的防御是个例外。内联防御通常用于保障Web应用程序的安全及识别攻击。避开这些防御是攻破应用程序的关键步骤。
迄今为止,我们并未对Web服务器与应用程序服务器进行区分,因为各种攻击主要针对的是应用程序的功能,无论应用程序以何种方式提供这些功能。实际上,大部分表示层、与后端组件的通信,以及核心安全框架都可能由应用程序容器管理。这就进一步扩大了攻击范围。很明显,如果实现这些框架的技术存在任何漏洞,可用于直接攻破应用程序,这些漏洞将会引起攻击者的关注。
本章主要讨论如何利用Web服务器中存在的漏洞攻击其上运行的Web应用程序。当攻击Web服务器时,渗透测试员可以利用的漏洞分为两大类:服务器配置缺陷和应用程序服务器软件中的安全漏洞。相关漏洞的列表可能并不全面,因为这类软件总是在不断变化,但本章介绍的漏洞将说明各种应用程序在执行自己的本地扩展、模块或API,或访问外部功能时可能遇到的常见危险。
在本章中,我们还将分析Web应用程序防火墙,介绍其优缺点,并详细说明如何突破这些防火墙以实施攻击的常用方法。