Chapter 12 Attacking Users: Cross-Site Scripting(2) - XSS Attacks in Action

XSS实际行动

Posted by D on March 17, 2020

参考:The Web Application Hackers Handbook Chapter 12

为了了解XSS漏洞的严重影响,研究一些真实的XSS攻击示例非常有帮助。 它还有助于考虑XSS攻击可以执行的各种恶意行为,以及如何主动将其传递给受害者。

1. Real-World XSS Attacks

2010年,Apache Foundation在其问题跟踪应用程序中因反射的XSS攻击而受到攻击。 攻击者使用重定向器服务发布了一个链接,该链接指向一个利用XSS漏洞捕获已登录用户的会话令牌的URL。 当管理员单击该链接时,他的会话受到威胁,攻击者获得了对该应用程序的管理访问权限。 然后,攻击者修改了项目的设置,将项目的上载文件夹更改为应用程序Web根目录中的可执行目录。 他将特洛伊木马登录表单上传到此文件夹,并且能够捕获特权用户的用户名和密码。 攻击者识别了一些在基础架构内其他系统上重复使用的密码。 他能够完全破坏其他系统,将攻击范围扩大到易受攻击的Web应用程序之外。

有关此攻击的更多详细信息,请参见以下URL:

http://blogs.apache.org/infra/entry/apache_org_04_09_2010

2005年,发现社交网站MySpace容易受到存储的XSS攻击。 MySpace应用程序实现了过滤器,以防止用户将JavaScript放入其用户配置文件页面。但是,一个名为Samy的用户找到了一种规避这些过滤器的方法,并将一些JavaScript放到了其配置文件页面中。每当用户查看此配置文件并导致受害者的浏览器执行具有两种主要效果的各种操作时,该脚本就会执行。首先,浏览器将Samy添加为受害者的”朋友”。其次,它将脚本复制到受害者自己的用户配置文件页面中。随后,任何查看受害者个人资料的人也将成为攻击的受害者。结果是基于XSS的蠕虫呈指数传播。最初的犯罪者在几小时内收到了近一百万个朋友的请求。结果,MySpace必须使用应用程序,从其所有用户的配置文件中删除恶意脚本,并修复其反XSS过滤器中的缺陷。

有关此攻击的更多详细信息,请参见以下URL:

http://namb.la/popular/tech.html

Web邮件应用程序固有地具有存储的XSS攻击的风险,因为当收件人查看时,Web邮件应用程序如何在浏览器中呈现电子邮件。 电子邮件可能包含HTML格式的内容,因此该应用程序有效地将第三方HTML复制到它显示给用户的页面中。 2009年,一家名为StrongWebmail的网络邮件提供商向可能闯入CEO电子邮件的任何人提供了10,000美元的奖励。 黑客发现了Web邮件应用程序中存储的XSS漏洞,当收件人查看恶意电子邮件时,该漏洞允许执行任意JavaScript。 他们向首席执行官发送了一封适当的电子邮件,破坏了他在该应用程序上的讨论,并要求奖励。

有关此攻击的更多详细信息,请参见以下URL:

http://blogs.zdnet.com/security/?p=3514

2009年,Twitter成为了两个XSS蠕虫的受害者,这两个XSS蠕虫利用存储的XSS漏洞在用户之间传播,并发布了更新,宣传了该蠕虫作者的网站。 由于在客户端广泛使用了类似Ajax的代码,因此在Twitter中也发现了各种基于DOM的XSS漏洞。

有关这些漏洞的更多详细信息,请参见以下URL:

www.cgisecurity.com/2009/04/two-xss-worms-slam-twitter.html
http://blog.mindedsecurity.com/2010/09/twitter-domxss-wrong-fix-and-
something.html

2. Payloads for XSS Attacks

到目前为止,我们已经集中在经典的XSS攻击有效载荷上。 它涉及捕获受害者的会话令牌,劫持她的会话,从而以受害者的身份”使用”该应用程序,执行任意操作,并可能获取该用户帐户的所有权。 实际上,可以通过任何类型的XSS漏洞传递许多其他攻击有效载荷。

2.1 Virtual Defacement

