Fuzz漏洞挖掘漫談

2021-12-30 04:49:03 字數 2480 閱讀 3341

在計算機領域,fuzz testing(模糊測試)是一種測試方法,即構造一系列無規則的「壞」資料插入應用程式,判斷程式是否出現異常,以發現潛在的bug。在資訊保安領域,也有人嘗試引入fuzz testing思想進行安全漏洞挖掘,而且效果不錯。

大家可以看到,fuzz安全測試理論和應用都已經較為成熟,已有各種fuzz安全測試的框架、工具甚至書籍問世。

初識fuzz的威力是在07年。當時來自team509安全團隊的wushi發現了qq的乙個溢位漏洞,wushi本著「負責任的漏洞披露過程」將漏洞細節告知了騰訊安全團隊。為此,騰訊還專門發布了乙個安全公告(這應該是騰訊的第乙個漏洞安全公告,奠定了騰訊未來的安全漏洞應急響應基礎,具有劃時代的意義。當然,這些都是另乙個話題了。

原來在當時的qq 2007的遠端協助模組在解包的過程中沒有對傳入的資料進行校驗,結果就產生了溢位。如圖所示就是發生堆溢位的彙編**,我們可以看到memcpy函式三個引數外部均可以控制導致產生了堆溢位漏洞。攻擊者可以構造特殊的資料報觸發這個漏洞,wushi提供的poc可以直接令遠端協助的對方qq崩潰。

真是個威力巨大的漏洞!本著「知其然知其所以然」的原則,漏洞處理完後我們請教wushi是如何發現的,wushi只輕描淡寫地說了乙個英文單詞——fuzz!

從wushi的思路得到啟發,騰訊安全團隊也著手研究協議fuzz。

為了迅速排查類似漏洞,我們先使用了python指令碼進行「小步快跑」式的協議fuzz。qq支援http**,我們就用乙個python寫的http**讓測試qq a通過這個**與測試qq b進行通訊,這個python**就負責按照一定規則修改經過的指定格式的資料(也就是指定模型的fuzz啦)。果然,我們又在qq 2007的遠端協助、**通話、音訊通話模組中發現了數個遠端溢位漏洞,均及時得以修復。

使用http**只是權宜之計,因為不是所有的協議都支援http**,而且有些漏洞可能存在於原始協議中,於是我們又開發了乙個基於windows的協議fuzz程式。大致思路是通過dll注入的方式hook某個程序呼叫的各個socket傳送函式,通過更改傳輸的資料進行fuzz。效果和python殊途同歸,但適用範圍要大些。

這種在原有協議上進行fuzz的好處在於可以「智慧型的」進行fuzz(smart fuzz),避免了大量的無用功。試想,如果協議不對資料報本身就被丟棄了,毫無規則的fuzz(blind fuzz)會浪費大量人力物力。當然,有些漏洞本身可能就會出現在不符合協議的資料處理中。如果時間允許,全fuzz也是有必要的。

檔案fuzz也是類似的思路。以jpg格式為例,只需要先找一些正常jpg檔案做樣本生成jpg模版,再對模版中的資料格式進行各種fuzz,生成fuzz樣本,然後用程式逐個開啟這些樣本,看是否產生異常。

類似的fuzz框架/工具也很多,如sulley、paimei、taof,都很高階上流,有興趣的同學自行百度之,在此不贅述。

web漏洞也是可以用fuzz思想來挖掘的。

比如挖掘html5新特性的xss攻擊**,最好的辦法就是fuzz。先列舉瀏覽器支援的html5的各種屬性方法,賦值之後觀察是否alert。對一些類xss filter(web mail)的漏洞挖掘也是基於這種思路。

前段時間安全寶搞了個繞過waf的活動,我也體驗了一把,用fuzz的方法發現乙個繞過方法。

我們都知道waf是先於web應用解析外部引數的,如果認為惡意就會攔截,但是waf和web應用如果對外部資料處理不一致就會存在繞過waf的情況。要想繞過waf,只需要找到waf認為不是惡意但是又能對web應用產生攻擊的特殊字串。

當時我測試時安全寶的waf時發現如果url中含有「and」、「[空格]and[空格]」、「[tab]and[tab]」等都會被過濾(攔截的特徵為http 405),只要我能找到乙個字元讓waf認為無問題,但是mysql能知道是空格就好。

怎麼辦?盲目猜是沒有意義且低效的。那麼就fuzz吧。把ascii碼1到255都窮舉一遍看看。於是乙個perl指令碼應運而生:

use lwp 5.64;

$browser = lwp::useragent->new;

for($i=0;$i<256;$i++)

sleep(1);

}sub data10to16

執行指令碼然後喝一杯咖啡,然後看結果,果然發現ascii碼11的字元(url編碼)可以繞過安全寶waf的攔截並且mysql認為是代替空格的字元。如圖。

然後利用union查詢時發現如果url出現「1,1,1,1」字樣也會被攔截,測試發現加幾個空格就可以繞過。形式如「select 1, 1, 1, 1」。

所以結合這兩個bug,構造這樣的url就可以讀取到資料庫user為seay@localhost: and1=2 unionselect1,user(), 3 ,4

看,這就是fuzz的威力。

順道提下,安全寶搞的waf繞過活動應該收到很多bug,更新了很多繞過方法,這對於乙個以安全技術為核心競爭力的產品來說實在是事半功倍

漏洞挖掘 目錄瀏覽漏洞

web中介軟體如果開啟了目錄瀏覽功能,當使用者訪問web應用時,web伺服器會將web應用的目錄結構 檔案資訊返回給客戶端,攻擊者可能利用這些敏感資訊對web應用進行攻擊,如資料庫指令碼sql檔案路徑洩露 程式備份壓縮檔案路徑洩露等。中 直接訪問web應用存在的一些目錄,如果返回檔案列表資訊,證明存...

漏洞挖掘 弱口令漏洞

應用存在預設口令或口令較簡單易被猜到。高 首先登陸進入dvwa後,修改安全等級 然後在brute force模組進行測試弱口令 使用brupsuite進行抓包 發現賬戶和密碼是使用get方式提交的,然後我們右鍵將抓到的包傳送到intruder模組進行暴力破解 進入到intruder模組後,發現有四種...

Android APP漏洞挖掘

0x00 1 元件公開安全漏洞 參考android 元件安全。2 content provider檔案資料夾遍歷漏洞 參考content provider檔案資料夾遍歷漏洞 3 androidmanifest.xml中allowbackup安全檢測 4 intent劫持風險安全檢測 參考androi...