如何使用Afl Fuzz去測試乙個shell指令碼

2021-08-21 06:08:18 字數 1375 閱讀 9531

眾所周知,模糊測試技術已經成為了測試軟體質量的重要手段。基於模糊測試技術開發的測試工具有很多,其中最長被使用而且改進也是最多的乙個工具就是afl(american fuzz lop). 本篇文章不會贅述如何安裝afl,以及如何使用afl進行簡單的fuzz。由於很多被測程式都有自己的乙個入口,而這些入口有的十分清晰,有的則很難挖掘到。為了解決這個問題,有許多軟體專案在自己的**中會給出乙個用於測試的程式,一般叫做test-driver,這個程式裡面實現了該軟體專案的一些主要函式和方法,可以用來對整個軟體專案進行測試。但是,大部分的test-driver是乙個shell指令碼,而afl是無法對乙個shell指令碼進行fuzz的。為了解決這個問題,我們可以變換一種方法來進行指令碼的fuzz。具體操作過程如下:

shc是乙個可以編譯shell程式為c可執行程式的編譯器,專案位址如下:在編譯shc的過程中,你用到的編譯器將會決定shc將shell轉換成c檔案之後的編譯器用什麼,所以我們安裝shc的過程如下:

git clone 

cd shc

./autogen.sh

cc=/usr/local/bin/afl-gcc ./configure # cc設定為afl-gcc的絕對路徑

vim makefile

在makefile裡面,觀察一下cc是否是afl-gcc,如果想加asan模式,在cflag後面新增 -fsanitize=address。

make
在編譯之後,安裝:

make install
在src目錄下可以看到生成的可執行檔案shc,我們隨便找乙個指令碼來測試一下,在shc/test/ 目錄下,有若干測試指令碼,我們利用pru.sh這個檔案進行測試,將pru.sh copy到當前目錄下:

cp ../test/pru.sh ./
之後執行:

./shc -f ./pru.sh ./out
1)第乙個pru.sh自然不必說,是shell檔案:

2) out檔案是乙個可執行檔案:

有了用afl-gcc編譯安裝好的shc,我們就可以fuzz乙個shell指令碼檔案了。具體做法也十分簡單,對於乙個軟體專案來說,用afl-gcc編譯插樁整個程式,之後,利用剛剛的方法編譯安裝好shc,然後利用shc將test-driver轉化為乙個c編譯成的可執行檔案,這裡的編譯器用的還是afl-gcc,這樣就給驅動程式進行了插樁編譯。然後就可以設定種子,fuzz這個編譯出來的可執行檔案啦。

如何去面試軟體測試工程師?

首先買個關子,如果你是面試官,你希望招乙個什麼樣的人進來?如果這個問題搞明白了,那麼可以說測試崗位的面試,就變得非常輕鬆了。按照一般的慣例,面試官都會讓你自我介紹,介紹你的專案經驗,詢問你的技術能力,這些都是常規的問題。在這篇文章裡,我不去說什麼固定的範本什麼的,我就以我以前面試別人的情景為例,具體...

如何有效的去使用一款免費的ERP

現在市場上免費的軟體不少,怎麼樣去使用一款免費產品是很多人比較頭疼的事情。一般使用免費erp軟體的基本都是小企業,沒用過想用又捨不得花錢。如果企業有懂資料庫這塊兒的管理員,那都還好。如果沒有,那建議有些部分的錢該花還是要花的,不要為了省小錢花大錢 但是錢也要花在刀刃上,要學會花錢。對於企業來說,在使...

如何去重只保留一項 前端日記 如何實現陣列去重?

假設有陣列 array 1,5,2,3,4,2,3,1,3,4 寫乙個函式 unique,使得 unique array 的值為 1,5,2,3,4 保留不重複的值。方法一 使用set實現 let arr 1,5,2,3,4,2,3,1,3,4 function unique arr console...