浏览器Fuzz技术

漏洞挖掘

  • 白盒挖掘

    代码审计
    自动化代码分析

  • 黑盒挖掘

    Fuzzing


两种Fuzzing技术

静态Fuzzing
  • 基于变异的

    • 文件、文档
    • 多媒体
    • bf3
  • 基于生成的

    • 浏览器
  • 重点是测试用例的生成

动态Fuzzing
  • Fuzzing框架

    • Grinder
  • Fuzzing工具

    • CrossFuzz
    • ndujaFuzz
    • NodeFuzz
    • X-Fuzzer
    • jsFunFuzz
  • 重点是测试用例的重建、Crash样本的捕获


怎么动手写Fuzzing工具

  • 1.搜集POC

  • 2.规范文档
    • W3C
    • MDN
    • MSDN
  • 3.目标
    • javascript
    • HTML
    • CSS

策略

数据VS关系
数据类型朝向VS逻辑朝向

代码路径覆盖率->浏览器状态覆盖率

  • DOM Tree状态
  • 渲染森林状态
  • 布局状态
  • 事件句柄状态
  • 多页面状态

规范标准

  • W3C
  • MDN
  • MSDN

最终的指导

  • HTML
  • CSS


逻辑元素->各个字典(见下)->规范标准和指导

  • 基础字典
  • property字典
  • 函数字典
  • Style字典

目标

UAF漏洞
构造->Fuzz->Free->Use
释放的节点->无引用


Traverse Node 横穿节点??

1.保存引用(id[idex])
2.DOM实现(document.all[index])

节点引用

1.caching
2.clearing tree node
3.递归清除子树


Get Property

1.动态获取

  • ProperTies
  • FuncTions
  • Events

2.缓存Caching

3.for...in

4.typeof

Fuzz Property

1.smart values->specification
2.random values->no dictionary

Fuzz Function

Functional programming + eval()


DOM Tree构造

  • Base DOM Tree
  • random nodes
  • 随机树生成算法
  • for loop
  • document.createElement
  • node.appendChild
  • Smarter structure
  • Form
  • Table
  • Map
  • List
  • Audio
  • Video
  • Svg

  • Network
  • XMLHttpRequest
  • WebSocket


Prelude

  • TextNode
  • Special nodes
    • Window
    • Document
    • Attribute
    • NamedNodeMap
  • Group
  • Range
  • Selection
  • NodeIterator
  • TreeWalker

  • Multiple Pages
  • Iframe
  • Window.open
  • Recursively nested iframes
  • Renderer process <=> Instance

  • Web Worker & SharedWorker
  • MulTple threads

  • Event handler
  • “ATM”

  • CSS
  • PseudoMclasses & pseudoMelements
  • Render forest

  • Initial properties
  • Start states


Fuzzing

  • DOM Node
  • ProperTes
  • Functions
  • Styles

  • Return value -> Fuzzing list

  • Fuzzing Values
  • Normal
  • Dirty
  • Random
  • Return

  • Force Layout
  • Node.offsetParent

  • Clear DOM SubTree
  • innerHTML
  • outerHTML
  • innerText
  • outerText

  • Clear whole DOM Tree
  • write
  • writeln
  • open
  • documentElement.innerHTML

  • DOM Tree Modify
  • appendChild
  • insertBefore
  • insertAdjacentElement
  • insertAdjacentHTML
  • insertAdjacentText
  • removeChild
  • replaceChild
  • cloneNode

  • Special node manipulate

  • Group manipulate
  • execCommand

  • Multiple pages
  • Mutual manipulate
  • Mutual clear

  • setTimeout
  • Disrupt the Tme sequence

  • Garbage Collect
  • Force IE Memory Protector to reclaim


####Finale

  • GC
  • Reuse all elements
  • Properties
  • Functions
  • Styles
  • Reuse group
  • Reuse special nodes
  • Reuse funcTon return values

Ditionary

通过准确性和完整性来判断字典的好坏。
字典->规范

  • 规范
  • Scripts(or grep + sed)
  • Manual

扩展性

  • 新东西
  • 地理位置
  • 客户端数据库
  • Canvas
  • Blobs
  • 语音合成

规范+智能的值=字典


评估一种Fuzz方法的好坏要看它的结果。

  • 漏洞
  • UAF
  • Double Free
  • OOB

  • Bug
  • 空指针引用
  • 栈上溢


Event Handle

  • Idea
  • Fuzzing:rendering engine ->some state
  • Set event handler: fuzzing and clear
  • Fuzzing: fire event
  • Kind of race condiTon

  • StateFuzzer
  • CFlatMarkupPointer UAF
  • CInput UAF
  • CFrameSetSite CTreeNode UAF (CVE-2014-1769)
  • CCaret Tracker UAF
  • CClipStack OOB Access (CVE-2014-1773)


