Ajax爬虫与DOM_XSS检测

Download Report

Transcript Ajax爬虫与DOM_XSS检测

Ajax爬虫与DOM_XSS检测
王智勇
2013-01-16
两种爬虫引擎比较
传统爬虫引擎
协议驱动:
1.通过socket建立连接,收集请求与返回内容
2.分析返回页面,收集新的链接,脚本,flash等数据
Ajax爬虫引擎
事件驱动:
1.目标资源在javascript脚本中,或者嵌入到DOM中,需要爬虫理解并触
发事件行为
2.DOM事件处理以及动态DOM内容的检索
事件驱动爬虫解决方案
一.独立的JS解析器
Ruby - rbnarcissus
Python - pynarcissus (Google)
二. 浏览器(IE)自动机(Automation)
Ruby - Watir
Python - selenium(多语言平台,包含java等)
Java - HtmlUnit(无界面,JUnit的底层)
参考文档:Crawling_AJAX_SShah
HtmlUnit简介
 项目地址:http://htmlunit.sourceforge.net/
基于Htmlunit的Ajax爬虫
1.检索页面中所有触发事件on*,定位到每个元素
2.检查对应元素类型,赋予相应值,例如
3.模拟浏览器触发事件
4.将捕获到的ajax请求保存,放入到普通爬虫队列中
基于Htmlunit的Ajax爬虫
优势:
1.无界面,速度快
2.完全模拟浏览器操作,无需担心解析错误或跨
域等问题
3.开源,浏览器内核,可自定义浏览器底层接口
(强于selenium等)
基于Htmlunit的DOM_XSS检测
有了Htmlunit的JS引擎及DOM树交互遍历API,检测
DOM XSS实际已变得非常简单。我们可以尝试在页面
中插入标签或属性,看看他会不会被htmlunit解析出来
,如果可以则认为有漏洞。
来看个简单的例子,如下图,test.html存在DOM XSS
漏洞,我们尝试在test.html中插入恶意标签
'><script>alert(111)</script>,如果系统成功解析出
<script>标签(触发window.alert),则说明检测到
DOM XSS漏洞。除了插入标签,对于img,iframe等
特殊标签,我们也可尝试插入属性。或者如果在DOM
遍历出了异常的节点,也可以说明存在DOM XSS漏洞
。
基于Htmlunit的DOM_XSS检测
基于Htmlunit的DOM_XSS检测
基于Htmlunit的DOM_XSS检测
这里只是举了一个最简单的DOM XSS例子,实际上有些
DOM XSS需要一些JS点击动作才能触发,对此我们可以
遍历执行所有的点击动作再交互遍历DOM节点,找出异
常节点。
后期工作:
有些DOM XSS需要在特定的if逻辑里才能触发,我们可以
Hook HtmlUnit的JS引擎,遍历所有JS路径。
基于Htmlunit的DOM_XSS检测
• 一种关于Eval等可执行函数过滤不严导致的XSS
基于Htmlunit的DOM_XSS检测
关于这类XSS,目前的方法可以通过HOOK JS引擎,或
者将payload设置为alert()来触发。
基于Htmlunit的DOM_XSS检测
• 实际上,我们还可以基于HtmlUnit做很多其他事情,例如
任意JS文件引入检测,后续将对这些系统另文介绍。
• DOM XSS的检测方法还有很多,比如白盒代码审计、浏
览器插件检测等,这里只是对一个看起来快速有效的方案
的尝试,欢迎大家多多批评指正。
• 本文档编写同时腾讯安全中心TSRC也发布一个类似的基
于QtWebKit的DOM XSS技术文档,其实思想大同小异。
• http://security.tencent.com/index.php/blog/msg/12
Q/A
谢谢!
领 航 信 息 安 全