剑走偏锋:基于静态检测的IE漏洞检测工具IEFuzz

简介:

本文主要分享一款静态的IE浏览器模糊测试工具,该工具被称为IEFuzz。我们知道,像其他大部分软件一样,浏览器也往往通过两种方式进行模糊测试,一种为静态,另外一种则为动态。

在此前,我们在其他文章中也了解过其他的Fuzzer,如X-Fuzzer,PKAV HTTP Fuzzer,也了解过相关的Fuzzing方法,如从零开始学Fuzzing系列:浏览器挖掘框架Morph诞生记等。本文主要讲述静态浏览器Fuzzer的情况。

在当下,动态浏览器Fuzzer占据着主流,因为它们的运行效率高(纯粹是用JavaScript写的)。然而,当我们在进行动态Fuzzing 的时候,往往面临着一个共同的问题,就是“异常事件重现”。所以一般我们在构建JS 浏览器 Fuzzer时都需要非常仔细,否则在运行过程中可能会由于浏览器Fuzzer是动态的,将导致异常事件不可重现。

所以,在Fuzzing之前,我们往往需要考虑以下几个方面的问题:

1、测试实例(样本)如何生成?
2、对异常事件如何监控?
3、对于引起异常事件的测试实例如何保存?
4、异常事件如何重现?

对于上述使用动态 Fuzzer面临的问题,另外一种解决思路是,采用静态Fuzzer进行检测。虽然静态Fuzzer效率较低,但是一般都可以重现异常事件的。

IEFuzz简介

该静态IE fuzzer 是用python编写的,包括使用到以下模块:

pywin32com ——用于加载或者重载*.html测试实例;

pydbg——用于监控IE浏览器的异常事件;

paimei——用于生成异常事件的dump文件,下载链接为:paimei。

IEFuzz使用配置

为了能够顺利进行Fuzzing,我们需要在IE设置中做如下更改。

1、首先,因为Fuzzer 需要在本地加载测试实例(如加载路径为file://c:/fuzzer/testcases/temp.html)所以应该先将IE的ActiveX告警提示关闭,通过如下步骤:

(1)工具->Internet 选项->安全->自定义级别;

(2)随后将ActiveX告警提示关闭。

2、接着,为了能够使用 Python win32com来监控IE,我们还需要关闭IE的保护模块。但是请注意其中的风险。

(1)工具->Internet 选项->安全->受信任的站点:自定义级别为低;

(2)工具->Internet 选项->安全->Internet:自定义级别为中,同时关闭保护模式;

(3)工具->Internet 选项->安全->受限站点:关闭保护模式。

编写测试实例

首先我们可以基于该fuzzer编写自己的静态测试用例生成器。之后可以将其放在/TestCases文件夹中。在GitHub源码中, 也提供了一个样本以供参考:’TestCases/SampleTestCase.py。因源码篇幅较长,链接如下,

TestCases/SampleTestCase.py

在编写测试实例时也请注意,实例中需要包含一个TestCase类以及getFinalTestCase()方法。 getFinalTestCase()方法需要能够返回完整的 Html页面。

在动态fuzzer的应用过程中,需要从对象中提取不同的Html元素属性,然后在运行状态下进行模糊检测。而对于一个静态Fuzzer,我们能够在我们的python测试实例中预定义html元素以及属性,并将之作为字典dict。

dict举例如下:

 
  1. attr = {'CANVAS':['height','width','getContext', ... , ... , ... ]} 

对于这种属性生成列表,也提供了一个JavaScript 应用供参考。

 
  1. <html>     
  2. <head>     
  3. <script>     
  4. /*     
  5. ----------------------------------------------------------------------------     
  6. "THE BEER-WARE LICENSE" (Revision 42):     
  7. <debasishm89_at_gmail.com> wrote this file.  As long as you retain this notice you     
  8. can do whatever you want with this stuff. If we meet some day, and you think     
  9. this stuff is worth it, you can buy me a beer in return.   Debasish Mandal     
  10. ----------------------------------------------------------------------------     
  11. This JS code should be used for generating a python dict. of element attributes of different HTML elements.     
  12. In case of dynamic fuzzer, its usually generated on the fly, since its a static fuzzer you need to pre define html elements and their attributes to your test case.     
  13. Other wise you can use a list of well known attributes. It's completely your choice, how you write your test case.      
  14. */     
  15. function getEleAttributes(ele){     
  16. buff = "['"     
  17. forvar p in ele ){     
  18. buff += p + "','";     
  19. }     
  20. buff = buff.slice(0, -2) + "]";     
  21. return buff     
  22. }     
  23. function generate() {     
  24. /*     
  25. Add your element list in this here and open this html in IE.     
  26. */     
  27. var elements = ["ARTICLE","ASISE","B","BDI","BDO""BLOCKQUOTE","BR","BUTTON","CANVAS","CAPTION","CITE","COL","CODE","COMMAND","DATALIST","DD","DEL","DETAILS","DFN","DL","DT""EM","STYLE","FIELDSET","FIGCAPTION","SCRIPT""EMBED","FIGURE","FOOTER","HEADER","HGROUP","HR","I","INPUT","INS","KEYGEN","KBD","LEGEND","MARK","MENU","METER","NAV","NOSCRIPT","OPTGROUP","OUTPUT","P","PARAM","PRE","PROGRESS","Q","RP","RT","RUBY","S","SAMP","SECTION","SELECT","SMALL","SOURCE","SPAN","SUP","TH","THEAD","TIME","OBJECT","IFRAME","TEXTAREA","TRACK","U","VAR","WBR","FORM","A","BODY","HTML","DIV","TABLE","AREA","TD","TR","LINK","BASE","FONT","HEAD","IMG","MAP","META","OL","LI","TBODY","TITLE","H1","BLINK","AREA","COL","SPAN","FRAMESET","FRAME","UL","OPTION","NOFRAMES","TFOOT","XMP","ISINDEX","CENTER","HR","LABEL","OPTGROUP","AUDIO","VIDEO","TEMPLATE","SVG"]     
  28. main_buff = "ele_dict = {"     
  29. for (ele in elements){     
  30. var id_0 = document.createElement( elements[ele] );     
  31. all_props = getEleAttributes(id_0)     
  32. main_buff += "'"+elements[ele]      
  33. main_buff += "':"     
  34. main_buff += all_props     
  35. main_buff += ","     
  36. }     
  37. main_buff = main_buff.slice(0,-1)     
  38. main_buff += "}"     
  39. document.getElementById('result').innerHTML = main_buff;     
  40. }     
  41. </script>     
  42. </head>     
  43. <body onload='generate();'>     
  44. <b>Output : (Copy paste following python dictionary to your testcase generator script and fuzz using them )</b></br><textarea id="result" rows="100" cols="200"></textarea>     
  45. </body>     
  46. </html> 