Summary

Fuzzing = Programming + Specification reading + Vulnerabilities’ characteristic collecting + Ideas

Smashing The Browser:From Vulnerability Discovery To Exploit学习记录的更多相关文章

  1. elasticsearch Discovery 发现模块学习

    发现模块和集群的形成 目标 发现节点 Master选举 组成集群,在Master信息发生变化时及时更新. 故障检测 细分为几个子模块 Discovery发现模块 Discover是在集群Master节 ...

  2. (转)zookeeper学习记录--附browser

    转自:http://agapple.iteye.com/blog/1111377 背景 前段时间看了S4流计算引擎,里面使用到了zookeeper进行集群管理,所以也就花了点时间研究了下zookeep ...

  3. 一个浏览器Fuzzing框架的学习

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

  4. Android linux kernel privilege escalation vulnerability and exploit (CVE-2014-4322)

    In this blog post we'll go over a Linux kernel privilege escalation vulnerability I discovered which ...

  5. Kingsoft Office Writer 2012 8.1.0.3385 - (.wps) Buffer Overflow Exploit (SEH)

    #!/usr/bin/python # Exploit Title: Kingsoft Office Writer v2012 8.1.0.3385 .wps Buffer Overflow Expl ...

  6. An iOS zero-click radio proximity exploit odyssey

    NOTE: This specific issue was fixed before the launch of Privacy-Preserving Contact Tracing in iOS 1 ...

  7. 自学Zabbix9.1 Network Discovery 网络发现原理

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix9.1 Network Discovery 网络发现原理 1. 网络发现简介 网络 ...

  8. (60)zabbix网络发现介绍Network Discovery

    网络发现简介 网络发现有什么用?网络发现怎么配置? 我们带着这两个问题开始我们的网络发现之旅. 比如小明有100台服务器,不想一台台主机去添加,能不能让zabbix自动添加主机呢,当然可以,网络发现便 ...

  9. Web Application Penetration Testing Local File Inclusion (LFI) Testing Techniques

    Web Application Penetration Testing Local File Inclusion (LFI) Testing Techniques Jan 04, 2017, Vers ...

随机推荐

  1. maven基础知识汇总

    maven的dependency中scope=compile和provided的区别 对于scope=compile的情况(默认scope),也就是说这个项目在编译,测试,运行阶段都需要这个artif ...

  2. BOM之screen对象

    前面的话 screen对象在javascript编程中,比较冷门,不太常用.screen对象用来表明客户端的能力,其中包括浏览器窗口外部的显示器的信息,如像素高度和宽度等.本文将详细介绍screen对 ...

  3. 一本通1633【例 3】Sumdiv

    1633:[例 3]Sumdiv 时间限制: 1000 ms         内存限制: 524288 KB [题目描述] 原题来自:Romania OI 2002 求 ABAB 的所有约数之和 mo ...

  4. Exploring Pyramids UVALive - 3516 (记忆化DP)

    题意:给定一个序列 问有多少棵树与之对应 题目连接:https://cn.vjudge.net/problem/UVALive-3516 对于这一序列  分两种2情况 当前分支 和 其它分支  用df ...

  5. 【题解】 bzoj2115: [Wc2011] Xor (线性基+dfs)

    bzoj2115,戳我戳我 Solution: 看得题解(逃,我太菜了,想不出这种做法 那么丢个链接 Attention: 板子别写错了 又写错了这次 \(long long\)是左移63位,多了会溢 ...

  6. 学习Spring Boot:(十二)Mybatis 中自定义枚举转换器

    前言 在 Spring Boot 中使用 Mybatis 中遇到了字段为枚举类型,数据库存储的是枚举的值,发现它不能自动装载. 解决 内置枚举转换器 MyBatis内置了两个枚举转换器分别是:org. ...

  7. 1.Unix,Linux起源与编译原理

    一.UNIX操作系统   作者:丹尼斯.里奇,肯.汤普逊  版权:贝尔实验室  时间:1971  特点:多用户,多任务(多进程),多CPU(多种CPU架构),高安全,高可靠,高性能,高稳定  应用:构 ...

  8. vue axios的使用

    详细可以看:https://www.kancloud.cn/yunye/axios/234845 这里介绍日常使用得比较多的get和post: import axios from 'axios' // ...

  9. Object类型的怎么判断空值

    例如 Object result; 我直接这样是不行的 if(result==null) //这样是错的 ... 要这样判断 if(result == System.DBNull.Value) //这 ...

  10. [整理]WebAPI中应用oData

    http://www.odata.org/ http://bitoftech.net/category/odata/ http://www.hanselman.com/blog/CreatingAnO ...