天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧安全 >> 正文

基于QtWebKit的DOM XSS检测技术

2013-1-1151CTOBingo

  1、前言

  什么是DOM XSS

  DOM-based XSS是一种基于文档对象模型(Document Object Model,DOM)的XSS漏洞。简单理解,DOM XSS就是出现在JavaScript代码中的漏洞。与普通XSS不同的是,DOM XSS是在浏览器的解析中改变页面DOM树,且恶意代码并不在返回页面源码中回显,这使我们无法通过特征匹配来检测DOM XSS,给自动化漏洞检测带来了挑战。本文将介绍一种基于QtWebKit的DOM XSS检测系统以及本系统目前取得的效果和一些不足之处。

  2、QtWebKit

  2.1 什么是QtWebKit

  首先了解下WebKit,WebKit是一个开源的浏览器引擎,WebKit 所包含的 WebCore 排版引擎和 JSCore 引擎分别来自于 KDE 的KHTML 和 KJS,拥有源码结构清晰、渲染速度快等特点。苹果的Safari及Google的Chrome都是基于Webkit引擎开发的浏览器。

  QtWebkit是将Webkit移植到QT的一个开源项目,具有移植性强,全面支持HTML、CSS、JS,支持HTML5,支持Flash等各种扩展插件,封装较好及简单易用等特点。Qt内核为我们提供了Networking、GUI等核心功能模块,Qt API使我们可以很方便的在QT中开发应用层程序,模拟JS执行及与DOM树交互的过程。简单来说,使用QtWebKit可以很方便的开发出一款个性化定制的浏览器。

  如图,左边是WebKit引擎,右边是基于WebKit的各种应用或封装。

  2.2 QtWebKit的编译与运行

  QtWebKit可以很好的支持跨平台应用。首先我们需要安装QT环境,笔者采用的版本是qt-everywhere-opensource-src-4.8.2,安装QT环境依赖于很多基础库,需要耐心的依次安装,网上有很多参考文档,这里不再赘述,安装成功后则可以运行qmake –h查看使用帮助。

  接下来我们需要编译安装WebKit引擎,笔者采用的版本是WebKit-r90370。笔者在编译时遇到不少变量未声明,未定义的引用等编译错误,不过只要有源码,什么都不怕,耐心查看源码后均已解决。当你看到下图时,恭喜你,整个QtWebKit环境已经编译成功了。

  编译成功后我们就可以尝试调用QtWebKit的API编写应用程序了,要想基于QtWebKit开发个带GUI界面的应用程序(比如一款简单的浏览器)并不难,这里笔者主要想探讨下如何使我们的应用程序在后台无界面运行。由于QT自带的GUI界面既影响系统运行速度,又对我们的检测功能毫无意义,所以必须考虑剥离。笔者采用的方法是从源码出发,屏蔽相关的GUI调用,然后重新编译引擎,目前我们的引擎已能较稳定的后台无界面运行了。

  3、基于QtWebKit的DOM XSS检测系统

  3.1 检测原理

  有了QtWebKit的JS引擎及DOM树交互遍历API,检测DOM XSS实际已变得非常简单。我们可以尝试在CGI中插入标签或属性,看看他会不会被QtWebKit解析出来,如果可以则认为有漏洞。

  来看个简单的例子,如下图,domxss_img.html存在DOM XSS漏洞,我们尝试在domtest.html中插入恶意标签,如果系统成功解析出WLK标签,则说明检测到DOM XSS漏洞,alert(888)是我们的一个测试用例。除了插入标签,对于img,iframe等特殊标签,我们也可尝试插入属性。

  这里只是举了一个最简单的DOM XSS例子,实际上有些DOM XSS需要一些JS点击动作才能触发,对此我们可以遍历执行所有的点击动作再交互遍历DOM节点,部分代码如下图所示。有些DOM XSS需要在特定的if逻辑里才能触发,我们可以Hook QtWebKit的JS引擎,遍历所有JS路径。

  3.2 系统效果

  本系统自2012年11月中旬上线以来,扫描腾讯所有域名,上百万个URL。共有效发现数千个URL存在DOM XSS漏洞。以下是系统发现的漏洞工单趋势图(一个工单可能包含若干个URL)

  3.3 不足之处

  目前我们的系统还存在一些漏扫及漏报,漏报主要是QtWebKit自身的编码问题导致,比如少部分TSRC上报的DOM XSS漏洞,仅在IE下能触发,在Chrome下无法触发(Chrome也是使用WebKit引擎),系统暂时无法检测出来。

  另一个问题是SuperHei大牛在TSRC上报的Eval等可执行函数过滤不严导致的XSS,笔者简单模拟了这种漏洞触发场景,如下图,这种并非通过插入新标签或属性来触发漏洞,系统暂时未能有效发现。

  由于QtWebKit是开源的,以上两个问题均可排期解决。特别说明下,Eval的问题可以通过Hook JS的特定函数来解决。

  4、总结

  实际上,我们可以基于QtWebKit做很多其他事情,比如开发爬取Web2.0链接的爬虫,DOM JUMP检测,任意JS文件引入检测,后续将对这些系统另文介绍。

  DOM XSS的检测方法还有很多,比如白盒代码审计、浏览器插件检测等,笔者这里只是对一个看起来快速有效的方案的尝试,欢迎大家多多批评指正。

  最后感谢黑哥、牧马人等业界安全大牛在TSRC上反馈的漏洞,每一个漏洞都鞭策着腾讯安全漏洞检测团队不断前进,不断改进我们的漏洞检测系统。

本文来源:51CTO 作者:Bingo

相关文章
没有相关文章
声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。文章是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。 Email:support@txwb.com,系统开号,技术支持,服务联系微信:_WX_1_本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行