一个浏览器Fuzzing框架的学习

关于框架

之前是LCatro师傅在小密圈分享的他写的这个Fuzzing框架(不过我以前翻github时好像就看到过),但是之前一直没啥时间搞这方面,这两天研究学习了一下。

背景资料

其实浏览器Fuzzing框架的资料还是比较多的,之前walkerfuz在Freebuf发过一篇介绍已有开源框架的文章

http://www.freebuf.com/sectool/93130.html

况且研究过浏览器的童鞋们都应该用过或是听过grinder、cross_fuzz这些大名鼎鼎的工具了。

此外对于框架开发来说有一篇有点老但比较有启发性的文章,http://bobao.360.cn/learning/detail/160.html

walkerfuz也开源了一个框架出来,链接在这里:https://github.com/walkerfuz/morph

其实对于浏览器fuzzer来说,我个人认为分为两个部分:fuzzer框架和模版。框架主要解决的是fuzz的速度、效率、稳定性的问题,而模版负责生成样本决定了到底能不能挖到漏洞和挖到什么漏洞。所以真正有价值的其实还是模版怎么设计,在网上放出的fuzz框架相当多,模版却没有多少。我这里分享几个我自己搜集的资料

1.烧博士在blackhat14上讲的,但是这个思路应该已经被搞过不知道多少次了。

https://www.blackhat.com/docs/eu-14/materials/eu-14-Lu-The-Power-Of-Pair-One-Template-That-Reveals-100-plus-UAF-IE-Vulnerabilities.pdf

2.这个其实就是作者的nduja说明文档,nduja就不用过多介绍了吧

https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnx0ZW50YWNvbG92aW9sYXxneDo1MTgyOTgyYmUyYWY3MWQy

3.同样是Rosario valotta的议题,但是我觉得这个提出的一些思路比较有意思

https://www.syscan360.org/slides/2014_ZH_BrowserFuzzing_RosarioValotta.pdf

4.绿盟大牛的一次演讲ppt,篇幅相当足

https://hitcon.org/2014/downloads/P1_06_Chen Zhang - Smashing The Browser - From Vulnerability Discovery To Exploit.pdf

5.说的比较基础,我怀疑ppt不全??

http://www.leiphone.com/news/201612/YlysgkvgBbeBIkL9.html

Kite框架

好了我们来回归正题,我用过一些框架但是自己写还没有试过,所以这次来学习一下也是为自己动工做铺垫。

首先看一下作者的使用说明

1.run web_server.py in this new console window
2.using your browser which you want to fuzzing to open http://127.0.0.1/vector
3.using get_poc.py dump crash poc when browser has been crash

这说明框架是从web_server.py开始执行的

我们查看这个模块发现导入了tornado,这是比较有名的web server模块,框架使用它来搭建本地服务器。

import tornado.web
import tornado.ioloop

模块首先创建监视线程,使用的是threading模块

restart_thread=threading.Thread(target=time_wait_restart_process_monitor_thread)
restart_thread.start()

threading是一个比thread更高层的API,基本用法如下

t=threading.Thread(target=thread_func)
t.start()

线程的执行函数time_wait_restart_process_monitor_thread负责重启进程,并重复这个过程

def time_wait_restart_process_monitor_thread() :
    global BLOCK_TIME,globle_tick
    static_tick=globle_tick
    while True :
        is_restart=True
        for time_tick in range(BLOCK_TIME) :#重启线程
            if static_tick!=globle_tick :
                static_tick=globle_tick
                is_restart=False
                break
            time.sleep(1)
        if is_restart :
            restart_process_monitor()
            
def restart_process_monitor() :
    pid=get_process_id()
    if pid is not -1 :
        kill_process(get_process_id())
        
os.system('start process_monitor.py')

读取文件内容之后,使用tornado设置本地服务器

 handler = [
       (r"/vector", MainHandler, dict(copy_data=copy_data)),
       (r"/poc", PocHandler),
       (r"/(.*)", OtherHandler),
    ]
 http_Server = tornado.web.Application(handlers=handler)

调用tornado的Application类需要提供Handler列表,这些Handler组成了一个web应用程序。Handler定义了网页路径与函数之间的映射关系。

MainHandler —— /vector
PocHandler —— /poc
OtherHandler—— /(.*)

tornado官方给出了栗子

