日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

work节点使用外部包_AFLSmart工具简单分析及使用介绍

發(fā)布時(shí)間:2025/3/12 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 work节点使用外部包_AFLSmart工具简单分析及使用介绍 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

AFLSmart 是一個(gè)在 AFL 基礎(chǔ)上,結(jié)合了 Peach 的結(jié)構(gòu)化輸入組件的灰盒 smart fuzz 工具。

AFLSmart 鏈接:https://github.com/aflsmart/aflsmart

參考資料:《Smart Greybox Fuzzing》

什么是 AFLSmart

灰盒 smart fuzz

灰盒測(cè)試是基于程序運(yùn)行時(shí)刻的外部表現(xiàn)同時(shí)又結(jié)合程序內(nèi)部邏輯結(jié)構(gòu)來(lái)設(shè)計(jì)用例,執(zhí)行程序并采集程序路徑執(zhí)行信息和外部用戶接口結(jié)果的測(cè)試技術(shù)。

具有結(jié)果反饋功能的模糊測(cè)試即屬于灰盒 fuzz,如 AFL,會(huì)對(duì)待測(cè)程序進(jìn)行插裝,從而監(jiān)控每個(gè)輸入的路徑覆蓋率,為下一次選擇輸入文件進(jìn)行變異提供依據(jù)。

smart fuzz 是面向具有高度結(jié)構(gòu)化輸入(如,PPT,mp3,PDF 等)的程序進(jìn)行測(cè)試的一類(lèi)模糊測(cè)試工具,典型的 smart fuzz 工具如 Peach。使用 Peach 的關(guān)鍵在于名為「Peach Pit」的 xml 配置文件。「Peach Pit」主要包含了文件的數(shù)據(jù)信息。

AFLSmart

AFLSmart 在 AFL 的基礎(chǔ)上,參照了 Peach 的 File Cracker 組件,將文件按 chunk 劃分,抽象為一個(gè)可以用 xml 文件描述的樹(shù)形的結(jié)構(gòu),如下圖為一個(gè) wav 格式的文件抽象為 xml 文件的表示:

針對(duì)結(jié)構(gòu)化的輸入,AFL 提供了基于字典的方法進(jìn)行解決,然而該方法的缺陷在于,在變異的時(shí)候,仍然處于 bit 級(jí)別的變異,AFL 無(wú)法對(duì)一個(gè)文件塊進(jìn)行增加和刪除操作。? ?

AFLSmart 源碼中,對(duì) chunk 結(jié)構(gòu)的定義如下:

struct chunk {
unsigned long
id; /* The id of the chunk, which either equals its pointer value or, when
loaded from chunks file, equals to the hashcode of its chunk
identifer string casted to unsigned long. */
int type; /* The hashcode of the chunk type. */
int start_byte; /* The start byte, negative if unknown. */
int end_byte; /* The last byte, negative if unknown. */
char modifiable; /* The modifiable flag. */
struct chunk *next; /* The next sibling child. */
struct chunk *children; /* The children chunks linked list. */
};

一個(gè) chunk 結(jié)構(gòu)里定義了 chunk 的類(lèi)型、開(kāi)始位置、結(jié)束位置、表示是否被修改的標(biāo)志位、以及 chunk 的子節(jié)點(diǎn)和 next 節(jié)點(diǎn)。

在 AFL 的 bit 級(jí)別的變異的基礎(chǔ)上,AFLSmart 增加了對(duì) chunk 級(jí)別的變異操作,主要包括三種操作:

smart deletion:

在這種方法中,會(huì)對(duì)給定的種子文件,隨機(jī)選取 chunk 進(jìn)行刪除。

smart addition:

在這種方法中,給定一個(gè)種子文件 S1,隨機(jī)選取一個(gè)種子文件 S2,在 S2 中隨機(jī)選取一個(gè) chunk C2,將 C2 插入到 S1 中和 C2 具有相同父節(jié)點(diǎn)的 chunk C1 的后面(C1.parent.type ==C2.parent.type)? ?

smart splicing:

這種方法中,對(duì)于給定的種子文件 S1,隨機(jī)選取 chunk C1,隨機(jī)選取種子文件 S2,找到 S2 中與 C1 類(lèi)型相同的 chunk C2,將 C2 替換到 C1 的位置上。? ?

AFLSmart 的安裝

1. 安裝 automake 及一些其他的包

sudo apt-get install build-essential automake libtool libc6-dev-i386 python-pip g++-multilib

