浏览器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项目编译运行时提示jdk版本过低问题解决方法

    明明使用的是1.8jdk,但是运行项目时提示使用的是java版本是1.5,版本过低. 修改pom.xml,添加如下: <build> <plugins> <plugin& ...

  2. 【大数据】SparkSql学习笔记

    第1章 Spark SQL概述 1.1 什么是Spark SQL Spark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrame和 DataSet,并且作为分布式 ...

  3. MT【107】立体几何中用阿波罗尼乌斯圆的一道题

    分析:利用内外圆知识知道,B,C两点到 AD 的距离$\le4$. 利用体积公式$V=\frac{1}{3}S_{截面}|AD|\le2\sqrt{15}$

  4. KUR-Couriers

    题目链接: QwQ Solution: 以权值为下标,对每个点建树 对于x点,以它为根的树涵盖的是1到x区间内每个数出现的次数 Code: #include<bits/stdc++.h> ...

  5. Nginx多进程高并发、低时延、高可靠机制在缓存代理中的应用

    1. 开发背景 现有开源缓存代理中间件有twemproxy.codis等,其中twemproxy为单进程单线程模型,只支持memcache单机版和redis单机版,都不支持集群版功能. 由于twemp ...

  6. 【BZOJ1303】[CQOI2009]中位数图(模拟)

    [BZOJ1303][CQOI2009]中位数图(模拟) 题面 BZOJ 洛谷 题解 把大于\(b\)的数设为\(1\),小于\(b\)的数设为\(-1\).显然询问就是有多少个横跨了\(b\)这个数 ...

  7. 【BZOJ1047】[HAOI2007]理想的正方形(单调队列,动态规划)

    [BZOJ1047][HAOI2007]理想的正方形(单调队列,动态规划) 题面 BZOJ 洛谷 题解 直接一个单调队列维护一下没给点和它前面的\(n\)个位置的最大值,再用一次单调队列维护连续\(n ...

  8. Linq查询条件里有可空字段比较时报错variable '<>h__TransparentIdentifier2' of type referenced from scope '', but it is not defined

    当我运行下面的linq查询时报了这个错,   1: var result = (from so in svcContext.new_sales_orderSet 2: join soitem in s ...

  9. luogu4155/bzoj4444 国旗计划 (倍增)

    成环,把每个区间变成两个然后展开成链 一个人的下一个人肯定是在彼此相交的基础上,右端点越大越好 于是就把它连到相交的.右端点最大的点上,连成一棵树 于是每次只要从某个节点开始,一直在树上跳到覆盖了一个 ...

  10. jedisClient操作redis实现增删改查功能

    这个集群环境下和单机环境下: package com.taotao.sso.dao.impl; import org.springframework.beans.factory.annotation. ...