第12章
攻击其他用户


大多数针对Web应用程序的攻击主要以服务器端应用程序为攻击目标。当然,许多这类攻击会侵害到其他用户,例如,盗窃其他用户数据的SQL注入攻击。但是,攻击者所使用的基本攻击方法是以无法预料的方式与服务器进行交互的,目的是执行未授权操作并非法访问数据。

本章描述的攻击属于另外一种类型,因为攻击者的主要对象是应用程序的其他用户。服务器端应用程序仍然存在所有相关漏洞;然而,攻击者利用应用程序的一些行为执行针对其他终端用户的恶意操作。这些操作可能会造成一些与前面分析过的攻击相同的后果,如会话劫持、未授权操作和披露个人信息;还可能导致其他恶果,如记录键击或在用户的计算机上执行任意命令。

近年来,软件安全其他领域的关注焦点已逐渐由服务器端攻击转变为客户端攻击。举例来说,Microsoft过去会定期宣布其服务器产品中存在的严重安全漏洞。虽然他们也披露大量客户端缺陷,但这类缺陷很少受到关注;因为对攻击者而言,服务器是一个更具吸引力的目标。仅仅几年内,这种情况就发生显著改变。自Microsoft的IIS 6 Web服务器首次发布以来,人们已经在Microsoft Internet Explorer浏览器中发现了大量漏洞。随着人们对安全威胁意识的普遍增强,软件开发者与黑客之间的前沿战场已经由服务器转向客户端。

虽然Web应用程序安全状况尚未发生上述巨大的转变,但也出现了相同的趋势。20世纪90年代末,因特网上的大多数应用程序中充斥着命令注入之类的严重缺陷,任何攻击者只要具备一点点相关知识,就能够轻易发现并利用这些弱点。尽管许多这种类型的漏洞今天依然存在,但数量逐渐减小并且变得更加难以利用。然而,即使是最为注重安全的应用程序,也仍然包含许多可轻易发现的客户端缺陷。此外,应用程序的服务器端以有限、可控的方式运行,而客户端可使用任意数量的各种浏览器技术(包括各种版本),由此客户端面临大范围可成功实施的攻击向量。

许多年前,各种服务器端漏洞大行其道;如今,随着人们首次谈及会话固定之类的漏洞,客户端漏洞开始成为最近研究的主要焦点。客户端攻击成为以Web安全为报导对象的新闻媒体的主要关注焦点,间谍软件、钓鱼攻击和木马等名词成为许多以前从未听说过SQL注入或路径遍历的新闻记者的口头禅。针对Web应用程序用户的攻击也日益成为有利可图的犯罪行为。如果一家因特网银行拥有1000万个用户,并且不需要熟练的技能,只需要通过相对简单的攻击方法就可以攻破其中1%的用户,那何必还要费神去入侵这家银行呢?

针对其他应用程序用户的攻击形式各异,它们之间的微妙之处与细微差别常常被人们忽略。 通常,与主要的服务器端攻击相比,人们对这些攻击也知之甚少,即使经验丰富的渗透测试员也会混淆或忽略各种不同的漏洞。本章将描述各种常见的漏洞,并说明渗透测试员在确认并利用这些漏洞时所需采取的实用步骤。

本章主要介绍跨站点脚本(XSS)。这类漏洞导致了针对其他用户的重量级攻击。从某种程度上说,XSS是在Web应用程序中发现的最为普遍的漏洞,困扰着现在绝大多数的应用程序,包括因特网上一些最为注重安全的应用程序,如电子银行使用的应用程序。在下一章中,我们将介绍各种针对用户的其他类型的攻击,其中的一些攻击与XSS非常类似。

img003  错误观点  “用户之所以被攻破,是因为他们没有安全意识。”

从某种程度上说,这种观点是正确的,但是,尽管用户采取了安全防御,一些针对应用程序用户的攻击仍然能够取得成功。保存型XSS攻击能够攻破最具安全意识的用户,而无须与用户进行任何交互。在第13章,我们将介绍许多其他方法,可在用户不知情的情况下攻破具有安全意识的用户。

最初,当XSS在Web应用程序安全社区广为人们所知时,一些专业渗透测试人员倾向于将XSS当做一种“次要”漏洞。这一部分是因为该漏洞在Web应用程序中极为常见,也因为与服务器端命令注入等许多漏洞相比,XSS并不能被独立黑客直接用于攻击应用程序。随着时间的推移,这种观点已发生改变,如今,XSS已被人们视为Web应用程序面临的最主要的安全威胁。随着对客户端攻击的研究不断深入,人们开始讨论各种其他复杂性与利用XSS漏洞的攻击不相上下的攻击。与此同时,现实世界中也出现了大量利用XSS漏洞攻破知名机构的攻击。

通常情况下,XSS是一类主要的应用程序安全缺陷,它常常与其他漏洞一起造成破坏性的后果。有时,XSS攻击也可能转变成某种病毒或能够自我繁殖的蠕虫,这种攻击确实非常严重。

img003  错误观点  “不可能通过XSS控制一个Web应用程序。”

我们曾仅使用XSS攻击控制大量的应用程序。在适当的情况下,技术熟练的攻击者利用XSS漏洞即可完全攻破一个应用程序。下面将说明攻击者如何实施攻击。