一个浏览器Fuzzing框架的学习的更多相关文章

  1. 一个入门rpc框架的学习

    一个入门rpc框架的学习 参考 huangyong-rpc 轻量级分布式RPC框架 该程序是一个短连接的rpc实现 简介 RPC,即 Remote Procedure Call(远程过程调用),说得通 ...

  2. 一个可扩展的深度学习框架的Python实现(仿keras接口)

    一个可扩展的深度学习框架的Python实现(仿keras接口) 动机 keras是一种非常优秀的深度学习框架,其具有较好的易用性,可扩展性.keras的接口设计非常优雅,使用起来非常方便.在这里,我将 ...

  3. jfinal框架教程-学习笔记

    jfinal框架教程-学习笔记 JFinal  是基于 Java  语言的极速  WEB  + ORM  开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restfu ...

  4. 第一个ServiceStack服务框架

    第一个ServiceStack服务框架 最近刚接触ServiceStack,就尝试着写了第一个服务框架,难免出错,还望同道们多多指正. 关于ServiceStack相关的概念不在做详细的叙述,网上研究 ...

  5. GDG Xi'an DevFest 2019 闪电演讲 -《假如我是一个浏览器》PPT(经典多图,建议收藏)

    GDG Xi'an DevFest2019演讲PPT链接: http://tmp.link/f/5dd9e6bf461b6 闪电演讲<假如我是一个浏览器>PPT链接: https://gi ...

  6. 前端框架Easyui学习积累

    前端框架Easyui学习积累 1.easyui textbox 赋值:$("#id").textbox("setValue","xx"); ...

  7. spring框架的学习->从零开始学JAVA系列

    目录 Spring框架的学习 框架的概念 框架的使用 Spring框架的引入 概念 作用 内容 SpringIOC的学习 概念 作用 基本使用流程 SpringIOC创建对象的三种方式 通过构造器方式 ...

  8. SunSonic 3.0 ORM开源框架的学习

    SubSonic 3.0简介 接触到SubSonic3.0 ORM框架是看了AllEmpty大神的从零开始编写自己的C#框架(链接在此)系列的随笔接触到的,本文章学习内容源于AllEmpty大神. S ...

  9. 一个响应式框架——agera

    Google在上周开源了一个响应式框架——agera,相信它会慢慢地被广大程序员所熟知.我个人对这样的技术是很感兴趣的,在这之前也研究过RxJava,所以在得知Google开源了这样的框架之后第一时间 ...

随机推荐

  1. Vue---从后台获取数据vue-resource的使用方法

    作为前端人员,在开发过程中,我们大多数情况都需要从后台请求数据,那么在vue中怎样从后台获取数据呢?接下来,我简单介绍一下vue-resource的使用方法,希望对大家有帮助. 一.下载vue-res ...

  2. cglib动态代理是通过继承父类的方式进行代理的 不是通过接口方式进行动态代理的 因此可以对普通的类进行代理

    cglib动态代理是通过继承父类的方式进行代理的 不是通过接口方式进行动态代理的

  3. poj2559 Largest Rectangle in a Histogram(单调栈)

    Description A histogram is a polygon composed of a sequence of rectangles aligned at a common base l ...

  4. ubuntu14.04如何设置静态IP的方法

    第一步: 配置静态IP地址: 打开/etc/network/interfaces文件,内容为 auto lo iface lo inet loopback auto eth0 iface eth0 i ...

  5. Spring Shell介绍

    最近开发中在下遇到了spring-shell开发工具的项目,现在整理了相关文章,以供大家学习 本博客相关的文章均是在Spring Shell 1.2.0的基础上建立   Spring Shell介绍 ...

  6. 【刷题】BZOJ 2151 种树

    Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n.并且每个位置都有一个美观度 ...

  7. ASP.NET MVC学习之Log4Net配置(日志记录)

    Log4Net配置笔记---- 首先,添加对log4net.dll的引用. 在Web.config文件下的Configuration节点下添加Log4Net的配置信息: <!--Log4Net配 ...

  8. 解题:SDOI 2017 硬币游戏

    题面 板板的生成函数做法太神仙了,我跑了 朴素的做法是建立AC自动机变成图上的随机游走问题 来仔细考虑一下转移,把状态分成非结尾状态和结尾状态.在一个非结尾状态后补一个串是一定能到达目标串的,但是如果 ...

  9. WebService注解总结

    @WebService 1.serviceName: 对外发布的服务名,指定 Web Service 的服务名称:wsdl:service.缺省值为 Java 类的简单名称 + Service.(字符 ...

  10. vue单页面应用项目优化总结(转载)

    转载自:https://blog.csdn.net/qq_42221334/article/details/81907901这是之前在公司oa项目优化时罗列的优化点,基本都已经完成,当时花了点心思整理 ...