2. 安裝 mono 包,為了在 Linux 上支持 C#

sudo apt-get install mono-complete

3. 安裝 gcc-4.4 以及 g++-4.4,(Peach 中的 Pin 組件在更高的 gcc 版本中會(huì)發(fā)生一些編譯問(wèn)題)? ?

sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt install gcc-4.4 sudo apt install g++-4.4

如成功,則直接看第四步,如不能成功,可嘗試以下命令

sudo gedit /etc/apt/sources.list

向文件中添加如下內(nèi)容:? ??

deb http://dk.archive.ubuntu.com/ubuntu/ trusty main universe

然后安裝

sudo apt-get update sudo apt install gcc-4.4 sudo apt install g++-4.4

4. 環(huán)境成功準(zhǔn)備好后,開(kāi)始 AFLSmart 的安裝

git clone https://github.com/aflsmart/aflsmart cd aflsmart make clean all cd .. export AFLSMART=$(pwd)/aflsmart export WORKDIR=$(pwd)

5. 修改 Peach 的版本

cd $AFLSMART wget https://sourceforge.net/projects/peachfuzz/files/Peach/3.0/peach-3.0.202-source.zip unzip peach-3.0.202-source.zip patch -p1 < peach-3.0.202.patch cd peach-3.0.202-source CC=gcc-4.4 CXX=g++-4.4 ./waf configure CC=gcc-4.4 CXX=g++-4.4 ./waf install

6. 設(shè)置 PATH 的環(huán)境變量

export PATH=$PATH:$AFLSMART:$AFLSMART/peach-3.0.202-source/output/linux_x86_64_debug/bin export AFL_PATH=$AFLSMART export LD_LIBRARY_PATH=/usr/local/lib

7. 進(jìn)入到 AFLSmart 目錄,輸入

./afl-fuzz

出現(xiàn)如下界面,說(shuō)明安裝成功。

AFLSmart 的使用

熟悉 AFL 的朋友,對(duì)于 AFLSmart 的使用應(yīng)該不會(huì)太陌生,AFlSmart 的使用方法與 AFL 基本一致。這里還是以 tcpdump 為例,對(duì) AFLSmart 的使用進(jìn)行一個(gè)簡(jiǎn)單的介紹。

測(cè)試 tcpdump 之前,首先應(yīng)該下載 tcpdump 源碼包,下載地址:http://www.tcpdump.org/,在這個(gè)地址,下載 tcpdump 包與 libpcap 包。

下載 tcpdump 的一些其他依賴包:下載 bison 包,下載地址:ftp.gnu.org/gnu/bison,? ?下載 m4 包,下載地址:ftp.gnu.org/gnu/m4/。

1. 安裝 libpcap:

tar -zxvf libpcap-1.3.0.tar.gz? cd libpcap-1.3.0 ./configure make? make install

2. 輸入命令,安裝 flex

sudo apt-get install flex

3.bison 與 m4 包的安裝步驟與 libpcap 的相同,參照上述命令即可。

4. 使用 afl-gcc 對(duì) tcpdump 進(jìn)行編譯,afl-gcc 會(huì)在對(duì) tcpdump 進(jìn)行編譯時(shí),對(duì) tcpdump 進(jìn)行插樁,從而方便監(jiān)控用例的路徑覆蓋情況。命令如下:

tar -zxvf tcpdump-4.3.0.tar.gz? cd tcpdump-4.3.0 CC=./aflsmart 安裝目錄/afl-gcc ./configure make clean all make install

編譯過(guò)程中,出現(xiàn)如下界面,說(shuō)明使用 afl-gcc 對(duì) tcpdump 進(jìn)行編譯成功。

tcpdump 的命令格式如下:

tcpdump [ -adeflnNOpqRStuvxX ] [ -c 數(shù)量 ] [ -C 文檔尺寸 ] [ -F 文檔名 ] [ -i 網(wǎng)絡(luò)接口 ] [ -m 文檔名 ] [ -r 文檔名 ] [ -s 長(zhǎng)度 ] [ -T 類(lèi)型 ] [ -w 文檔名 ] [ -E algo:secret ] [ 表達(dá)式 ]?

tcpdump 常用命令行選項(xiàng):

-a 將網(wǎng)絡(luò)地址和廣播地址轉(zhuǎn)變成容易識(shí)別的名字?

-d 將已截獲的數(shù)據(jù)包的代碼以人容易理解的格式輸出;?

