自学内容网 自学内容网

AFL++实战入门与afl-fuzz流程解析(源码流程图)

简介

本项目为模糊测试的零基础教学,适合了解 pwn 且会使用 Linux 的 gcc、gdb 的读者。模糊测试旨在通过向程序投喂数据使其崩溃,从而获取崩溃样本以寻找程序漏洞。本文前半部分介绍 AFL++ 的 docker 环境配置,帮助读者解决入门时的环境和网络问题;
后半部分全面解析 afl 的模糊测试流程与源码架构,包括漏洞挖掘实战和原理机制解析。通过本文,读者可以快速入门模糊测试,并深入了解 AFL++ 的工作原理和应用。

文章主要大纲:

一、AFL++的docker环境配置

以 AFL++ 作为入门模糊测试漏洞挖掘的最佳选择。然而,入门时存在的环境和网络问题往往会使大部分人望而却步,无法顺利转战实战。为解决这一问题,我们直接采用 docker + windows 的环境,并结合 Docker + Windows + VsCode 进行运行,至于代理问题则需要自行解决。

(一)Docker+Windows

在windows上可通过以下步骤使用docker:

  1. Docker Desktop:面向开发人员的 #1 容器化工具 |码头工人 — Docker Desktop: The #1 Containerization Tool for Developers | Docker
  2. vscode远程连接docker容器_attach to vscode-CSDN博客
  3. VsCode轻松使用docker容器-Remote Containers_哔哩哔哩_bilibili

(二)Vscode插件

使用Dev Containers插件,可在商店中获取。

(三)创建afl++的docker容器

所以自己手动在命令行运行创建docker的命令:

docker run --name afl -it -d aflplusplus/aflplusplus /bin/bash

(四)存在问题及解决方案

存在一个巨大的bug如果直接使用vscode创建一个docker那么就会发生stop容器时容器自动删除!!!
解决方案可参考:

解决方案,创建afl++的docker容器可在命令行运行以下命令:

docker run name afl -it -d aflplusplus/aflplusplus /bin/bash

二、AFL++进行漏洞挖掘实战

(一)目标程序的源码

这是一个普通的栈溢出案例,添加了一点点的if判断语句用来模拟正常程序:

//test2.c
#include <stdio.h>
#include <string.h>

void vulnerable_function(char *input) {
   
    char buffer[4]; // 定义一个长度为4的字符数组

    // 复制用户输入到buffer中
    strcpy(buffer, input);

    printf("输入内容: %s\n", buffer);
}

int main() {
   
    char user_input[100];

    printf("请输入一串字符(以回车结束):");
    fgets(user_input, sizeof(user_input), stdin);

    // 移除换行符
    user_input[strcspn(user_input, "\n")] = 0;

    // 检查前四个字符是否是'a', 'b', 'c', 'd'
    if (user_input[0] == 'a' ){
   
        if( user_input[1] == 'b' ) {
   
            if (user_input[2] == 'c'){
   
              

原文地址:https://blog.csdn.net/qq_65474192/article/details/143574629

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!