首页 > 其他 > 详细

使用afl-fuzz测试poppler(二)

时间:2019-11-09 23:44:26      阅读:181      评论:0      收藏:0      [点我收藏+]

上节内容:使用afl-fuzz测试poppler(一)

开始fuzz

  • 在fuzz之前,先看下\alf-2.52b\testcases文件夹,这里面存放的就是最初用来作为输入的样本

技术分享图片

  • poppler一款pdf处理工具,所以,我们将\testcases\others\pdf文件夹中的small.pdf拷贝出来,作为fuzz的输入。这里,我们可以多拷贝几遍这个文件来作为输入,也可以收集其他一些pdf样本作为输入,以加快fuzz的进度

    mkdir afl-input
    cp ./afl-2.52b/testcases/others/pdf/small.pdf ./afl-input/
  • 新建输出文件夹,用来存放fuzz出来的结果

    mkdir afl-output
    cd ./afl-output
    mkdir poppler-0.82.0-1
  • 在命令行中输入afl-fuzz查看其用法
    技术分享图片

  • 再加上网上汇总的资料,我们可以使用下面的语句来fuzz:

    afl-fuzz -i /path/to/input -o /path/to/output /path/to/program/ @@ /dev/null

    其中,path/to/inputsample是指作为输入样本的文件夹的位置;同理,/path/to/output是指存放fuzz出来的结果的地址;/path/to/program是指被fuzz的二进制程序的地址;@@是指当我们需要从文件中获取输入时,可以使用其来代替被测试程序命令行中输入文件名的位置;/dev/null是指不输出错误信息到屏幕上

  • 所以,根据上面的内容,我们使用下面的命令开始fuzz:

    afl-fuzz -i ./afl-input/ -o ./afl-output/poppler-0.82.0-1 ./poppler-poppler-0.82.0/build/utils/pdftohtml @@ /dev/null
  • 但当我们输入后,系统会如下报错:
    技术分享图片

  • 那就输入命令,然后再次执行命令:

    echo core >/proc/sys/kernel/core_pattern
    afl-fuzz -i ./afl-input/ -o ./afl-output/poppler-0.82.0-1 ./poppler-poppler-0.82.0/build/utils/pdftohtml @@ /dev/null
  • 这次执行后,出现了一个之前fuzz从未出现的问题:
    技术分享图片

  • 于是,经过查找,更改输入的命令为:

    afl-fuzz -m 2G -i ./afl-input/ -o ./afl-output/poppler-0.82.0-1 ./poppler-poppler-0.82.0/build/utils/pdftohtml @@ /dev/null

    这次可以成功执行了

  • 界面如下所示:
    技术分享图片

  • 对于afl-output文件中的内容,后面再说

单系统并行fuzz

  • 在某些时候,只开一个fuzz的效率并不高,所以可以考虑单系统并行fuzz,每个cpu内核执行一个fuzz实例

  • 首先需要确定自己的机器确实有多个核心来进行并行fuzz

  • 然后,与之前命令不同的地方在于,通过参数-M指定主fuzz,进行确定性测试;通过参数-S指定从fuzz,进行完全随机的测试

  • 所以,可以使用如下命令进行fuzz:

    afl-fuzz -i ./afl-input/ -o ./afl-output/poppler-0.82.0-1 -M fuzzer1 ./poppler-poppler-0.82.0/build/utils/pdftohtml @@ /dev/null
    afl-fuzz -i ./afl-input/ -o ./afl-output/poppler-0.82.0-1 -S fuzzer2 ./poppler-poppler-0.82.0/build/utils/pdftohtml @@ /dev/null
    afl-fuzz -i ./afl-input/ -o ./afl-output/poppler-0.82.0-1 -S fuzzer3 ./poppler-poppler-0.82.0/build/utils/pdftohtml @@ /dev/null
    afl-fuzz -i ./afl-input/ -o ./afl-output/poppler-0.82.0-1 -S fuzzer4 ./poppler-poppler-0.82.0/build/utils/pdftohtml @@ /dev/null
    afl-fuzz -i ./afl-input/ -o ./afl-output/poppler-0.82.0-1 -S fuzzer5 ./poppler-poppler-0.82.0/build/utils/pdftohtml @@ /dev/null
  • 展示一下(此后的图均是最近用工作站对poppler-0.26进行的fuzz,其中fuzzer5在几天前被我停掉了):
    技术分享图片
    技术分享图片
    技术分享图片
    技术分享图片
    技术分享图片

  • 看一下afl-output/poppler-0.26.0-3中的文件:

技术分享图片

当使用并行fuzz的时候,每个fuzz都会生成一个单独的文件夹,进入其中一个,crashes中的就是可以导致被fuzz程序crash的输入实例,这里一共fuzz出来了11个。其中,sig:11表示段错误,比如引用了空指针;sig:06表示可能执行了abort\assert函数,或者是double free

  • 我们可以试着将id:000000的文件输入到被测试程序中,复现一下:

技术分享图片

使用gdb进一步调试分析

  • 还在学习

本节参考:

AFL漏洞挖掘技术漫谈(一):用AFL开始你的第一次Fuzzing

使用afl-fuzz测试poppler(二)

原文:https://www.cnblogs.com/xrblog/p/11828118.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!