这种攻击涉及将恶意数据注入Web应用程序的页面中,以向应用程序的用户提供误导性信息。 它可能只是涉及将HTML标记注入网站,或者可能使用脚本(有时托管在外部服务器上)将详细的内容和导航注入网站。 这种攻击被称为虚拟破坏,因为未修改目标Web服务器上托管的实际内容。 产生污损的唯一原因是应用程序如何处理和呈现用户提供的输入。

除了轻率的恶作剧外,这种攻击还可以用于严重的犯罪目的。 如图所示,可以以令人信服的方式将经过精心设计的污损发送给正确的接收者,新闻媒体可以对他们的行为,股票价格等产生真实的影响,从而对攻击者的财务收益产生实际影响。 在图12-6中。

figure12-6

2.2 Injecting Trojan Functionality

这种攻击超出了虚拟破坏的范围,并将实际的工作功能注入了易受攻击的应用程序。 目的是欺骗最终用户执行某些不良操作,例如输入敏感数据,然后将其传输给攻击者。

如针对Apache的攻击中所述,一种涉及注入功能的明显攻击是向用户提供Trojan登录表单,该表单将其凭据提交给攻击者控制的服务器。 如果执行得当,攻击也可能无缝地将用户登录到实际应用程序,以使她不会在体验中发现任何异常。 攻击者可以自由使用受害人为自己目的而提供的凭证。 这种类型的有效负载很容易遭受网络钓鱼式攻击,在这种攻击中,会向用户提供真实真实应用程序中的精心制作的URL,并建议他们需要正常登录才能访问它。

另一个明显的攻击是要求用户输入他们的信用卡详细信息,通常是通过诱人的优惠来进行的。 例如,图12-7显示了Jim Ley利用2004年在Google中发现的一个反射的XSS漏洞创建的概念验证攻击。

figure12-7

这些攻击中的URL指向实际应用程序的真实域名,并在适用的情况下带有有效的SSL证书。 因此,与托管在不同域上的纯网络钓鱼网站相比,它们更有可能说服受害者提交敏感信息,并且仅克隆目标网站的内容。

2.3 Inducing User Actions

如果攻击者劫持了受害者的会话,则他可以以该用户的身份”使用”该应用程序,并代表该用户执行任何操作。 但是,这种执行任意动作的方法可能并不总是理想的。 它要求攻击者监视自己的服务器,以获取受感染用户提交的捕获的会话令牌。 他还必须代表每个用户执行相关操作。 如果许多用户受到攻击,这可能是不切实际的。 此外,它在任何应用程序日志中都留下了相当微妙的痕迹,可以轻松地用来识别负责调查期间未经授权操作的计算机。

会话劫持的一种替代方法是,攻击者只想代表每个受感染的用户执行一组特定的操作,那就是使用攻击有效负载脚本本身来执行这些操作。 在攻击者想要执行一些需要管理特权的操作(例如修改分配给他控制的帐户的权限)的情况下,此攻击有效负载特别有用。 在庞大的用户基础上,劫持每个用户的会话并确定受害者是否是管理员将很麻烦。 一种更有效的方法是诱使每个受到攻击的用户尝试升级攻击者帐户的权限。 大多数尝试都会失败,但是一旦管理用户受到威胁,攻击者就会成功提升特权。 在第13章的”请求伪造”部分中描述了代表其他用户进行操作的方式。

前面描述的MySpace XSS蠕虫是此攻击有效载荷的一个示例。 它说明了这种攻击的力量,它可以代表大规模用户群以攻击者的最小努力来执行未经授权的操作。 该攻击使用Ajax技术(在第3章中进行了介绍)使用了一系列复杂的请求,以执行允许蠕虫传播所需的各种操作。

攻击者的主要目标是应用程序本身,但希望保持隐身状态,可以利用这种XSS攻击有效载荷使其他用户对应用程序执行其选择的恶意操作。 例如,攻击者可能导致另一个用户利用SQL注入漏洞将新管理员添加到数据库内的用户帐户表中。 攻击者将控制新帐户,但是对应用程序日志的任何调查都可能得出结论,认为由另一个用户负责。

2.4 Exploiting Any Trust Relationships

