第11章
攻击应用程序逻辑


有Web应用程序都通过逻辑实现各种功能。从根本上讲,用编程语言编写代码就是把一个复杂的进程分解成一些非常简单而又相互独立的逻辑步骤。将一项对人类有用的功能转换成一系列计算机能够执行的细微操作,需要掌握大量的技巧并进行周密的安排。顺利、安全地完成以上任务就更显困难。如果由背景各不相同的开发者与程序员并行开发同一个应用程序,那么在这个过程中可能会发生很多错误。

在所有即使是非常简单的Web应用程序中,每个阶段都会执行数目庞大的逻辑操作。这些逻辑代表着一个复杂的受攻击面,它虽然从未消失,但往往被人们忽略。许多代码审查与渗透测试主要针对常见的“头条”式漏洞,如SQL注入和跨站点脚本,因为它们具有容易辨别的签名,人们对它们的利用方法也进行了广泛的研究。相反,应用程序的逻辑缺陷更难以辨别:每一种缺陷似乎都是唯一的,通常自动漏洞扫描器也无法发现它们。因此,它们并未受到应有的重视与关注,攻击者对之非常感兴趣。

本章将描述各种常见的Web应用程序逻辑缺陷,以及渗透测试员在探查与攻击应用程序逻辑时需要采取的实用步骤。我们将举出一系列实际示例,每个示例说明一种不同的逻辑缺陷,它们共同说明设计者与开发者做出的假设可能会直接导致逻辑缺陷,在应用程序中造成安全漏洞。