改变测试用例
我恐怕无法充分对此进行说明:研究输入的值会输出什么样的 HTML 页面很重要。假如他们不能产生输出,那么不要在他们上面浪费时间。假如能够,请进行研究,因为您需要根据输出对测试进行相应的修改。我使用了各种变化形式来找出能接受和显示脚本代码的参数。因为这涉及太多内容,因此在这里无法一一进行讨论,但是请务必注意以下几种情况:
1.>"'><script>alert(‘XSS')</script>
2.>"'><img src="javascript:alert('XSS')">
3.>"'><img src=javascript:alert("XSS")>
4.AK" style="background:url(javascript:alert('XSS'))" OS"
5."+alert('XSS')+"
6.<table background="javascript:alert(([code])"></table>
7.<object type=text/html data="javascript:alert(([code]);"></object>
8.<body onload="javascript:alert(([code])"></body>
有许多变化形式能够尝试。关键在于了解程式究竟使用何种方式处理输入和显示输出页面。如同这些例子所展示的,常见的变化形式经常是在脚本代码前面加上 “>””,以尝试封闭网站可能在输出中生成的标记。还能够对代码进行 URL 编码,尝试绕过服务器端的输入过滤功能。此外,因为尖括号“<>”通常会在输入时被过滤和从输出中删除,所以还必须尝试无需尖括号的 XSS,例如 ”&{alert('XSS')};”
持久和动态
找出一个成功的 XSS 颇费周折,因为在开始时 XSS 攻击可能并不是那么显而易见的。随便举一个例子,假如向网站添加一条新留言并在“msgTitle”值中注入代码,在提交数据后,您可能不会立即看到脚本代码被执行。但是,当您访问留言板的时侯,将会在 HTML 页面中使用“msgTitle”值并将其作为脚本代码执行。这种情况被称作持久性 XSS 攻击,假如包含脚本代码的值将被保存到客户端或后端系统并在稍候的时间被执行,便会发生此种攻击。
而和此相对的是动态 XSS 攻击,这种攻击会立即执行并只发生一次。比如,假如某个链接或 GET 请求在某个用来控制页面输出的查询字符串中包含了脚本代码,那么在点击链接后会立即显示输出。
总结
XSS 测试通常只是整个 Web 应用程式安全性审查工作的一小部分,但是在执行测试时必须细致和完全。在多年的工作中,我一直强调使用电子表格或其他方式来记录站点的任何页面,连同每个页面接受的输入值(查询字符串、cookie、POST 数据、SOAP),这是在测试前必须进行的一个重要步骤。和此同等重要的是,理解输入连同他在输出的 HTML 页面上的呈现方式。假如您知道了应用程式处理输入的方式,就会很迅速地完成许多工作。不要浪费时间测试那些不会作为输出显示的输入。和研发人员和 PM 进行交流,并在开始测试前建立完善的威胁模型。
XSS 漏洞是什么样的呢?
作为一名 Web 研发人员或测试人员,您肯定知道 Web 应用程式的技术基础是由 HTTP 和 HTML 组成的。HTTP 协议是 HTML 的传输机制,可使用代码设计 Web 页面布局和生成页面。
假如 Web 应用程式接受用户通过 HTTP 请求(如 GET 或 POST)提交的输入信息,然后使用输出 HTML 代码在某些地方显示这些信息,便可能存在 XSS 漏洞。下面是个最简单的例子:
1. Web 请求如下所示:
GET http://www.somesite.com/page.asp?pageid=10&lang=en&title=Section Title
2. 在发出请求后,服务器返回的 HTML 内容包括:
<h1>Section Title</h1>
能够看到,传递给“title”查询字符串参数的用户输入可能被保存在一个字符串变量中并且由 Web 应用程式插入到 <h1> 标记中。通过提供输入内容,攻击者能够控制 HTML。
3. 现在,假如站点没有在服务器端对用户输入加以过滤(因为总是能够绕过客户端控件),那么恶意用户便能够使用许多手段对此漏洞加以滥用:
攻击者能够通过摆脱 <h1> 标记来注入代码:
http://www.somesite.com/page.asp?pageid=10&lang=en&title=Section Title</h1><script>alert(‘XSS attack’)</script>
这个请求的 HTML 输出将为:
<h1>Section Title</h1><script>alert(‘XSS attack’)</script>
即便是这个最简单的例子,攻击者也能够利用此连接完成数不清的事情。让我们看看会有哪些潜在的威胁,然后讨论一些更高级的测试方法。
XSS 攻击的威胁有多么严重?
由于能够在生成的 Web 页面中注入代码,能想到的威胁有多么严重,就能够有多么严重的威胁。攻击者能够使用 XSS 漏洞窃取 Cookie,劫持帐户,执行 ActiveX,执行 Flash 内容,强迫您下载软件,或是对硬盘和数据采取操作。
只要您点击了某些 URL,这一切便有可能发生。每天之中,在阅读来自留言板或新闻组的受信任的电子邮件的时侯,您会多少次地单击其中的 URL?
网络钓鱼攻击通常利用 XSS 漏洞来装扮成合法站点。能够看到很多这样的情况,比如您的银行给您发来了一封电子邮件,向您告知对您的帐户进行了一些修改并诱使您点击某些超链接。假如仔细观察这些 URL,他们实际上可能利用了银行网站中存在的漏洞,他们的形式类似于 http://mybank.com/somepage?redirect=<script>alert(‘XSS’)</script>,这里利用了“redirect”参数来执行攻击。
假如您足够狡猾的话,能够将管理员定为攻击目标,您能够发送一封具备如下主题的邮件:“求救!这个网站地址总是出现错误!”在管理员打开该 URL 后,便能够执行许多恶意操作,例如窃取他(或她)的凭证。
好了,现在我们已理解了他的危害性 -- 危害用户,危害管理员,给公司带来坏的公共形象。现在,让我们看看本文的重点 -- 测试您的网站是否存在这些问题。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



