學習fuzzing也幾天了,今天記錄AFL++的安裝及使用
一、實驗環境
虛擬機:ubuntu20.04
當然也可以uname -a
去看自己的版本號
二、AFL++安裝
1.先更新一下工具
sudo apt update
2.安裝AFL++必要的一些依賴,例如編譯工具(如 build-essential)、Python 開發環境、自動化構建工具(如 automake)。
sudo apt install -y build-essential python3-dev automake cmake git flex bison libglib2.0-dev libpixman-1-dev python3-setuptools cargo libgtk-3-dev
在過程中我開始遇到被2954進程占用,如下圖
這個進程是管包更新的。我本來準備kill這個進程,但過了一會他便好了
3.克隆AFL++倉庫
git clone https://github.com/AFLplusplus/AFLplusplus.git
克隆好后去下方的文件夾
cd AFLplusplus
4.編譯安裝AFL++
我開始make all
指令后,出現下面問題
遇到的錯誤是因為缺少 GCC 插件開發頭文件,于是我開始安裝。先下面看gcc的版本號
gcc -v | head -n1
然后安裝gcc插件包
sudo apt install gcc-9-plugin-dev
# 若版本是 12.x,改為:
# sudo apt install gcc-12-plugin-dev
安裝完事后,再重新編譯AFL++
make clean # 清理舊編譯文件(可選)
make # 重新執行編譯
同時,我也將其安裝到系統,使其可以全局使用
sudo make install
5.檢測AFL++是否安裝成功
afl-fuzz --help
到這AFL++安就安好了
三、安裝VScode
這不是重點,我們快速帶過
安裝命令如下
sudo apt update
sudo apt install software-properties-common apt-transport-https wget
# 添加微軟簽名密鑰
wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/microsoft.gpg
# 添加 VS Code 軟件源
sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"
# 安裝 VS Code
sudo apt install code
啟動命令如下:
code
四、使用AFL++
4.1 實驗準備
我們先編寫一個test.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(int argc, char *argv[]) {char buffer[100];if (argc > 1) {strcpy(buffer, argv[1]);printf("You entered: %s\n", buffer);}return 0;
}
這里很明顯可以看出緩沖器漏洞
回顧一下平常我們怎么啟用
gcc test.c -o test
#其中,test.c是源文件名,-o test指定生成的可執行文件名為test
./test xxx
#./test就可以啟動test.exe,后面xxx可以輸進去東西
4.2 工具測試
**1.編譯目標程序。**使用 AFL++ 提供的編譯器包裝器 afl-clang-fast 或 afl-gcc 來編譯目標程序,以便在運行時收集模糊測試所需的信息。這里以 afl-clang-fast 為例:
afl-clang-fast -g -o test test.c
遇到一個問題,安一下afl-clang-fast
sudo apt install afl++-clang
再執行就OK了
2.創建基礎文件
模糊測試需要一些初始的輸入數據作為測試的起點。創建一個包含簡單輸入的文件
mkdir in
echo "Hello" > in/test_input
mkdir out
3.啟動模糊測試
使用 afl-fuzz 命令啟動模糊測試,指定輸入目錄、輸出目錄和要測試的目標程序:
afl-fuzz -i in -o out ./test @@
-i in
:指定包含初始輸入文件的目錄。
-o out
:指定用于存儲模糊測試結果的輸出目錄。
./test @@
:指定要測試的目標程序,@@ 是 AFL++ 的占位符,表示在運行目標程序時將自動替換為生成的輸入文件。
執行遇到一個小問題
從你給出的錯誤信息可知,系統當前的 core_pattern 配置會致使在捕獲程序崩潰時出現延遲,從而影響 AFL++ 的正常運行。AFL++ 建議你修改 /proc/sys/kernel/core_pattern 的配置
我們在這個框臨時解決一下
echo core | sudo tee /proc/sys/kernel/core_pattern
該命令的作用是把 /proc/sys/kernel/core_pattern 的值設定為 core,如此一來,系統在產生核心轉儲文件時就不會借助外部工具,從而避免了延遲問題。
不過,這種修改僅在當前會話中有效,系統重啟之后配置會恢復原狀。
再執行:
就產生下面的運行結果圖:
還有