honggfuzz漏洞挖掘技术深究系列(4)—— 扩展Fuzzer

栏目: Python · 发布时间: 7年前

内容简介:对于一些复合文件格式,如果只是单纯的暴力Fuzzing,会导致生成很多无法被解析的文件,因此需要对文件变异作一些定制化的工作,比如docx、doc等office复合文件,docx是个压缩包,doc是个OLE格式,如果fuzz docx自然需要将其zip解压,再针对感兴趣的文件作变异,对于doc最好是作文件格式解析,只对感兴趣的stream作文件变异,这样的fuzzing的有效性才会更高。庆幸地是,honggfuzz提供

对于一些复合文件格式,如果只是单纯的暴力Fuzzing,会导致生成很多无法被解析的文件,因此需要对文件变异作一些定制化的工作,比如docx、doc等office复合文件,docx是个压缩包,doc是个OLE格式,如果fuzz docx自然需要将其zip解压,再针对感兴趣的文件作变异,对于doc最好是作文件格式解析,只对感兴趣的stream作文件变异,这样的fuzzing的有效性才会更高。

庆幸地是,honggfuzz提供 -c 参数用于扩展变异规则以代替原有变异方式,同时提供有 --pprocess_cmd 在原有的文件变异后再作处理:

--mutate_cmd|-c VALUE
External command producing fuzz files (instead of internal mutators)
--pprocess_cmd VALUE
External command postprocessing files produced by internal mutators

-c 功能比较有用,也是我用得比较多的,另一个 --pprocess_cmd 基本我没用过。

当你通过 -f 提供输入样本目录后,在fuzzing时,随机提取的文件会直接传递给 -c 参数指定的扩展命令作变异。

比如想针对某文件特定offset范围内的内容进行变异,下面是针对macOS/iOS字体文件中的虚拟指令作Fuzzing时写的脚本:

#!/usr/bin/env python

import mmap
import os
from random import randint
import sys

RANGE_START = 0x16D8
RANGE_END   = 0x304D
MIN_BYTES_TO_FLIP = 1
MAX_BYTES_TO_FLIP = 5

if ".DS_Store" in sys.argv[1]:
    exit(1)

with open(sys.argv[1], "r+b") as f:
  mapped = mmap.mmap(f.fileno(), 0)
  #print "file size: 0x%x" % len(mapped)
  bytes_to_flip = randint(MIN_BYTES_TO_FLIP, MAX_BYTES_TO_FLIP)
  bytes_flipped = 0

  while bytes_flipped < bytes_to_flip:
    byte_pos = randint(RANGE_START, RANGE_END)
    #print "byte_pos: 0x%x" %byte_pos 
    byte_new = chr(randint(0, 255))
    mapped[byte_pos] = byte_new
    bytes_flipped += 1

  mapped.close()

变异效果:

honggfuzz漏洞挖掘技术深究系列(4)—— 扩展Fuzzer

最后挖到一个TTF字体虚拟指令漏洞:

orig file:
2F90h: 00 3F C5 CD 2B 10 C1 10 DE 3F C5 【CD】 2B 10 C5 10

poc file:
2F90h: 00 3F C5 CD 2B 10 C1 10 DE 3F C5 【DD】 2B 10 C5 10

glyf table -> SimpleGlyf[] -> Instructions('0xCD' => ‘0xDD') -> MDRP指令

同样的,你也可以写个doc、docx等office文件格式解析并变异的扩展fuzzer,比如利用olefile库(但只支持修改同等大小不变的doc,要插入或删除需要自行实现),或者通过COM接口来实现操作。

比如之前有段时间doc中的公式编辑器存在很多漏洞,你就可以专门针对 Equation Native 流作fuzzing。

最后放两张图(riufuzz是自己对honggfuzz二次开发的版本,后面有机会再讲):

honggfuzz漏洞挖掘技术深究系列(4)—— 扩展Fuzzer

honggfuzz漏洞挖掘技术深究系列(4)—— 扩展Fuzzer

honggfuzz漏洞挖掘技术深究系列(4)—— 扩展Fuzzer

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Caching

Web Caching

Duane Wessels / O'Reilly Media, Inc. / 2001-6 / 39.95美元

On the World Wide Web, speed and efficiency are vital. Users have little patience for slow web pages, while network administrators want to make the most of their available bandwidth. A properly design......一起来看看 《Web Caching》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器