细品某语义waf的xss防护(1)
问题背景
假设攻击场景如下
1 | xss漏洞输出位置如下: |
验证在这个场景下厂商的安全防护策略
分析思路:
- 改变payload,根据拦截情况推测安全防护策略
分析过程
1 | a=<xxx/onmouseover="xxx.xxx=aaaa"> 不拦截 |
说明区分了认识的标签和不认识的标签
1 | 'a=<div/oxx="xxx.xxx=aaaa">' 不拦截 |
拦截on事件,只要以on开头就拦截
1 | a=<xxx/onmouseover="xxx.xxx=aaaa('';"> on属性值中少一个右括号就不拦截,说明判断js语法是否正确 |
未知标签 && on事件 && 解析on属性中js && on属性中调用了函数 则拦截
1 | a=<xxx/onxxx=a();> 不拦截 |
on属性值需要大于一定长度
1 | a=<img/onxxxx="aaa"> 不拦截 |
已知标签on属性值大于一定长度则拦截
总结
存在HTML解析和JS解析
安全防护策略可能是:
- HTML解析 && 未知标签 && on事件 && on属性值大于一定长度 && 对on属性值做JS解析 && on属性中调用了函数 则拦截
- HTML解析 && 已知标签 && on事件 && on属性值大于一定长度 则拦截