方法论
发掘漏洞的时间要具体到是检测什么目标了,找 Google 的,和找腾讯的时间肯定不会一样。 至于是如何发现的,不同类型的 XSS 漏洞,可能不尽相同。
- 反射型 以及一些 DOM 型,一般建议是开发一些自动化的扫描工具进行扫描,并辅以手工分析。 另外一方面,搜索引擎也是快速寻找具有缺陷参数的好办法。 如何进行具体分析,Cookbook 中会讲到 ,虽然不尽全面,但是灵活运用,应能直面惨淡的人生。
- 存储型
- 单纯的输入->存储->输出点 的情况 (输入与输出点关系:一个地方输入,会有多个地方输出;不同地方输入,同一地方输出。绕了点 T T …)。常规测试是正向直接输入内容,然后在输出点查看是否未过滤,当然你也可以先大胆假设输出点未过滤,反向寻找在何处进行输入,进而测试。
- 富文本,则需要对过滤器进行fuzz测试(人脑+自动化)了,正好乌云drops上有乌乌发了一篇:fuzzing XSS filter。
- 第三类,就是一些WEB应用中所出现的 DOM-存储型 XSS,即输出点的无害内容,会经过 JS 的一些 dom 操作变得危险(本质上和 第 1 点里的 DOM XSS 成因是一样的)。这一类的挖掘方法,个人觉得不太好总结。
- 需要熟悉WEB应用的功能。
- 知道功能所对应的 JS 代码有哪些。
- 凭直觉猜测程序员会在哪些功能出现可能导致 XSS 的过滤遗忘或过滤错误(直觉是唬人的,其实就是你知道某些功能会需要某些代码实现,而这些代码常常容易出错)。
- 需要有较好的代码阅读跟踪能力(JS 还是比较难读的,有些代码被混淆过,十分不易阅读,就会涉及到如何下断点进行调试的小技巧)。 我想,挖掘这一类的前提可能是需要有不错的前端开发经验,写多了,才会有足够的嗅觉。
其实有时候专门去找漏洞会很累的,大什么怡情,小什么伤身,因此,我们还不如开心的敲敲代码,听听歌,静待生命中那些意外的收获。 这些收获经常来自身边的人发给你的一些事物。
Cookbook
- 什么都没过滤的入门情况
- 输出在<script></script>之间的情况
- 输出在HTML属性里的情况
- 宽字节复仇记 [QQ邮箱基本通用]
- 反斜线复仇记
- 换行符复仇记
- 宽字节、反斜线与换行符一起复仇记
- Dom Xss入门 [显式输出]
- Dom Xss入门 [隐式输出]
- Dom Xss进阶 [邂逅eval]
- Dom Xss进阶 [善变iframe]
- Dom Xss进阶 [路径con]
- Dom Xss实例 [Discuz X2.5]
- Flash Xss入门 [navigateToURL]
- Flash Xss进阶 [ExternalInterface.call第一个参数]
- Flash Xss进阶 [ExternalInterface.call第二个参数]
- XSS过滤器绕过 [通用绕过]
- XSS过滤器绕过 [猥琐绕过]
- 存储型XSS入门 [什么都没过滤的情况]
- 存储型XSS入门 [套现绕过富文本]
- 存储型XSS进阶 [猜测规则,利用Flash addCallback构造XSS]
工具
- Chrome 开发者工具(F12)
- Charles
- JPEXS Flash Decompiler
来自知乎:http://zhuanlan.zhihu.com/wooyun/19756127