• 【AFL(九)】详细解释 AFL类fuzzer 对目标进行 Fuzz (LAVA中)


    上一篇解决了如何利用AFL对LAVA-M进行fuzz的问题,接下来的中篇,主要为最后的写shell脚本做提前尝试。

    本篇主要解决的问题是:实现变种AFL对LAVA的fuzz,进一步实现两个AFL双开,并写一个脚本自动打开进行fuzz展示的脚本。

    一、mopt-afl对lava-m进行fuzz

    为什么选中mopt-afl,因为是一篇开源的顶会论文,而且mopt-afl对afl的改进,只对afl.c文件进行了改进,所以fuzz的操作跟afl差不多,处理方便。

    对lava的介绍就不多说了,详情可以看(上篇),接下来进入正题:

    1. 从git下载源码,放到跟afl同级的目录下(这里的目的是为之后写脚本目录好分配做准备)

    git clone https://github.com/puppet-meteor/MOpt-AFL.git

    2. 进入MOpt-AFLV1.0文件夹

    3. 跟afl一样进行编译安装

    make
    make install

    4. 这个时候,mopt-afl已经代替了user环境文件夹下的那个afl,所以这时候执行afl-fuzz使用的就是mopt-afl的fuzzer,但是我们依旧可以通过原来afl2.52b的文件夹下的afl-fuzz来运行,知道这一点之后就容易多了,之后我们不用在编译时在环境里生成的link,而是用afl的真正位置路径。

    当然了这时候我们可以先用afl-fuzz命令测试一下编译是否成功:

    afl-fuzz -i inputs/ -o outputs coreutils-8.24-lava-safe/lava-install/bin/base64 -d @@

    只要跟正常的afl显示相同即可,这里有一点变化是开头的第一行,具体mopt-afl和afl的区别看最后的截图

    二、编写两个afl同时进行的脚本

    总体的设计思路是这样的,首先编写总的shell,目的是能够统一管理fuzzer,因为之后可能会有新的fuzzer加入,比如angora、vuzz之类的,现在就要计划好结构;然后可以为每一个fuzzer单独编写shell,因为我是想用gnome-terminal实现为每一个fuzzer分配一个单独的窗口,因此最好是单独有shell,这样总的shell代码可读性也好一点。

    1.总的shell:

    #afl
    gnome-terminal --geometry=80x40+70+30 -x bash -c "sh ./afl.sh;exec bash;"
    #mopt-afl
    gnome-terminal --geometry=80x40+870+30 -x bash -c "sh ./mopt-afl.sh;exec bash;"

    2.afl的shell:

    ./afl-2.52b/afl-fuzz -i ../LAVA/lava_corpus/LAVA-M/base64/fuzzer_input/ -o ../LAVA/lava_corpus/LAVA-M/base64/outputs ../LAVA/lava_corpus/LAVA-M/base64/coreutils-8.24-lava-safe/lava-install/bin/base64 -d @@

    3.mopt-afl的shell:

    ./MOpt-AFL/MOpt-AFL/afl-fuzz -i ../LAVA/lava_corpus/LAVA-M/base64/fuzzer_input/ -o ../LAVA/lava_corpus/LAVA-M/base64/outputs_mopt ../LAVA/lava_corpus/LAVA-M/base64/coreutils-8.24-lava-safe/lava-install/bin/base64 -d @@

    4.然后运行总的脚本即可:

    bash afl_s_exc.sh

    5. 我的目录结构是这样的,可以按照自己的需求自行对以上代码进行修改:

    三、可能的报错

    1.查看报错,发现有个问题,需要 core_pattern

    2.切换root

    3.按提示输入指令切换 echo core >/proc/sys/kernel/core_pattern

    四、运行结果

    五、参考

    1. mopt-afl的git地址:https://github.com/puppet-meteor/MOpt-AFL

    2. gnome-terminal:gnome-terminal用法解析_运维_Alone-CSDN博客

  • 相关阅读:
    zuul prefix
    zuul忽略表达式
    zuul 自定义路由映射规则
    ribbon重试机制
    feign容断忽略某些异常
    cloud turbine
    hystrix 给方法加断路器
    go语言常用函数:cap
    windows 安装 go语言
    mysql win源码比较大 不需要的文件删除 记录下来
  • 原文地址:https://www.cnblogs.com/wayne-tao/p/12834525.html
Copyright © 2020-2023  润新知