在测试过程中,我们可以改变测试语句的大小写来绕过XSS规则:
比如:可以转换为:
有时候我们需要关闭标签来使我们的XSS生效。
比如:“>
我们可以对我们的语句进行hex编码来绕过XSS规则
比如:可以转换为:
%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%22%78%73%73%22%29%3b%3c%2f%73%63%72%69%70%74%3e
magic_quotes_gpc=ON是php中的安全设置,开启后会把一些特殊字符进行轮换,比如’(单引号)转换为\’,”(双引号)转换为\”,\转换为\\
比如:会转换为,这样我们的xss就不生效了。
针对开启了magic_quotes_gpc的网站,我们可以通过javascript中的String.fromCharCode方法来绕过,我们可以把alert(“XSS”);转换为
String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34,41)那么我们的XSS语句就变成了
String.fromCharCode()是javascript中的字符串方法,用来把ASCII转换为字符串。
最后使用包含即可。
如果用户能随心所欲引入<>标记,那他就能操作HTML标记,然后就能通过
当然如果对"<>"和script等进行了过滤,上面这个就无法执行了
很多HTML标记中的属性都支持javascript:[code]伪协议的形式,这就给了注入XSS可乘之机,例如:
这里即便对传入的参数过滤了<>,XSS还是能发生(前提是该标签属性需要引用文件)
假设过滤函数进一步又过滤了javascript等敏感字符串,只需对javascript进行小小的操作即可绕过,例如:
这里之所以能成功绕过,其实还得益于JS自身的性质:Javascript通常以分号结尾,如果解析引擎能确定一个语句时完整的,且行尾有换行符,则分号可省略
而如果不是完整的语句,javascript则会继续处理,直到语句完整结束或分号。
像可以实现绕过
另外还可以把、、 等字符插入代码的头部或任意地方
如果不能依靠属性进行跨站,那么还可以利用事件处理函数
事件既能让JS脚本运行,自然也可以执行跨站,另外像onerror、onMouseover等都可利用的是事件处理函数
之所以说CSS样式表是个很不错的载体,是因为CSS不需要嵌入到HTML代码中,可以直接从文件或其他地方进行引用. 另外CSS同样隐蔽、灵活,不过不同
浏览器之间不能通用,如:
大小写混用:
不使用引号或者构造全角字符也能扰乱过滤规则
还有像CSS中/**/会被浏览器忽略,\和\0同样或被浏览器忽略,同样可以用来绕过:
上面说到过编码,这里加以补充,除了像ASCII,其实也可以采用、、等形式,同样j的形式也是可以的
......
另外除了像上面多次提交,也可以引用其他变量如:eval(qUserInfo.spaceName)形式,由于qUserInfo.spaceName是可控变量,因此改变其值就可以绕过长度限制了