目录
1.1、简介:
确定XSS漏洞的基本方法是使用下面这个概念验证攻击字符串
">
这个字符串被提交给每个应用程序页面中的每一个参数;同时攻击者监控它的响应,看其中是否出现相同的字符串。如果发现攻击字符串按原样出现在响应中,几乎可以肯定应用程序存在XSS漏洞。
如果仅仅是为了尽可能快地确定应用程序中存在的某种XSS漏洞,以向其他应用程序用户实施攻击,那么这个基本方法可能是最为有效的方法,因为它可以实现高度自动化, 而且很少生成错误警报。但如果是对应用程序进行复杂的测试,从而确定尽可能多的漏洞,那么在应用基本方法的同时,还需要组合使用更加复杂的技巧
几种情况下, 通过基本的检测方法可能无法确定应用程序中存在的XSS漏洞:
1、许多应用程序实施基于黑名单的初步过滤, 试图阻止XSS攻击。通常, 这些过滤在请求参数中寻找)
绕过输入过滤,使用触发型事件(如"οnfοcus="alert(1))
JavaScript字符串
页面中:
终止单引号,用分号终止整个语句,直接处理想要执行的JavaScript(如';alert(1); var foo=')
为阻止JavaScript解释器出现错误,声明一个变量,使单引号后面的代码终止(或者使用//结束)
包含URL的特性
页面中:说明
直接插入到href属性中,属性可能包含一个使用javascript:协议的URL(如javascript:alerrt(1))
输入将反射到标签属性中,还可以注人一个事件处理器(如"οnclick="javascript:alerrt(1))
过程:
对于在前面步骤中记下的每一个潜在的XSS漏洞, 采取:
1、检查HTML源代码, 确定受控制的字符串的位置
2、如果字符串出现在几个位置, 应将每个位置当做一个潜在的漏洞, 分别进行分析
3、根据用户控制的字符串在HTML中的位置, 确定需要如何对其进行修改以使任意JavaScript得以执行(有大量方法可成为传送攻击的有效工具)
4、向应用程序提交设计的字符串, 测试是否有用。如果设计的字符串仍然按原样返回,表示应用程序存在XSS漏洞。使用一段概念验证脚本显示一个警报对话框, 重复检查语法是否正确, 并确定响应显示时,对话框是否出现在浏览器中
2.4、探查防御性过滤
通常情况下最初提交的攻击字符串并不会被服务器按原样返回, 因而无法成功执行注入的JavaScript。接下来应确定服务器对输入进行了哪些处理:
1、应用程序或Web应用程序防火墙保护的应用程序发现一个攻击签名完全阻止了输入
2、应用程序已经接受了输入, 但对攻击字符串进行了某种净化或编码
3、应用程序把攻击字符串截短至某个固定的最大长度