浏览器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使用阿里镜像配置文件

    方法一: apache-maven-3.5.2\confsetting.xml,添加如下镜像配置: <mirrors> <mirror> <id>alimaven& ...

  2. oracle 创建表空间 与创建用户与分配用户权限

    创建一个表空间名为ABC create tablespace "ABC"     //貌似要大写 datafile 'D:\oracle\TBSPACES\ABC.dbf'   / ...

  3. 【BZOJ1560】[JSOI2009]火星藏宝图(贪心,动态规划)

    [BZOJ1560][JSOI2009]火星藏宝图(贪心,动态规划) 题面 BZOJ 洛谷 题解 既然所有的位置的权值都大于\(0\),那么就可以直接贪心,按照行为第一关键字,列为第二关键字,来转移. ...

  4. Mac中把光盘转存为iso文件

    因为Mac是类Unix的,因此,dd命令同样适用于Mac,那么,就很简单了,复习一下dd的用法而已 [xiaosilent@rmbp Volumes]$ drutil status Vendor Pr ...

  5. keystone v3.0与2.0的区别

    参看http://blog.chinaunix.net/uid-21335514-id-3497996.html

  6. 成员变量与局部变量的区别--------java基础总结

  7. python的面向对象-实例(对象)的相关知识、实例化

    1.对象就是实例,什么是实例 类运行的过程就是实例化的过程,实例化产生的结果就是产生了一个实例 class的牛逼之处就是不用手动的return,他会加载完函数之后,自动return  __init__ ...

  8. SCI写作经典替换词

  9. CSS规范 - 命名规则--(来自网易)

    使用类选择器,放弃ID选择器 ID在一个页面中的唯一性导致了如果以ID为选择器来写CSS,就无法重用. NEC特殊字符:"-"连字符 "-"在本规范中并不表示连 ...

  10. [转载]CSS Tools: Reset CSS

    http://meyerweb.com/eric/tools/css/reset/ The goal of a reset stylesheet is to reduce browser incons ...