当前位置: 首页 > article >正文

AFL-Fuzz 的使用

AFL-Fuzz 的使用

  • 一、工具
  • 二、有源码测试
  • 三、无源码测试



一、工具

建议安装LLVM并使用afl-clang-fast或afl-clang-lto进行编译,这些工具提供了更现代和高效的插桩技术。您可以按照以下步骤安装LLVM和afl-clang-fast:

sudo apt update
sudo apt install llvm
wget http://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz
tar -xf afl-latest.tgz
cd afl-<version>
make
sudo make install

二、有源码测试

在分析前,先创建两个文件夹,fuzz_in 和 fuzz_out。

fuzz_in 里面再创建个 txt 文件,里面输入一点字母即可。

还有一点,核心转储的问题。

sudo su
echo "core" > /proc/sys/kernel/core_pattern
exit

源码示例

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <string.h> 
#include <signal.h> 

int vuln(char *str)
{
    int len = strlen(str);
    if(str[0] == 'A' && len == 66)
    {
        raise(SIGSEGV);
        //如果输入的字符串的首字符为A并且长度为66,则异常退出
    }
    else if(str[0] == 'F' && len == 6)
    {
        raise(SIGSEGV);
        //如果输入的字符串的首字符为F并且长度为6,则异常退出
    }
    else
    {
        printf("it is good!\n");
    }
    return 0;
}

int main(int argc, char *argv[])
{
    char buf[100]={0};
    gets(buf);//存在栈溢出漏洞
    printf(buf);//存在格式化字符串漏洞
    vuln(buf);

    return 0;
}

对其插桩编译:afl-clang-fast -g test.c -o test

运行结果如下:

在这里插入图片描述

接下来,我们开始模糊测试:

afl-fuzz -i fuzz_in -o fuzz_out -- ./test 

运行结果如下:
在这里插入图片描述
红框是我们要关注的地方,如果cycles的颜色变绿了,说明测试的差不多了,可以 ctrl+c 中断掉了。比如下图:
在这里插入图片描述
我们查看 fuzz_out 文件夹的 crashes 文件夹。

三、无源码测试

你会发现 AFL 的 qemu-mode 有非常多的问题。这边建议不用折腾 AFL了,直接下载ALF++。

git clone https://github.com/AFLplusplus/AFLplusplus.git
cd AFLplusplus
make all

然后,进入 qemu-mode 文件夹,运行 build 脚本。

cd qemu-mode
./build_qemu_support.sh 

运行完,还得回到上级目录,也就是 AFLplusplus,然后运行 sudo make install。

cd ../
sudo make install

再测试案例的时候,别用上面插过桩的可执行文件。重新用 gcc 编译生成,记得 fuzz_out 要换个文件夹。

运行如下,等待变绿吧。

afl-fuzz -i fuzz_in -o fuzz_out_2 -Q ./afl_test2

在这里插入图片描述


http://www.kler.cn/a/445854.html

相关文章:

  • 五十个网络安全学习项目——(九)无线网络安全分析
  • windows 钉钉缓存路径不能修改 默认C盘解决方案
  • Python 【大模型】之 使用千问Qwen2-VL 大模型训练LaTeX数学公式图,并进行LaTeX图识别测试
  • 校园快领系统|Java|SSM|VUE| 前后端分离
  • 模型训练之优化器
  • #渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍05-基于堆叠查询的SQL注入(Stacked Queries SQL Injection)
  • java全栈day17--Web后端实战(java操作数据库)
  • springboot3访问第三方接口
  • GNU Octave:特性、使用案例、工具箱、环境与界面
  • PHP接入美团联盟推广
  • textfile类型小文件合并
  • Unity动态读取外部图片转Texture2D,内存过大问题解决方案
  • [ThinkPHP]5.0.23-Rce 1
  • Oracle/MySQL 到 OceanBase 数据库迁移的关键问题与解决方案
  • python学opencv|读取图像(十五)BGR图像和HSV图像通道合并
  • M3D: 基于多模态大模型的新型3D医学影像分析框架,将3D医学图像分析从“看图片“提升到“理解空间“的层次,支持检索、报告生成、问答、定位和分割等8类任务
  • 【蓝桥杯每日一题】扫雷——暴力搜索
  • 方正畅享全媒体采编系统reportCenter.do接口SQL注入漏洞复现 [附POC]
  • css底部对齐布局
  • PC寄存器(Program Counter Register) jvm