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 這裡的 是你...