作者:何妍 

来源:51CTO

相关文章
|
8月前
|
存储 SQL 缓存
预防和检测内存泄漏:实用技巧
内存泄漏(Memory leak)是指程序在运行过程中分配的内存资源没有被正确释放,导致这部分内存无法再被程序使用,最终消耗了系统的可用内存。
|
11月前
|
安全 索引 Windows
干货丨windows内核www漏洞利用手法(修改版)
注:由于上次发出来的不完整,所以删除了重新发完整点的 前言:Gcow安全团队复眼小组致力于对漏洞的挖掘和研究,并且对于二进制和web漏洞方面都有所研究,有独立挖掘漏洞和独立复现漏洞的能力,本篇文章由Gcow安全团队复眼小组晏子霜师傅所写!
|
11月前
|
安全 API Windows
恶意代码分析系列-几种常用技术(2)
恶意代码分析系列-几种常用技术(2)
|
11月前
|
安全 API 开发工具
恶意代码分析系列-几种常用技术(1)
恶意代码分析系列-几种常用技术(1)
|
11月前
|
安全 API 数据库
恶意代码分析系列-几种常用技术(3)
恶意代码分析系列-几种常用技术(3)
|
11月前
|
安全 数据安全/隐私保护 C++
【免杀】C++静态免杀学习
【免杀】C++静态免杀学习
325 0
|
Java
[恶意代码分析]恶意代码种类以及分析环境介绍
[恶意代码分析]恶意代码种类以及分析环境介绍
366 1
[恶意代码分析]恶意代码种类以及分析环境介绍
|
SQL 安全 前端开发
网站漏洞检测 wordpress sql注入漏洞代码审计与修复
wordpress系统本身代码,很少出现sql注入漏洞,反倒是第三方的插件出现太多太多的漏洞,我们SINE安全发现,仅仅2019年9月份就出现8个插件漏洞,因为第三方开发的插件,技术都参差不齐,对安全方面也不是太懂导致写代码过程中没有对sql注入,以及xss跨站进行前端安全过滤,才导致发生sql注入漏洞。
394 0
网站漏洞检测 wordpress sql注入漏洞代码审计与修复
|
XML SQL 安全
常见高危Web漏洞原理及检测技术分析与研究
随着计算机技术以及信息网络通信技术的高速发展,人们也逐渐意识到信息安全的重要性,网络安全问题成为社会、国家的关注焦点。本文对Web漏洞的类型与原理、Web漏洞扫描技术的原理与应用进行了研究,分析了计算机网络中安全漏洞检测技术的应用策略。
|
SQL 安全 测试技术
网站漏洞渗透检测过程与修复方案
网站的渗透测试简单来 说就是模拟攻击者的手法以及攻击手段去测试网站的漏洞,对网站进行渗透攻击测试,对网站的代码漏洞进行挖掘,上传脚本文件获取网站的控 制权,并对测试出来的漏洞以及整体的网站检测出具详细的渗透测试安全报告。
236 0
网站漏洞渗透检测过程与修复方案