您已经看到XSS可以利用的一种重要的信任关系:浏览器使用从该网站发布的Cookie来信任从该网站接收到的JavaScript。 XSS攻击有时还可以利用其他几个信任关系:

  • 您已经看到XSS可以利用的一种重要的信任关系:浏览器使用从该网站发布的Cookie来信任从该网站接收到的JavaScript。 XSS攻击有时还可以利用其他几个信任关系:
  • 某些网络应用程序建议或要求用户将其域名添加到浏览器的”受信任的站点”区域。 这几乎总是不希望的,并且意味着可以利用任何XSS类型的漏洞在受害用户的计算机上执行任意代码执行。 例如,如果某个站点正在Internet Explorer的”受信任的站点”区域中运行,则注入以下代码会使Windows计算器程序在用户的计算机上启动:
    <script>
      var o = new ActiveXObject('WScript.shell');
      o.Run('calc.exe');
    </script>
    
  • Web应用程序通常会部署包含功能强大的方法的ActiveX控件(请参见第13章)。 一些应用程序试图通过在控件内部验证调用网页是否从正确的网站发布来防止第三方滥用。 在这种情况下,仍然可以通过XSS攻击滥用控件,因为在这种情况下,调用代码满足控件内实现的信任检查。

2.5 Escalating the Client-Side Attack

网站可能会以多种方式直接攻击访问它的用户,例如记录其击键,捕获其浏览历史记录以及对本地网络进行端口扫描。 这些攻击中的任何一种都可以通过易受攻击的应用程序中的跨站点脚本漏洞进行传播,尽管它们也可以通过用户偶然访问的任何恶意网站直接进行传播。 第13章的末尾将详细介绍此类攻击。

3. Delivery Mechanisms for XSS Attacks

识别了XSS漏洞并制定了适当的负载加以利用之后,攻击者需要找到一些将攻击发给应用程序其他用户的方式。 我们已经讨论了完成此操作的几种方法。 实际上,攻击者还可以使用许多其他传递机制。

3.1 Delivering Refl ected and DOM-Based XSS Attacks

除了将大量伪造的电子邮件通过电子邮件发送给随机用户的明显的网络钓鱼媒介之外,攻击者还可以尝试通过以下机制来传递反射的或基于DOM的XSS攻击:

  • 在有针对性的攻击中,伪造的电子邮件可能会发送给单个目标用户或少数用户。 例如,可以向应用程序管理员发送一封显然来自已知用户的电子邮件,抱怨特定的URL导致了错误。 当攻击者想要破坏特定用户的会话(而不是获取随机用户的会话)时,消息灵通且有说服力的定向攻击通常是最有效的传递机制。 这种攻击有时称为”鱼叉式网络钓鱼”。
  • 可以通过即时消息将URL提供给目标用户。
  • 第三方网站上的内容和代码可用于生成触发XSS缺陷的请求。 许多流行的应用程序允许用户发布有限的HTML标记,这些标记未更改显示给其他用户。 如果可以使用GET方法触发XSS漏洞,则攻击者可以在第三方网站上以易受攻击的URL发布IMG标签。 查看第三方内容的任何用户都会在不经意间请求恶意URL。

或者,攻击者可能会创建自己的网站,其中包含有趣的内容,以诱使用户访问。 它还包含使用户的浏览器向易受攻击的应用程序发出包含XSS有效负载的请求的内容。 如果用户登录到易受攻击的应用程序,并且恰好浏览到攻击者的站点,则该用户与易受攻击的应用程序的会话将受到威胁。

创建了合适的网站之后,攻击者可能会使用搜索引擎操纵技术来生成来自合适用户的访问,例如通过在网站内容内放置相关关键字并使用相关表达式链接到网站。 但是,此传递机制与网络钓鱼无关。 攻击者的网站不会尝试假冒它所针对的网站。

