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

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

查看所有标签

猜你喜欢:

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

Introduction to Computer Science Using Python

Introduction to Computer Science Using Python

Dierbach, Charles / 2012-12 / $ 133.62

Introduction to Computer Science Using Python: A Computational Problem-Solving Focus introduces students to programming and computational problem-solving via a back-to-basics, step-by-step, objects-la......一起来看看 《Introduction to Computer Science Using Python》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具