AFL基礎(chǔ)篇0x01——安裝、配置與使用

AFL作為最有名的開源灰盒模糊測試引擎,得到了學(xué)術(shù)界與工業(yè)界的廣泛關(guān)注。本文將簡要介紹AFL在unbuntu linux18.04下的安裝與配置,并介紹AFL的基礎(chǔ)使用,(暫不介紹內(nèi)部原理)如有不足之處還請(qǐng)諸位斧正。

1.下載

推薦到AFL的官網(wǎng)進(jìn)行下載,鏈接如下
https://lcamtuf.coredump.cx/afl/

2.安裝

將壓縮包解壓完成之后,進(jìn)入到其目錄下打開終端

make
sudo make install

如果在該目錄下,出現(xiàn)了afl-fuzz的可執(zhí)行文件,說明安裝成功。(暫未遇到過安裝不成功的情況。)


3.使用

3.1 簡單c語言程序

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <string.h> 
#include <signal.h> 

int vuln(char *str)
{
    int len = strlen(str);
    if(str[0] == 'A' && len == 66)
    {
        raise(SIGSEGV);
        //如果輸入的字符串的首字符為A并且長度為66,則異常退出
    }
    else if(str[0] == 'F' && len == 6)
    {
        raise(SIGSEGV);
        //如果輸入的字符串的首字符為F并且長度為6,則異常退出
    }
    else
    {
        printf("it is good!\n");
    }
    return 0;
}

int main(int argc, char *argv[])
{
    char buf[100]={0};
    gets(buf);//存在棧溢出漏洞
    printf(buf);//存在格式化字符串漏洞
    vuln(buf);

    return 0;
}

程序很簡單,不贅述。注意需要將該程序放在與afl-fuzz同一目錄下。
編譯插樁指令:
afl-gcc -g -o afl_test afl_test.c
建立兩個(gè)文件夾,fuzz_in和fuzz_out,顧名思義
fuzz_in中需要?jiǎng)?chuàng)建一個(gè)測試樣本,并在里邊插入字符“123”
echo "123" > 1
fuzzing!!!
afl-fuzz -i fuzz_in -o fuzz_out ./test
運(yùn)行界面如下圖:


ps:可能會(huì)遇到 echo core >/proc/sys/kernel/core_pattern的報(bào)錯(cuò),sudo su之后執(zhí)行這條指令即可

sudo su
echo core >/proc/sys/kernel/core_pattern

簡要說明一下其界面,
(1)process timing
里邊記錄著運(yùn)行時(shí)狀態(tài),當(dāng)前fuzz了多久,距離最近的一次發(fā)現(xiàn)新路徑和觸發(fā)新的程序崩潰過去了多久。
(2)overall results
統(tǒng)計(jì)信息。統(tǒng)計(jì)有多少崩潰,fuzzing循環(huán)了多少次,發(fā)現(xiàn)了多少路徑。
其他的話目前還不需要了解。

這樣就完了么?沒有...我還要展示如何使用AFL來fuzz binutils

3.2 AFL測試readelf

下載好binutils,(因?yàn)檫@里示范的是有源碼下的編譯插樁,所以需要去binutils的源碼,針對(duì)二進(jìn)制程序的QEMU模式以后再介紹吧)
https://ftp.gnu.org/gnu/binutils/
下載完成之后解壓,進(jìn)入其目錄下
注意?。?!注意!??!敲重點(diǎn)啦
必須修改編譯器環(huán)境為afl-gcc和afl-g++,在大部分的源碼編譯插樁中基本都需要這一步。

>CC=~/.../afl-gcc CXX=~/.../afl-g++ ./configure  //替換為自己afl的目錄
>make

如果在make的時(shí)候如果有類似下邊的Instrumented就說明你成功了:


一定要先插樁成功,如果不成功的話,無法進(jìn)行測試的。
如果沒有插樁成功,可以刪除當(dāng)前目錄然后多嘗試幾次,關(guān)鍵就是要將CC更改為afl-gcc,并且更新配置信息。
測試 readelf

>mkdir fuzz_in
>cd ..
>~/../afl-fuzz -i fuzz_in -o fuzz_out binutils/readelf -d @@

readelf有輸入?yún)?shù)-d,不加的話就會(huì)報(bào)錯(cuò)
另外,輸入的文件夾fuzz_in里邊需要放一個(gè)elf文件,這里可以使用afl自帶的,
文件目錄為~/afl-2.52b/testcases/others/elf/small_exec.elf
界面展示:


后記

本人在剛開始配置AFL的過程中得到了前輩們寫的教程幫助,respect,由此在前人的基礎(chǔ)上將自己的配置過程寫下來。后續(xù)會(huì)接著介紹afl測試其他目標(biāo)程序以及LAVA-M數(shù)據(jù)集,并且介紹AFL的原理和源碼閱讀。
參考鏈接:
https://xz.aliyun.com/t/4314
https://www.codercto.com/a/78143.html
http://www.itdecent.cn/p/bfab6bb94fb6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容