请注意,此传递机制可以使攻击者利用只能通过POST请求触发的,基于DOM的反射性和XSS漏洞。 有了这些漏洞,显然没有简单的URL可以馈送给受害用户来发起攻击。 但是,恶意网站可能包含使用POST方法且具有易受攻击的应用程序作为其目标URL的HTML表单。 页面上的JavaScript或导航控件可用于提交表单,从而成功利用此漏洞。

  • 在第三方网站攻击的一种变体中,已知一些攻击者会为横幅广告付费,该横幅广告链接到包含XSS有效载荷的URL的脆弱应用程序。如果用户登录到易受攻击的应用程序并单击广告,则与该应用程序的会话将受到威胁。由于许多提供商使用关键字将广告分配给与它们相关的页面,因此甚至出现了攻击特定应用程序的广告被分配给该应用程序本身的页面的情况!这不仅可以增强攻击的信誉,而且可以确保在攻击发生时,单击广告的人正在使用易受攻击的应用程序。此外,由于目标URL现在处于”现场”,因此攻击可以绕过用于防御XSS的基于浏览器的机制(本章稍后将详细介绍)。由于许多横幅广告提供商都是按点击收费的,因此该技术有效地使攻击者可以”购买”特定数量的用户会话。

  • 许多Web应用程序都实现了”告诉朋友”或将反馈发送给站点管理员的功能。 该功能通常使用户能够生成具有任意内容和收件人的电子邮件。 攻击者可能能够利用此功能,通过实际上来自组织自己的服务器的电子邮件来发送XSS攻击。 这增加了即使是技术渊博的用户和反恶意软件也接受它的可能性。

3.2 Delivering Stored XSS Attacks

用于存储的XSS攻击的两种传递机制是带内和带外。

带内传递在大多数情况下适用,当通过漏洞的主题的数据通过其主Web界面提供给应用程序时,将使用带内传递。 最终可以向其他用户显示用户可控制的数据的常见位置包括:

  • 个人信息字段-名称,地址,电子邮件,电话等
  • 文件名称,上载档案及其他项目
  • 对应用程序管理员的反馈或问题
  • 其他应用程序用户的消息,状态更新,评论,问题等
  • 在应用程序日志中记录并在浏览器中显示给管理员的所有内容,例如URL,用户名,HTTP Referer,User-Agent等
  • 用户之间共享的上载文件的内容

在这些情况下,只需通过将XSS有效负载提交到应用程序中的相关页面,然后等待受害者查看恶意数据来传递它。

带外传送适用于通过某些其他渠道将漏洞漏洞数据提供给应用程序的情况。 该应用程序通过此通道接收数据,并最终在主Web界面内生成的HTML页面中呈现数据。 这种传递机制的一个示例是已经描述的针对Web邮件应用程序的攻击。 它涉及将恶意数据发送到SMTP服务器,该服务器最终会在HTML格式的电子邮件中显示给用户。

3.3 Chaining XSS and Other Attacks

XSS漏洞有时可能与其他漏洞连锁在一起,造成毁灭性影响。 作者遇到一个应用程序,该应用程序在用户的显示名称中存储了XSS漏洞。 使用此项目的唯一目的是在用户登录后显示个性化的欢迎消息。显示名称从未显示给其他应用程序用户,因此最初似乎没有攻击矢量让用户通过编辑他们的用户来引起问题。 自己的显示名称。 在其他条件相同的情况下,该漏洞将被分类为极低风险。

但是,应用程序中存在第二个漏洞。 访问控制不良意味着任何用户都可以编辑任何其他用户的显示名称。 同样,此问题本身的意义很小:攻击者为什么会对更改其他用户的显示名称感兴趣?

将这两个低风险漏洞链接在一起,使攻击者可以完全破坏应用程序。 自动化攻击以将脚本注入每个应用程序用户的显示名称很容易。 每当用户登录到应用程序时,该脚本就会执行,并将用户的会话令牌传输到攻击者拥有的服务器。 该应用程序的某些用户是管理员,他们经常登录并且可以创建新用户并修改其他用户的权限。 攻击者只需等待管理员登录,劫持该管理员的会话,然后升级自己的帐户即可拥有管理权限。 这两个漏洞共同构成了应用程序安全性的重大风险。

在另一个示例中,可以通过跨站点请求伪造攻击来更新仅提供给提交数据的用户的数据(请参阅第13章)。 它还包含一个已存储的XSS漏洞。 同样,单独考虑每个错误可能被认为是相对较低的风险。 但是,如果将它们一起开发,则会产生重大影响。

Chapter 12 Attacking Users: Cross-Site Scripting(1) - Varieties of XSS
Chapter 12 Attacking Users: Cross-Site Scripting(3) - Finding and Exploiting XSS Vulnerabilities

: