一个浏览器Fuzzing框架的学习
一个浏览器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框架的学习的更多相关文章
- 一个入门rpc框架的学习
一个入门rpc框架的学习 参考 huangyong-rpc 轻量级分布式RPC框架 该程序是一个短连接的rpc实现 简介 RPC,即 Remote Procedure Call(远程过程调用),说得通 ...
- 一个可扩展的深度学习框架的Python实现(仿keras接口)
一个可扩展的深度学习框架的Python实现(仿keras接口) 动机 keras是一种非常优秀的深度学习框架,其具有较好的易用性,可扩展性.keras的接口设计非常优雅,使用起来非常方便.在这里,我将 ...
- jfinal框架教程-学习笔记
jfinal框架教程-学习笔记 JFinal 是基于 Java 语言的极速 WEB + ORM 开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restfu ...
- 第一个ServiceStack服务框架
第一个ServiceStack服务框架 最近刚接触ServiceStack,就尝试着写了第一个服务框架,难免出错,还望同道们多多指正. 关于ServiceStack相关的概念不在做详细的叙述,网上研究 ...
- GDG Xi'an DevFest 2019 闪电演讲 -《假如我是一个浏览器》PPT(经典多图,建议收藏)
GDG Xi'an DevFest2019演讲PPT链接: http://tmp.link/f/5dd9e6bf461b6 闪电演讲<假如我是一个浏览器>PPT链接: https://gi ...
- 前端框架Easyui学习积累
前端框架Easyui学习积累 1.easyui textbox 赋值:$("#id").textbox("setValue","xx"); ...
- spring框架的学习->从零开始学JAVA系列
目录 Spring框架的学习 框架的概念 框架的使用 Spring框架的引入 概念 作用 内容 SpringIOC的学习 概念 作用 基本使用流程 SpringIOC创建对象的三种方式 通过构造器方式 ...
- SunSonic 3.0 ORM开源框架的学习
SubSonic 3.0简介 接触到SubSonic3.0 ORM框架是看了AllEmpty大神的从零开始编写自己的C#框架(链接在此)系列的随笔接触到的,本文章学习内容源于AllEmpty大神. S ...
- 一个响应式框架——agera
Google在上周开源了一个响应式框架——agera,相信它会慢慢地被广大程序员所熟知.我个人对这样的技术是很感兴趣的,在这之前也研究过RxJava,所以在得知Google开源了这样的框架之后第一时间 ...
随机推荐
- echarts实现环形图
前端框架使用的angular,使用echarts实现环形图 1. item.component.html <div id="box1" class="pie&quo ...
- 洛谷P4180 [BJWC2010]次小生成树(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)
洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...
- Installshield 打包安装程序时写入注册表,及运行bat文件
一.写入注册表 1. 打开project assistant –> Project Registry 可以像注册表里一样操作,其中[INSTALLDIR]是指的安装路径 二. 运行bat文件 ...
- Mysql(二)函数与连接
一.函数 1.if函数 if(exp1, exp2, exp3) 判断exp1是否为true(不为0,并且不为nlll),如果为true,返回 exp2的值,否则返回exp3的值. selec ...
- bzoj5164: 餐厅计划问题(三分+贪心)
网络流经典题里餐巾计划的加强版...天数变成了$10^5$,那就不能用费用流做了... 考虑费用流的时候,单位费用随流量的增加而减少,也就是说费用其实是个单峰(下凸)函数. 那么可以三分要买的餐巾个数 ...
- IIS并发连接数及性能优化
如果要查看IIS连接数,最简单方便的方法是通过“网站统计”来查看,“网站统计”的当前在线人数可以认为是当前IIS连接数.然而,“网站统计”的当前在线人数统计时间较长,一般为10分钟或15分钟,再加上统 ...
- linux driver ------ 三星公司uboot模式下更改分区(EMMC)大小fdisk命令 ------ iTOP4412 开发板烧写
核心板 SCP 1G eMMC:KLM8G------>8G 终端(串口)输入(如果执行过,只需要执行最后一句即可): 开发板一启动,立马在终端按回车,进入 uboot 模式 fdisk -c ...
- Hadoop生态圈-Kafka的旧API实现生产者-消费者
Hadoop生态圈-Kafka的旧API实现生产者-消费者 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.旧API实现生产者-消费者 1>.开启kafka集群 [yinz ...
- 「MYSQL」MYSQL中的int(11)到底代表什么意思?
一.前言 在工作中经常要与mysql打交道,但是对mysql的各个字段类型一直都是一知半解,因此写本文总结记录一番. 二.简介 对于int类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用 ...
- 接口测试Case之面向页面对象编写规范
一.什么是页面对象化 主要提倡的思想是:万物皆对象,即把一个Page看成一个对象,来进行接口自动化Case的编写,不要闲扯,直接讲怎么个操作法呢? 二.有什么优势? 2.1 Case层次清晰,便于管理 ...