AFL FUZZ使用筆記(1)

2021-10-09 22:15:25 字數 2659 閱讀 6867

afl(american fuzzy lop)是一款基於覆蓋引導(coverage-guided)的模糊測試工具,它通過記錄輸入樣本的**覆蓋率,從而調整輸入樣本以提高覆蓋率,增加發現漏洞的概率。

①從原始碼編譯程式時進行插樁,以記錄**覆蓋率(code coverage);

②選擇一些輸入檔案,作為初始測試集加入輸入佇列(queue);

③將佇列中的檔案按一定的策略進行「突變」;

④如果經過變異檔案更新了覆蓋範圍,則將其保留新增到佇列中;

⑤上述過程會一直迴圈進行,期間觸發了crash的檔案會被記錄下來。

開始fuzzing前,首先要選擇乙個目標。 afl的目標通常是接受外部輸入的程式或庫,輸入一般來自檔案。

afl主要用於c/c++程式的測試,所以這是我們尋找軟體的最優先規則。

make

sudo make install

輸入afl-fuzz測試安裝是否成功;

檢視afl安裝目錄:

• afl-gcc 和afl-g++ 分別對應的是gcc 和g++ 的封裝

• afl-clang 和afl-clang++ 分別對應clang 的c 和c++ 編譯器封裝à。

• afl-fuzz 是afl 的主體,用於對目標程式進行fuzz。

• afl-analyze 可以對用例進行分析,通過分析給定的用例,看能否發現用例中有意義的字段。

• afl-qemu-trace 用於qemu-mode,預設不安裝,需要手工執行qemu-mode 的編譯指令碼進行編譯,後面會介紹。

• afl-plot 生成測試任務的狀態圖

• afl-tmin 和afl-cmin 對用例進行簡化

• afl-whatsup 用於檢視fuzz 任務的狀態

• afl-gotcpu 用於檢視當前cpu 狀態

• afl-showmap 用於對單個用例進行執行路徑跟蹤

按照 的思路,我們也拿乙個c語言程式來進行試用afl-fuzz;

將cc和cxx加入環境變數(makefile檔案中的引數,測試有makefile檔案的專案時必須這樣作,此處不必要)

export cc=afl-clang;export cxx=afl-clang++;
插樁編譯目標

afl-gcc -g -o afl-demo1.c afl-demo1
開始fuzz

對那些可以直接從stdin讀取輸入的目標程式來說,語法如下:

$ ./afl-fuzz -i testcase_dir -o findings_dir /path/to/program […params…]

對從檔案讀取輸入的目標程式來說,要用「@@」,語法如下:

$ ./afl-fuzz -i testcase_dir -o findings_dir /path/to/program @@

我們這裡使用第二種

afl-fuzz -i afl-test/in -o afl-test/out1 -m fuzzer11 -- ./afl-demo1 @@
會出現兩次報錯

需要根據提示設定一波core_pattern

sudo su

echo core >/proc/sys/kernel/core_patter

cd sys/devices/system/cpu

echo preformance | tee cpu*/cpufreq/scaling_governor

之後進入fuzz執行介面,在last new path列報錯 (odd,check syntax!),通常意味著命令列實際上沒有讀取檔案。

改用-f引數如下,並正常進入fuzz

ps: 常見引數的含義如下

從介面上主要注意以下幾點:

進入指定的out目錄下,crashes存放了fuzz過程中導致專案崩潰的情況的檔案(有待研究)

MYSQL使用筆記(1)

建立使用者 使用者名稱 dn puser 密碼 dn p1347 insert into mysql.user host,user,password values localhost dn puser password dn p1347 建立資料庫 分配資料庫許可權 create database ...

nanomsg使用筆記 1

目前大致的使用情況是使用pollfd,begin nn rep no nn push no nn pub can out nn req can out nn survey can in can out 但是如果沒有survey就去recv,會報錯efsm.使用nn errno和nn strerror...

linux 使用筆記1

zox s code life 人生就是不停的戰鬥!命令 su 2.新增sudo檔案的寫許可權,命令是 chmod u w etc sudoers 3.編輯sudoers檔案 vi etc sudoers 找到這行 root all all all,在他下面新增 all all all 這裡的 是你...