一个浏览器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. BZOJ 3174 拯救小矮人(贪心+DP)

    题意 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人,我们知道他从脚到肩 ...

  2. 51nod 1206 && hdu 1828 Picture (扫描线+离散化+线段树 矩阵周长并)

    1206 Picture  题目来源: IOI 1998 基准时间限制:2 秒 空间限制:131072 KB 分值: 160 难度:6级算法题  收藏  关注 给出平面上的N个矩形(矩形的边平行于X轴 ...

  3. ubuntu中报错:无法分配内存 (errno=12)

    今天碰到一个大坑,差点要了老命! 之前装了ubuntu双系统,后来崩溃,想在就想装VMware虚拟机,再装ubuntu,一切进展顺利,直到在虚拟机的ubuntu中安装IDEA时出现了问题. 安装过程并 ...

  4. LeetCode 9 合并两个有序列表

    将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2- ...

  5. shell常用编程格式

    WORKSPACE=$(cd $(dirname $0)/; pwd) cd $WORKSPACE   mkdir -p var   module=jmxmon version=0.0.2 app=& ...

  6. Apache 的 ab 压测工具快速使用

    ab 是一个 httpd 自带的很好用的压力测试工具,它是 apache bench 命令的缩写.ab 命令会创建多个并发访问线程,模拟多个访问者同时对某一 URL 地址进行访问.可以用来测试 apa ...

  7. logback常见配置

    依赖jar包 <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core --> <dependency& ...

  8. HDU 4315 阶梯博弈变形

    n个棋子,其中第k个是红色的,每个棋子只能往上爬,而且不能越过.重叠其他棋子,谁将红色棋子移到顶部谁赢. 由于只能往上爬,所以很像阶梯博弈.这题有2个限制,棋子不能重叠,有红棋存在 首先不考虑红色棋, ...

  9. springmvc常用注解标签详解-推荐

    1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ...

  10. meeting,symposium,seminar 等区别

    meeting,symposium,seminar 等区别 会议分类的方式可说是不胜枚举,这点初步由英文对会议名称的写法,就可看出端倪,像是Assembly,Caucus,Colloquium, Co ...