本文发表自RAID2020年,作者来自微软、东北大学和纽约大学。一项对反射型XSS的实证分析研究。
本文从XSSED和OPENBUGBOUNTY两个网站收集了近十年来的反射型XSS提交的payload。 两个测试集OBB的比较新一些。
在此即上进行EXP分析,设计了一个验证系统。证明这些反射型的EXP是可以被精确的识别出来的。
整个系统分为动态和静态两个佐证部分,尝试识别出每个exp的trick:
静态:
静态部分是:EXP Extraction 到 Static Feature Extraction。 其实我觉得还带是正则。
动态:
动态部分是:EXP Execution 到 Dynamic Feature Extraction。 将收集的response的page使用chrome和FireFox加载,在沙箱环境中观察,因为有一些触发条件需要特定操作或者加载资源,因此作者分了四个round,后三个round需要操作(Mouse Move, Mouse Click, Network Error),通过在response page中插桩,观察XSS执行里的trick。
下面来看看对payload的一些分统计:
Context( Escaping and Creation)技术:
这一类主要是指逃逸+构造,日常使用中确实最多。细分为: HTML环境注释逃逸法、 JS环境注视逃逸法、属性环境标签闭合逃逸+构造标签、属性环境属性闭合+构造属性、JS环境代码续接。 (我瞎编的:expressionless:)
- Synatx Confusion技术
这一类就是语法混淆,包括: 方法名的额外括号、大小写混淆、 unicode编码混淆(乱入:注意方法括号不能unicode)、第四个厉害了没听说过、 空白符混淆、 斜杠替换空格(还有alert(/xss/))、 标签解析混淆(频率还很高,mark!)
- Control Flow Modification技术
此技术在OBB的测试集中使用比较多。也就是有48.2%的
这个分类粒度是控制流更改(可能喝上两种不是一个维度)。主要是躲过<script>标签过,有1, 自动触发事件 2,exploit-triggered events(咋翻译?) 3,用户交互事件 4, 将事件赋给一个变量! 5,抛异常!!
这个类型分的有点混乱,可能我还没看仔细。
字符解释技术
能够将字符当作JS代码解释的方法, 1,document.write 2, eval 3, setTimeout 4, top (写一遍加深印象...)
总结
En...还是闭合标签感觉爽些。
Tips
看完这篇文章其他部分没仔细看, 光学姿势去了...
- 可能有些位置就是可以用多种方法,最近趋于喜欢直接用svg做注入
- 是时候总结一波姿势了