-dd 將已截獲的數(shù)據(jù)包的代碼以 C 程式的格式輸出;?

-ddd 將已截獲的數(shù)據(jù)包的代碼以十進(jìn)制格式輸出;?

-e 輸出數(shù)據(jù)鏈路層的頭部信息;?

-f 將 internet 地址以數(shù)字形式輸出;?

-l 將標(biāo)準(zhǔn)輸出變?yōu)樾芯彌_方式;?

-n 不將網(wǎng)絡(luò)地址轉(zhuǎn)換成易識(shí)別的主機(jī)名,只以數(shù)字形式列出主機(jī)地址 (如 IP 地址),這樣能夠避免 DNS 查詢;?

-t 不輸出時(shí)間戳;?

-v 輸出較周詳?shù)男畔?#xff0c;例如 IP 包中的 TTL 和服務(wù)類(lèi)型信息;?

-vv 輸出詳盡的報(bào)文信息;?

-c 在捕獲指定個(gè)數(shù)的數(shù)據(jù)包后退出;?

-F 從指定的文檔中讀取過(guò)濾規(guī)則,忽略命令行中指定的其他過(guò)濾規(guī)則;?

-i 指定監(jiān)聽(tīng)的網(wǎng)絡(luò)接口;?

-r 從指定的文檔中讀取數(shù)據(jù)包 (該文檔一般通過(guò)-w 選項(xiàng)產(chǎn)生);?

-w 將截獲的數(shù)據(jù)包直接寫(xiě)入指定的文檔中,不對(duì)其進(jìn)行分析和輸出;?

-T 將截獲的數(shù)據(jù)包直接解釋為指定類(lèi)型的報(bào)文,現(xiàn)在支持的類(lèi)型有 cnfp、rpc、rtp、snmp、vat 和 wb。

接下來(lái),我們將使用 AFLsmart 對(duì) tcpdump 的 -nr 功能進(jìn)行測(cè)試,該參數(shù)的作用是從指定的文檔中讀取數(shù)據(jù)包。

6. 收集測(cè)試用例。我們需要 pcap 格式的輸入,對(duì) tcpdump 的-nr 功能進(jìn)行測(cè)試。在 tcpdump 源碼包中有一個(gè) tests 文件夾,包含了許多我們測(cè)試所需的 pcap 文件。這里,我們直接使用這些 pcap 文件進(jìn)行測(cè)試。

新建一個(gè) tcpdumptest 文件夾,方便測(cè)試。將 testes 文件夾復(fù)制過(guò)來(lái),只保留 pcap 的數(shù)據(jù)。

cd tcpdumptestmkdir incd testscp *.pcap ../incd ..rm -f tests

AFL 中還有一些對(duì)數(shù)據(jù)進(jìn)行處理的工具,可以對(duì)輸入數(shù)據(jù)進(jìn)行覆蓋率分析等,壓縮輸入文件的大小,從而提高測(cè)試的效率。如 afl-tmin、afl-cmin。網(wǎng)上已有許多介紹 AFL 的文章了,這里對(duì)這些工具就不重復(fù)介紹了。

你可以使用這些工具對(duì) pcap 包進(jìn)行一個(gè)處理,也可以不處理,直接使用它們進(jìn)行測(cè)試。

7. 測(cè)試 tcpdump

輸入命令:

cd aflsmart ./afl-fuzz -i ../testaflsmart/tcpdump/in/ -o ../testaflsmart/tcpdump/out/ tcpdump -nr @@

可能會(huì)出現(xiàn)如下界面:

按照?qǐng)D片提示,進(jìn)入 root 用戶模式,輸入命令即可。

最終運(yùn)行界面如下圖所示:

AFLSmart 的測(cè)試

在 smart greybox fuzz 文中提到,他們使用 AFLSmart 與 AFL、Peach、AFLfast 對(duì)幾種具有結(jié)構(gòu)化輸入的程序進(jìn)行測(cè)試,結(jié)果如下如所示:

由上圖可以看出,AFLSmart 在測(cè)試 AVI、WAV、JPEG2000 這三種格式時(shí),與其他三種工具相比,優(yōu)勢(shì)明顯。

*本文作者:紅玫瑰與黑玫瑰,轉(zhuǎn)載請(qǐng)注明來(lái)自FreeBuf.COM

總結(jié)

以上是生活随笔為你收集整理的work节点使用外部包_AFLSmart工具简单分析及使用介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。