一个浏览器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开源了这样的框架之后第一时间 ...
随机推荐
- BZOJ 3174 拯救小矮人(贪心+DP)
题意 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人,我们知道他从脚到肩 ...
- 51nod 1206 && hdu 1828 Picture (扫描线+离散化+线段树 矩阵周长并)
1206 Picture 题目来源: IOI 1998 基准时间限制:2 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注 给出平面上的N个矩形(矩形的边平行于X轴 ...
- ubuntu中报错:无法分配内存 (errno=12)
今天碰到一个大坑,差点要了老命! 之前装了ubuntu双系统,后来崩溃,想在就想装VMware虚拟机,再装ubuntu,一切进展顺利,直到在虚拟机的ubuntu中安装IDEA时出现了问题. 安装过程并 ...
- LeetCode 9 合并两个有序列表
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2- ...
- shell常用编程格式
WORKSPACE=$(cd $(dirname $0)/; pwd) cd $WORKSPACE mkdir -p var module=jmxmon version=0.0.2 app=& ...
- Apache 的 ab 压测工具快速使用
ab 是一个 httpd 自带的很好用的压力测试工具,它是 apache bench 命令的缩写.ab 命令会创建多个并发访问线程,模拟多个访问者同时对某一 URL 地址进行访问.可以用来测试 apa ...
- logback常见配置
依赖jar包 <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core --> <dependency& ...
- HDU 4315 阶梯博弈变形
n个棋子,其中第k个是红色的,每个棋子只能往上爬,而且不能越过.重叠其他棋子,谁将红色棋子移到顶部谁赢. 由于只能往上爬,所以很像阶梯博弈.这题有2个限制,棋子不能重叠,有红棋存在 首先不考虑红色棋, ...
- springmvc常用注解标签详解-推荐
1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ...
- meeting,symposium,seminar 等区别
meeting,symposium,seminar 等区别 会议分类的方式可说是不胜枚举,这点初步由英文对会议名称的写法,就可看出端倪,像是Assembly,Caucus,Colloquium, Co ...