利用XSSDetect自动检测跨站脚本漏洞

    [晴 November 12, 2008 12:42 | by !4p47hy ]
来源:51CTO

跨站脚本攻击XSS是Web安全中最常见的漏洞,本文将向读者介绍一种检测脚本攻击漏洞的自动化工具——XSSDetect。但是在正式介绍该工具之前,我们还是先来认识一下跨站脚本攻击XSS吧。

一、关于跨站脚本攻击XSS

    最开始的时候,跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,所以后来人们便把跨站脚本攻击缩写为XSS以示区别。

    跨站脚本攻击(也称为XSS)能够利用网站的漏洞窃取用户的个人信息。用户在浏览网站、使用即时通讯软件、甚至在阅读电子邮件时,通常会点击其中的链接。攻击者通过在链接中插入恶意代码,就能够盗取用户信息。攻击者通常会用十六进制(或其他编码方式)将链接编码,以免用户怀疑它的合法性。网站在接收到包含恶意代码的请求之后,如果没有对用户的输入进行严格的过滤的话,就会产成一个包含恶意代码的页面,而这个页面看起来就像是那个网站应当生成的合法页面一样。许多流行的留言本和论坛程序允许用户发表包含HTML和javascript的帖子,如果用户A发表了一篇包含恶意脚本的帖子,那么用户B在浏览这篇帖子时,恶意脚本就会执行,从而盗取用户B的会话信息。

XSS不仅常见,而且危害颇深。为了搜集用户信息,攻击者通常会在有漏洞的程序中插入JavaScript、VBScript、ActiveX或Flash以欺骗用户。用户一旦中招,就会导致用户帐户被盗,用户设置被篡改,cookie失窃,等等。

二、使用XSSDetect检测跨站脚本XSS漏洞

    上面我们对跨站脚本攻击(XSS)漏洞及其危害做了简单介绍。接下来,我们看看如何使用自动化工具来检测跨站点脚本漏洞。

    作为Web应用程序中最常见的弱点的跨站脚本攻击漏洞,我们发现的越早越好,最好能在开发初期就能将它们消灭在萌芽状态。古人云,工欲善其事,必先利其器。要想发现XSS漏洞的话,使用手工方式当然未尝不可,但是效率太低,我们今天要为大家介绍一款自动化的工具来检测XSS漏洞,这是一款微软公司为开发人员提供针对跨站脚本攻击的静态分析工具:XSSDetect,当然,它对安全渗透测试人员也也很有用。

XSSDetect是精简版的.NET代码分析工具,原本供微软内部人员寻找应用软件的安全漏洞之用,大概是受开源思想影响,现在已经可以免费下载了。XSSDetect下载地址http://www.microsoft.com/Downloads/details.aspx?FamilyID=19a9e348-bdb9-45b3-a1b7-44ccdcb7cfbe&displaylang=en

XSSDetect实际上是一个Visual Studio插件,它可以识别ASP.NET Web应用程序中的非持久性的XSS漏洞。同时,XSSDetect也是一种静态分析工具,它使用微软的CCI库进行分析。插件FxCop和XSSDetect都使用了CCI程序库,但是XSSDetect要比FxCop插件更大,因为XSSDetect利用过程间数据流分析技术检测XSS安全漏洞。它使用了源(起点,输入的入口点)和汇(终点,输出的方法)的思想来检测可能引起XSS安全漏洞的数据通路。下面列出了一些源和汇:

Highslide JS


XSSDetect工作时,会为二进制文件建立一个庞大的数据图,并标识这些源和汇的数据通路。只要发现了使用编码库(例如AntiXss库)的数据通路,就将其排除在结果之外。要想查看更多源、汇和编码规则的信息,可以浏览%PROGRAMFILES%\Microsoft\XSSDetect\Config。下面我们来考察一个能够被XSSDetect检测到漏洞的代码。
//在.aspx页面中的代码//将隐藏字段的值写回该页Response.Write(hidHiddenInput.Value);//设置链接按钮的文本LinkButton1.Text = String.Format(txtInput.Text, "LinkButton1.Text");//HTML表对象Table1.Caption = String.Format(txtInput.Text, "Table1.Caption");Table1.Rows[0].Cells[0].Text = String.Format(txtInput.Text, "Table1.Rows[0].Cells[0].Text");//Literal对象的文本Literal1.Text = String.Format(txtInput.Text, "Literal.Text");//复选框和标签的文字CheckBox1.Text = String.Format(txtInput.Text, "CheckBox1.Text");Label1.Text = String.Format(txtInput.Text, "Label1.Text")//XSSstring strInput;protected void Page_Load(object sender, EventArgs e){strInput = Request.QueryString["message"];this.SetMessage(strInput);}private void SetMessage(string input) {Label1.Text = input;}

XSSDetect可以检测出ASP.NET代码中XSS安全漏洞的很多变体。XSSDetect目前适用于Visual Studio 2005,将来还可以在Visual Studio 2008上使用。安装后进入工具菜单,选择XSS detect菜单项,这时出现如下所示的窗口。

Highslide JS

  
     图1  XSSDetect的界面

我们只要单击绿色的“播放”/“运行”按钮(就是工具栏中左边第一个按钮),它便开始分析。请确保已经安装Visual Studio 2005和所有参考资料,因为XSSDetect将汇编源代码来分析二进制文件。XSSDetect的另一个特性是单击帮助图标即可打开帮助文件,从这里可以了解到更多的信息。

三、小结

跨站脚本攻击即XSS是Web安全中最常见的漏洞,本文首先对该漏洞做了简单解释,然后重点向读者介绍一种检测脚本攻击漏洞的自动化工具——XSSDetect。我们不仅介绍了它的基本原理,还以一个代码示例进行了演示。希望本文对您的学习能够有所帮助。
Technology | Comments(0) | Trackbacks(0) | Reads(9016)
Add a comment
Emots
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
Enable HTML
Enable UBB
Enable Emots
Hidden
Nickname   Password   Optional
Site URI   Email   [Register]
               

Security code Case insensitive