通常XSS漏洞验证的总结,但对于DOM型的XSS漏洞接触得比较少,本身这方面的东西少得可怜,不太了解,后面还须要总结的。 css
几种状况验证方式: express
1. 参数值放在标签属性值中: 函数
(1) 事件属性:可直接输入脚本验证; 编码
(2) style属性:经过expression引入脚本(根据是否对分号、冒号及固定结构进行过滤构造不一样的结构); spa
(3) 通常属性:经过引号把原属性值进行截断,构造出事件属性或style属性(若是是隐藏域的话通常构造style属性)。 orm
2. 参数值放在普通标签(非script标签)中: seo
(1) 经过尖括号引入新的标签(两类:容许script、不容许script); 事件
3. 参数值放在script标签中: ip
(1) 对尖括号进行过滤:根据参数所在位置上下文结构构造数据: 字符串
a. 未对引号、分号、逗号和冒号进行过滤:任意构造;
b. 引号未进行过滤,分号、逗号和冒号部分过滤:根据上下文进行构造(通常先闭合原有引号)
c. 引号进行过滤,参数放在引号中:无解;
(2) 对尖括号不进行过滤:闭合原有script标签,引入新的script标签。
验证过滤不彻底状况:
1. 黑名单过滤验证:
(1) 对expression过滤:插入混淆字符绕过:在css中,/**/是注释字符,除了/**/外,字符”\”和结束符”\0″也是被忽略的,能够用来混淆字符(这个直接引用别人的,但验证过了,OK了);
(2) 对于长度的限制:可经过分批加入,但要在同一页面(如:<script>var z = z + "alert"</script>)。
2. 特殊字符过滤注意:
(1) 对单引号进行过滤:
a. 注入脚本实例:
<div onmouseover="a='al'+'ert(2)';e=eval;e(a);">mouse here!
b. 修复1:对单引号进行过滤或转义
c. 绕过实例:
<div onmouseover="a='al'+'ert(2)';e=eval;e(a);">mouse here!
d. 绕过原理:ASCII编码在属性值中会转为相应字符(即:' ->')。
(2) 经过事件传递的转义字符串发生二次转义:
a. 注入脚本实例:
<div onmouseover="test('<ScriPt>alert(007)</ScrIpt>')">
b. test函数接收到的字符经转义变为:<script>alert(007)</script>