AFL使用


0x00 原理

環境:kail linux

選取AFL對libtiff(Libtiff 是一個用來讀寫標簽圖像文件格式)進行模糊測試,作為入門示例。——測試目標libtiff。

將libtiff的編譯程序指定為AFL的編譯器(afl-gcc,afl-g++)進行編譯,這樣AFL編譯器會對源碼進行打樁。 最后通過afl-fuzz 啟動編譯出來的libtiff程序,並指定輸入文件夾與輸出文件夾。 AFL會讀取輸入文件,進行變異喂給應用程序,最后將crash等輸出信息保存到輸出文件夾。

打樁原理:

源碼:

while (go):

    req = get_request()

    process(req)

 

AFL插入后代碼:

while (go)

    put_request(read(file)) // AFL

    req = get_request()

    process(req)

    notify_fuzzer() // AFL

 

 

0x01 AFL安裝

下載:wget http://lcamtuf.coredump.cx/afl.tgz tar xfz afl.tgz

解壓:tar xfz afl.tgz

進入文件夾:cd afl-1.88b (看下載的版本,不一定是1.88)

安裝: sudo make install

0x02 編譯libtiff

下載:wget http://download.osgeo.org/libtiff/tiff-3.8.2.tar.gz

解壓:tar zxvf  tiff-3.8.2.tar.gz

加入文件夾: cd tiff-3.8.2

指定編譯程序為AFL的編譯器:export CC=afl-gcc (設置linux環境變量,env查看)

                                                                   export CXX=afl-g++

 

編譯:./configure –disable-shared

           make clean

           make

編譯完成后會在tools文件夾下面生成可執行程序如bmp2tiff

 

0x03 開始fuzzing

建立輸入輸出文件夾:mkdir input output

將初始文件放入到輸入文件夾中: cp bmp/full/images/* input/

(也可在網上下載,關鍵在於把初始文件放入到input文件夾)

 

開始fuzzing:  afl-fuzz -i input –o output /root/tiff-3.8.2/tools/bmp2tiff @@ /dev/null(通過afl-fuzz啟動應用程序,-i指定應用程序的輸入,-o指定fuzzing結果的輸出,/root/tiff-3.8.2/tools/bmp2tiff通過AFL編譯生成的應用程序路徑,/dev/null不輸出錯誤信息到屏幕中)

開發fuzzing后會進入這樣一個界面

 

Output中生成這些文件,一些crashes和hangs文件等

 

0x04 小結

         AFL非常適合於linux下有源碼程序的測試,在linux下環境搭建簡單,使用方便。對於crash的分析與對無源碼程序的fuzz有待后續深入研究。

 

0x05 參考資料

http://files.meetup.com/17933012/2015-03-introduction-fuzzing-with-afl.pdf

http://lcamtuf.coredump.cx/afl/README.txt

http://lcamtuf.coredump.cx/afl/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM