简介
本项目为模糊测试的零基础教学,适合了解 pwn 且会使用 Linux 的 gcc、gdb 的读者。模糊测试旨在通过向程序投喂数据使其崩溃,从而获取崩溃样本以寻找程序漏洞。本文前半部分介绍 AFL++ 的 docker 环境配置,帮助读者解决入门时的环境和网络问题;
后半部分全面解析 afl 的模糊测试流程与源码架构,包括漏洞挖掘实战和原理机制解析。通过本文,读者可以快速入门模糊测试,并深入了解 AFL++ 的工作原理和应用。
文章主要大纲:
- 一、AFL++的docker环境配置
- 二、AFL++进行漏洞挖掘实战
- 三、AFL++漏洞挖掘原理与机制解析
一、AFL++的docker环境配置
以 AFL++ 作为入门模糊测试漏洞挖掘的最佳选择。然而,入门时存在的环境和网络问题往往会使大部分人望而却步,无法顺利转战实战。为解决这一问题,我们直接采用 docker + windows 的环境,并结合 Docker + Windows + VsCode 进行运行,至于代理问题则需要自行解决。
(一)Docker+Windows
在windows上可通过以下步骤使用docker:
- Docker Desktop:面向开发人员的 #1 容器化工具 |码头工人 — Docker Desktop: The #1 Containerization Tool for Developers | Docker
- vscode远程连接docker容器_attach to vscode-CSDN博客
- 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容器时容器自动删除!!!
解决方案可参考:
- docker exit 退出后容器消失 - 一个人的孤独自白 - 博客园 (cnblogs.com)
- 30 如何在VS Code中配置、部署和调试Docker? | yuy4o
解决方案,创建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'){