版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
peach進(jìn)行模糊測試概述模糊測試實現(xiàn)方法實現(xiàn)流程常用fuzzpeach介紹關(guān)于peach安裝部署體系結(jié)構(gòu)使用流程命令參數(shù)Pit文件文件格式Include配置DataModel配置StateModel配置Agent配置Monitor配置Test配置Loggers配置Strategy配置示例運(yùn)行peach應(yīng)用協(xié)議模糊測試測試目的分析協(xié)議定制執(zhí)行測試測試結(jié)果他山之石測試結(jié)論peach應(yīng)用——工控協(xié)議模糊測試搭建環(huán)境配置總結(jié)參考文章概述本文對模糊測試技術(shù)進(jìn)行了綜述分析,介紹了開源模糊測試框架的結(jié)構(gòu)、原理及文件編寫方法,旨在幫助對模糊測試感興趣的小伙伴快速入門peach,最后以常見的http協(xié)議和工控協(xié)議為例進(jìn)行了實驗。文末搜集了本文所用到的工具和相關(guān)資料供大家下載。本文為Tide安全團(tuán)隊成員重劍無鋒原創(chuàng)文章,轉(zhuǎn)載請聲明出處!模糊測試概念模糊測試(fuzztesting,fuzzing)技術(shù)是安全測試技術(shù)的一種,通過構(gòu)造畸形輸入數(shù)據(jù)使得軟件發(fā)生異常如崩潰等情況,從而發(fā)現(xiàn)軟件中存安全問題。由于模糊測試技術(shù)具有可以充分遍歷所有輸入數(shù)據(jù)、代碼覆蓋全面、測試自動化、能夠有效地發(fā)現(xiàn)軟件中存在的安全問題等特點(diǎn),到信息安全中漏洞分析領(lǐng)域的研究人員的廣泛歡迎。目前,F(xiàn)uzzing技術(shù)已經(jīng)是軟件測試、漏洞挖掘領(lǐng)域的最有效的手段之一。Fuzzing技術(shù)特別適合用于發(fā)現(xiàn)漏洞,也是眾多黑客或黑帽子軟件漏洞的首選技術(shù)。Fuzzing雖然不能直接達(dá)到入侵的效果,但是Fuzzing非常容易找到軟件或系統(tǒng)的漏洞,以此為突破口深入分析,就更容找到入侵路徑,這就是黑客喜歡Fuzzing技術(shù)的原因。原理1、Fuzzing技術(shù)首先是一種自動化技術(shù),即軟件自動執(zhí)行相對隨機(jī)的測試用例。因為是依靠計算機(jī)軟件自動執(zhí)行,所以測試效率相對人來講遠(yuǎn)高出幾個數(shù)量級。比如,一個優(yōu)秀的測試人員,一天能執(zhí)行的測試用例數(shù)量最多也就是幾十個,很難達(dá)到個。而Fuzzing工具可能幾分鐘以輕松執(zhí)行上百個測試用例。2、Fuzzing技術(shù)本質(zhì)是依賴隨機(jī)函數(shù)生成隨機(jī)測試用例,隨機(jī)性意味著不重復(fù)、不可預(yù)測,可能有意想不到的輸入和結(jié)果。3、根據(jù)概率論里面的“大數(shù)定律”,只要我們重復(fù)的次數(shù)夠多、隨機(jī)性夠強(qiáng),那些概率極低的偶然事件就必然會出現(xiàn)。Fuzzing技術(shù)就是大數(shù)的典范應(yīng)用,足夠多的測試用例和隨機(jī)性,就可以讓那些隱藏的很深很難出現(xiàn)的Bug成為必然現(xiàn)象。實現(xiàn)方法Fuzzing引擎算法中,測試用例的生成方式主要有2種:1)基于變異:根據(jù)已知數(shù)據(jù)樣本通過變異的方法生成新的測試用例;2)基于生成:根據(jù)已知的協(xié)議或接口規(guī)范進(jìn)行建模,生成測試用例;一般Fuzzing工具中,都會綜合使用這兩種生成方?;谧儺惖乃惴ê诵囊笫菍W(xué)習(xí)已有的數(shù)據(jù)模型,基于已有數(shù)據(jù)及對數(shù)據(jù)的分析,再生成數(shù)據(jù)做為測試用例。實現(xiàn)流程一個基于網(wǎng)絡(luò)協(xié)議的Fuzz測試的實現(xiàn)過程如下:獲得待測協(xié)議的正常數(shù)據(jù)包用變異數(shù)據(jù)替換該數(shù)據(jù)包中的某些部分用發(fā)包?向目標(biāo)應(yīng)用發(fā)包觀察目標(biāo)應(yīng)用的反應(yīng)通常情況下,通過抓包?捕獲客戶端與被測設(shè)備正常交互的數(shù)據(jù)包作為測試的正常數(shù)據(jù)包樣本。通過任意方式改變隨機(jī)數(shù)據(jù)。例如,可以打亂個數(shù)據(jù)包,也可以把數(shù)據(jù)包中的某個部分替換。不管采用什么方法變異數(shù)據(jù),關(guān)鍵是在數(shù)據(jù)包中放入大量隨機(jī)數(shù)據(jù),然后將該數(shù)據(jù)包發(fā)送到應(yīng)用并觀察目標(biāo)應(yīng)用的行為能力。常用fuzz框架在研究網(wǎng)絡(luò)協(xié)議模糊測試時,sulley和peach兩大框架是最常見的Fuzz框架,peach相對于sulley有以下幾點(diǎn)優(yōu)勢:1、功能方面:sulley和peach完成的功能點(diǎn)都是一樣,peach可對多種協(xié)議、文件進(jìn)行模糊測試,而sulley只能對網(wǎng)絡(luò)協(xié)議進(jìn)行測試。2、開發(fā)角度:peach專注于文件的編寫,比較容易理解,但其余部分幾乎很少能改寫;sulley用代碼來寫測試,可以開發(fā)一些插件視?等,適用于深度開發(fā)。3、維護(hù)方面:sulley目前已停止維護(hù),peach相關(guān)資料和研究人員相對較多。4、安裝部署:sulley配置環(huán)境相對繁瑣,而peach配置環(huán)境相對簡單。peach介紹關(guān)于peachPeach由DejavuSecurity公司的MichaelEddington創(chuàng)造并開發(fā),是一個遵守MIT開源許可證的模糊測試框架,是第一款綜合的開源fuzzing工包含進(jìn)程監(jiān)視和創(chuàng)建fuzzer,其中創(chuàng)建fuzzer由XML語言實現(xiàn)。Peach主要開發(fā)工作已經(jīng)有7年了,主要有3個版本。最初采用Python語言編寫發(fā)布于2004年,第二版于2007年發(fā)布,Peach3發(fā)布于2013年初,第三版使用C#重寫了整個框架。Peach支持對文件格式、ActiveX、網(wǎng)絡(luò)協(xié)議、API等進(jìn)行Fuzz測試;PeachFuzz的關(guān)鍵是編寫PeachPit配置文件。安裝部署Windows下使用Peach3需要預(yù)先安裝Microsoft.NET4和windbg;Linux、OSX下需要安裝Mono包。Peach不是開源軟件,而是遵循MIT許可證的免費(fèi)軟件。和BSD許可證一樣,MIT許可證在Peach的使用和修改上沒有限制。我使用的windows綠色版,在/TideSec/Peach_Fuzzing/中peach文件夾中包含了收集到的4個版本的peach最新版軟件分別為windows版(x86)、windows版(x64)、oxs版、linux版、python版,大家可以下載使用。體系結(jié)構(gòu)模糊測試工具是一個開源的模糊測試框架,包括數(shù)據(jù)模型(數(shù)據(jù)類型、變異?接口等)、狀態(tài)模型(數(shù)據(jù)模型接口、狀態(tài)、動作—輸入輸出等)、代理?(包括本地調(diào)試?如和網(wǎng)絡(luò)監(jiān)視?如等)、測試引擎(代理?接口、狀態(tài)模型接口、發(fā)布?、日志記等)Peach有以下幾個高級概念:數(shù)據(jù)模型:用來表示輸入和輸出所需要的數(shù)據(jù)結(jié)構(gòu)??梢愿鶕?jù)需要構(gòu)造數(shù)據(jù)模型。數(shù)據(jù)模型中,用戶可以設(shè)置數(shù)據(jù)變量,可以為該數(shù)據(jù)指定數(shù)據(jù)類型如字符串類型、整數(shù)類型等,還可以設(shè)置數(shù)據(jù)變量的數(shù)值,并根據(jù)變異?的接口指定該變量是否執(zhí)行變異操作。數(shù)據(jù)模型中可以設(shè)置數(shù)據(jù)塊,一個數(shù)據(jù)塊可以包括多個數(shù)據(jù)變量。數(shù)據(jù)變量之間還可以設(shè)置關(guān)系,例如sizeof類型的關(guān)系等。變異?:包括變異策略,不同數(shù)據(jù)類型的變異策略不同。生成?:生成?能夠生成字符串?dāng)?shù)據(jù)、整型數(shù)值數(shù)據(jù)等簡單類型的數(shù)據(jù),還可以生成復(fù)雜的分層的二進(jìn)制數(shù)據(jù),還可以將簡單的數(shù)生成?串接起來生成更加復(fù)雜的數(shù)據(jù)類型的數(shù)據(jù)。狀態(tài)模型:在每一個測試用例中,根據(jù)狀態(tài)模型,Peach根據(jù)用戶配置初始化狀態(tài)機(jī),并維護(hù)該有限狀態(tài)機(jī),每個狀態(tài)包括一個或者多個作。每個狀態(tài)中,Peach狀態(tài)機(jī)會順序地執(zhí)行每個操作。用戶可以為操作設(shè)置相應(yīng)的執(zhí)行條件。當(dāng)一個狀態(tài)中所有操作執(zhí)行結(jié)束后還是維前狀態(tài),則該狀態(tài)機(jī)執(zhí)行結(jié)束。[.代理?:在Peach模糊測試過程中,Peach測試引擎與Peach代理?進(jìn)行通信,從而對被測目標(biāo)進(jìn)行狀態(tài)監(jiān)視并對其進(jìn)行執(zhí)行控制。用戶為Peach代理?設(shè)置一個Peach監(jiān)視?,從而對被測程序進(jìn)行狀態(tài)監(jiān)視,并進(jìn)行執(zhí)行控制如啟動被測程序或者停止被測目標(biāo)程序。每次測代或者測試子用例執(zhí)行完畢,Peach代理?將把Peach監(jiān)視?監(jiān)視的被測目標(biāo)程序的異常狀態(tài)信息(如崩潰)返回給Peach測試引擎,如果被目標(biāo)程序正常執(zhí)行結(jié)束,那么將返回正常結(jié)束標(biāo)志信息給Peach測試引擎。\.測試引擎:采用解析?解析用戶輸入的配置文件(一般為格式的文件),根據(jù)配置文件創(chuàng)建相應(yīng)的組件并進(jìn)行初始化如對狀態(tài)模型狀態(tài)機(jī)進(jìn)行初始化,然后測試引擎進(jìn)入執(zhí)行測試用例的主循環(huán)。測試引擎中的發(fā)布?可以對任意的生成?提供透明的接口,常見的?有文件發(fā)布?或者網(wǎng)絡(luò)發(fā)布?等,發(fā)布?是針對所生成的數(shù)據(jù)的一種傳輸形式。用戶(二次開發(fā)人員或使用人員)可以將自己的生成接到不同的輸出中。日志記錄?可以設(shè)置日志的路徑和文件名,并將測試執(zhí)行過程中的狀態(tài)信息記錄到日志文件中。使用流程Peach的測試對象幾乎包括了所有常見的Fuzz對象,例如文件結(jié)構(gòu),com,網(wǎng)絡(luò)協(xié)議、API等。使用Peach進(jìn)行fuzzing的主要步驟如下:1、創(chuàng)建模型2、選擇/配置Publisher3、配置代理/監(jiān)視?4、配置記錄命令參數(shù)-1:執(zhí)行第1次測試。-a:啟動Peach代理。不指定”channel”默認(rèn)為本地代理(默認(rèn)支持,無需顯式啟動);“channel”可以指定為”tcp”遠(yuǎn)程代理。-c:統(tǒng)計測試用例數(shù)。-t:驗證PeachPitxml文件正確性。-p:并行Fuzz。運(yùn)行Peach的機(jī)器總數(shù)為M,這是第N個。–debug:調(diào)試信息開關(guān)。–skipto:指定Fuzz跳過的測試用例數(shù)。–range:指定Fuzz的測試用例范圍Pit文件文件格式把用于數(shù)據(jù)定義的文件叫做Peachpitfile。使用時,實際上主要工作就是定義這樣一個文件指示測試平臺去做測試。pitfile基本上總是包含以下幾個部分:<?xml...<?xml...版本,編碼之類...><Peach...版本,作者介紹之類...><Include...包含的外部文件/><DataModel>原始數(shù)據(jù)結(jié)構(gòu)定義</DataModel><StateModel>測試邏輯,狀態(tài)轉(zhuǎn)換定義,如收到什么樣的數(shù)據(jù)包之后,發(fā)出什么樣對應(yīng)的數(shù)據(jù)包</StateModel><Agent>檢測exception,crash等</Agent><Test>指定將要使用到的state,agent,publisher等</Test><Run>Fuzzer執(zhí)行的進(jìn)入點(diǎn)</Run></Peach>整個文件被一個大標(biāo)簽<Peach></Peach>包括。文件中的第二級標(biāo)簽包括Include,DataModel,StateModel,Agent,Test,Run共6種。Include包含的外部文件,其中defaults.xml和PeachTypes.xml是必須的,里邊含有Peach的基本方法、類、數(shù)據(jù)類型等。DataModel用于定義數(shù)據(jù)結(jié)構(gòu),此標(biāo)簽下還可以有若干級、若干種下級標(biāo)簽。使用這些子標(biāo)簽可以比較容易的定義數(shù)據(jù)的類型,大小,各個數(shù)據(jù)塊之間的關(guān)系,以及CRC校驗和等。還可以定義多個DataModel,多個DataModel之間可以有關(guān)系也可以沒有關(guān)系。StateModel用于定義測試的邏輯,實際上相當(dāng)于一個狀態(tài)機(jī)。下級標(biāo)簽包括State,每個State中又可以包含若干個Action標(biāo)簽。State態(tài),不同的State之間可以根據(jù)一些判斷條件進(jìn)行跳轉(zhuǎn)。Action用于執(zhí)行打開文件,發(fā)送數(shù)據(jù)包之類的命令。Agent是一個主要功能是用來監(jiān)測被測目標(biāo)的反應(yīng),如crash等。Test這個標(biāo)簽域比較簡單,一般只是制定使用哪個Agent,哪個StateModel,用什么方法發(fā)數(shù)據(jù),有時還會指定使用什么方法加工(變異)數(shù)據(jù)。Run這個標(biāo)簽域也比較簡單,指定當(dāng)前這次Fuzz測試使用哪個Test。Include配置Include元素允許把其他pit文件包含到當(dāng)前pit文件的名稱空間中使用。當(dāng)引用被包含的Pit文件時,用名稱空間前綴和冒號的格式來命名。格式為:name:DataModel,如下所示:屬性:屬性:Ns必須的。名稱空間前綴。Src必須的。源碼URL,用“file:”前綴來命名文件名。DataModel配置PeachPit文件包含至少一個DataModel元素,DataModel描述的數(shù)據(jù)包括類型信息、關(guān)系信息(大小、數(shù)目、偏移)和其他讓模糊?執(zhí)行智能異的信息。DataModel是Peach根元素的子元素之一,它通過添加子元素(比如Number、Blob或者String)的方式定義了數(shù)據(jù)塊的結(jié)構(gòu)。屬性Name必須的。當(dāng)引用模型或者調(diào)試時,友好的DataModel名字是非常有用的。Ref可選的。引用一個DataModel模板。Mutable可選的,默認(rèn)為真。該元素是否可變異。Constraint可選的。確定一個表達(dá)式,它幫助Peach確定數(shù)據(jù)元素是否已被適當(dāng)?shù)南?。子元素BlockBlock、Choice、Custom、Flag、Flags、Number、Padding、String、XmlAttribute、XmlElement、Relation、Fixup、Transformer、Placeme一個名字為“”的包含一個字符串和輸出“o!”如下所示:一個DataModel可以引用其他DataModel,可以繼承帶有ref屬性的子元素。如下所示:StateModel配置重新創(chuàng)建測試一個協(xié)議所必須的基本狀態(tài)機(jī)?邏輯。它定義了怎么給目標(biāo)發(fā)送和接收數(shù)據(jù)。的范圍從非常簡單到及其雜。建議在開始時,保持狀態(tài)模型簡單,需要時再進(jìn)行擴(kuò)展。StateModel包含一個子元素state,state封裝了一個為Peach工作的邏輯單元,進(jìn)而來執(zhí)行一個大的狀態(tài)模型。state由action組成,每個actio以執(zhí)行與單個狀態(tài)如何封裝邏輯相關(guān)的任務(wù)。元素能在中執(zhí)行多種操作。是發(fā)送命令給的一種主要方式,它能發(fā)送輸出,接收輸入或打開一個連接。也能在StateModel中改為其他狀態(tài),在DataModel之間移動數(shù)據(jù),調(diào)用被代理定義的方法。Agent配置代理是特殊的進(jìn)程,它可以在本地或者遠(yuǎn)程運(yùn)行。這些進(jìn)程擁有一個或者多個監(jiān)視?,這些監(jiān)視?可以執(zhí)行加載調(diào)試?,查看內(nèi)存消耗者探測錯誤等操作。代理中的監(jiān)視?可以收集信息和代表執(zhí)行操作。常用的代理有:本地代理、TCP遠(yuǎn)程代理、ZeroMQ、RESTJson代理,其中前兩種使用頻率更高。本地代理Peach運(yùn)行時支持一個運(yùn)行在進(jìn)程中的本地代理。如果不指定的話,這是一個默認(rèn)的代理類型。配置一個本地代理如下:TCP遠(yuǎn)程代理這個代理存活在本地或遠(yuǎn)程機(jī)?的一個單獨(dú)的進(jìn)程中,通過遠(yuǎn)程完成連接,是一種被本地運(yùn)行時支持的形式。為了使用遠(yuǎn)程代理,代進(jìn)程必須首先運(yùn)行起來。代理配置在遠(yuǎn)程主機(jī)上運(yùn)行peach.exe-atcpMonitor配置監(jiān)視?、監(jiān)視?、Linux監(jiān)視?和跨平臺監(jiān)視?,每個平臺的監(jiān)視?都分很多種。其中監(jiān)視?包括:WindowsDebugger、cleanup、pageheap監(jiān)視?、監(jiān)視?、windowsService監(jiān)視?等OSX監(jiān)視?包括:CrashWrangler監(jiān)視?、CrashReporterMonitorLinux監(jiān)視?包括:LinuxCrash跨平臺監(jiān)視?包括:canakitrelay監(jiān)視?、CleanupFolder監(jiān)視?、IpPower9258監(jiān)視?、內(nèi)存監(jiān)視?、Pcap監(jiān)視?、Ping監(jiān)視?、進(jìn)程監(jiān)視?、Processkiller監(jiān)視?、保存文件監(jiān)視?、socket監(jiān)視?、ssh監(jiān)視?、ssh下載?監(jiān)視?、vmware監(jiān)視?等。官方文檔如下:以幾個常見的為例進(jìn)行參考。WindowsDebuggerMonitor監(jiān)視?控制了一個調(diào)試句柄。主要有以下用途:進(jìn)程調(diào)試、服務(wù)調(diào)試、內(nèi)核調(diào)試。必須參數(shù)必須參數(shù):Commandline用逗號分隔的窗口名字。Processname當(dāng)找到一個窗口的時候,觸發(fā)錯誤,默認(rèn)為假。Kernelconnectionstring內(nèi)核調(diào)試的連接字符串。Service要掛載的windows服務(wù)名稱。如果停止或者崩潰,服務(wù)將會被啟動??蛇x參數(shù)SymbolspathSymbolspath符號表路徑或者服務(wù)。默認(rèn)為:“SRV*/download/symbols”Windbgpathwindbg的安裝路徑。盡量在本地。Noncrystalline直到從狀態(tài)模型的匹配調(diào)用完成時,debugger才會被掛載。Ignorefirstchanceguard忽略第一個機(jī)會機(jī)會保護(hù)頁面錯誤。這些有時是假陽性或反調(diào)試錯誤。默認(rèn)為假。Ignoresecondchanceguard忽略第二個機(jī)會保護(hù)頁面錯誤。這些有時是假陽性或反調(diào)試錯誤。默認(rèn)為假。Nocpukill不要使用進(jìn)程CPU使用率提前終止。默認(rèn)為假。Faultonearlyexit如果進(jìn)程存在,觸發(fā)錯誤。默認(rèn)為假。Waitforexitoncall--如果時間間隔到了,-等待狀態(tài)模型調(diào)用的進(jìn)程退出和參數(shù)故障。Waitforexittimeout等待退出,timeout值單位為微秒。(-1位無窮大)默認(rèn)位10000。Restaroneachtest為每次迭代重啟進(jìn)程。默認(rèn)為假。其他參數(shù)示例CrashWrangler監(jiān)視?監(jiān)視?將啟動一個進(jìn)程和監(jiān)視?感興趣的崩潰。這個監(jiān)視?采用蘋果系統(tǒng)自帶的工具,這個工具能從開發(fā)者網(wǎng)站載。為了該工具能夠正常運(yùn)行,它必須在每個機(jī)?上進(jìn)行編譯。參數(shù):Command要執(zhí)行的命令。Arguments命令行參數(shù),可選,默認(rèn)沒有。StartOnCall狀態(tài)模型調(diào)用的啟動命令??蛇x,默認(rèn)沒有。UseDebugMalloc使用OSXDebugMalloc(比較慢),可選默認(rèn)為假。ExecHandlerCrashWrangler執(zhí)行處理程序,可選,默認(rèn)為exc_handler。ExploitableReads讀a/v被認(rèn)為是可利用的?可選,默認(rèn)為假。NoCpuKill通過CPU使用禁用進(jìn)程殺死??蛇x,默認(rèn)為假。CwLogFileCrashWrangler記錄文件。可選,默認(rèn)為cw.log。CwLockFileCrashWrangler鎖文件,可選,默認(rèn)為cw.lock。CwPidFileCrashWranglerPID文件,可選,默認(rèn)為cw.pid。LinuxCrash監(jiān)視?監(jiān)視?用一個腳本來捕捉錯誤進(jìn)程,該腳本被內(nèi)置在內(nèi)核中。參數(shù):Executable目標(biāo)可執(zhí)行程序,被用于過濾崩潰,可選的,默認(rèn)為所有。LogFolder記錄文件的文件夾??蛇x默認(rèn)為“/var/peachcrash”。Monomono執(zhí)行=程序所需的運(yùn)行時的全路徑??蛇x,默認(rèn)為“/usr/bin/mono”Test配置指定使用哪個Agent、StateModel,Publisher用什么方法發(fā)送數(shù)據(jù),使用什么方法變異數(shù)據(jù),日志文件路徑等??梢杂卸鄠€Test,使用時通過peach命令行指定要運(yùn)行的Test名稱,未指定默認(rèn)運(yùn)行名稱為”Default”的Test。如下圖:屬性:Name必備的,test元素的名字,默認(rèn)為“Default”。Waittime每次測試之間的等待時間,默認(rèn)為0。Faultwaittime在開始下一次迭代時等待錯誤的時間,默認(rèn)為0。controlIneration我們只需控制迭代的頻率,默認(rèn)為0。有效子元素:Agent(可選)StateModel(必須)Publisher(必須)Include(可選)Exclude(可選)Strategy(可選)Logger(可選,推薦)示例:Loggers配置Peach有一個可擴(kuò)展的記錄系統(tǒng),它允許使用者存儲他們想要的記錄。默認(rèn)情況下,Peach使用一個單獨(dú)的文件系統(tǒng)記錄?。Strategy配置Strategy(變異策略)包括:Random:默認(rèn)會隨機(jī)選擇最大6個元素(可以通過參數(shù)MaxFieldsToMutate設(shè)置)利用隨機(jī)mutator(變異?)進(jìn)行變異。Sequential:Peach會順序?qū)γ總€元素使用其所有可用的Mutators進(jìn)行變異。RandomDeterministic:Peach默認(rèn)規(guī)則。這個規(guī)則對pitxml文件中元素根據(jù)Mutators生成的Iterations鏈表做相對隨機(jī)(由鏈表中元素數(shù)目決定)的順序混淆,所以每個xml文件每次運(yùn)行生成的測試用例多少、順序固定,這樣才能保證skipto的準(zhǔn)確性。Peach3包括元素增、刪、改、交換,經(jīng)驗值,逐位、雙字等Mutators,示例運(yùn)行根據(jù)上述pit參數(shù),做了個HelloTide的示例,了解pit文件基本的參數(shù)配置及結(jié)構(gòu)。/TideSec/Peach_Fuzzing/blob/master/pit-xml-samples/HelloTide.xmlHelloTide的pit文件已上傳github:/TideSec/Peach_Fuzzing/blob/master/pit-xml-samples/HelloTide.xml<?xmlversion="1.0"encoding="utf-8"?><Peachxmlns="/2012/Peach"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/2012/Peach../peach.xsd"><DataModelname="TheDataModel"><Stringvalue="HelloTide!"/></DataModel><StateModelname="State"initialState="State1"><Statename="State1"><Actiontype="output"><DataModelref="TheDataModel"/></Action></State></StateModel><Testname="Default"><StateModelref="State"/><Publisherclass="Console"/><Loggerclass="File"><Paramname="Path"value="log.txt"/></Logger></Test></Peach>在中運(yùn)行 ,運(yùn)行后會以這個原始的字符串為模板變異出許多畸形的數(shù)據(jù)出來,包括了超長串peach.exesamples\HelloTide.xmlNULL結(jié)束符缺失的非法串、格式化串等有可能引起程序出錯的串,然后依次打印出來。peach.exesamples\HelloTide.xmlLog日志記錄如下peach應(yīng)用——HTTP協(xié)議模糊測試有些peach教程都是對圖片或者音視頻文件進(jìn)行fuzz,作為web狗只是對HTTP協(xié)議比較熟,所以嘗試對http進(jìn)行peach模糊測試。測試目的本測試主要是測試HTTP協(xié)議的健壯性,通過定制Peachpitfile,查看是否可以通過對http協(xié)議進(jìn)行模糊測試導(dǎo)致http服務(wù)不響應(yīng)或其他異常象。選擇的目標(biāo)是之前寫的一個掃描?登錄界面/TideSec/WDScanner,使用phpstudy搭建。因為主要是測試http協(xié)議,所以意web應(yīng)用都可以。分析協(xié)議既然要進(jìn)項協(xié)議fuzz,那么首先應(yīng)該搞清楚和服務(wù)?之間的通信協(xié)議是怎么樣的。隨意下載一個可以在應(yīng)用層進(jìn)行抓包的軟件就可以滿足我們需求,在此我用的是。抓取登錄數(shù)據(jù)包:http請求包httpfuzz.xml定制pit文件httpfuzz.xml針對Http協(xié)議,完善pit文件/TideSec/Peach_Fuzzing/blob/master/pit-xml-samples/httpfuzz.xmlhttpfuzz的pit文件已上傳github:/TideSec/Peach_Fuzzing/blob/master/pit-xml-samples/httpfuzz.xml<?xmlversion="1.0"encoding="utf-8"?><Peachxmlns="/2012/Peach"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/2012/Peach../peach.xsd"><DataModelname="DataLogin"><Stringvalue="GET/index.php?m=login"mutable="false"token="true"/><Stringvalue="HTTP/1.1"/> <!--不加mutable="false"說明要對該數(shù)值進(jìn)行fuzz--><Stringvalue="\r\n"/><Stringvalue="Content-Type:"mutable="false"token="true"/><Stringvalue="application/x-www-form-urlencoded"mutable="false"token="true"/><Stringvalue="\r\n"mutable="false"token="true"/><Stringvalue="Accept-Encoding:"mutable="false"token="true"/><Stringvalue="gzip,deflate"mutable="false"token="true"/><Stringvalue="\r\n"mutable="false"token="true"/><Stringvalue="Accept:"mutable="false"token="true"/><Stringvalue="text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3"mutable="false"token="true"/><Stringvalue="\r\n"mutable="false"token="true"/><Stringvalue="User-Agent:"mutable="false"token="true"/><Stringvalue="Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.100Safari/537.36"mutable="false"token="true"/><Stringvalue="\r\n"mutable="false"token="true"/><Stringvalue="Host:"mutable="false"token="true"/><Stringvalue="\r\n"mutable="false"token="true"/><Stringvalue="Conection:"mutable="false"token="true"/><Stringvalue="Keep-Alive"mutable="false"token="true"/><Stringvalue="\r\n"mutable="false"token="true"/></DataModel><StateModelname="StateLogin"initialState="Initial"><Statename="Initial"><Actiontype="output"><DataModelref="DataLogin"/></Action></State></StateModel><Testname="Default"><StateModelref="StateLogin"/><Publisherclass="TcpClient"><Paramname="Host"value=""/><Paramname="Port"value="80"/></Publisher><Loggerclass="File"><Paramname="Path"value="C:\peach\logs"/></Logger><Strategyclass="Sequential"/></Test></Peach>HTTP/1.1\r\n在該文件中,針對數(shù)值 和 進(jìn)行模糊測試,模糊策略為Sequential。HTTP/1.1\r\n執(zhí)行測試在cmd中執(zhí)行peach.exesamples\httpfuzz.xml測試結(jié)果在wireshark中可看到發(fā)送的數(shù)據(jù)包,peach自動對HTTP/1.1和\r\n生成了大量fuzz數(shù)據(jù)。在使用過程中,也可對peach加參數(shù)-debug進(jìn)行調(diào)試模式,可直接看到發(fā)送的數(shù)據(jù)包。/TideSec/Peach_Fuzzing/blob/master/pit-xml-samples/httpfuzz1.xml他山之石/TideSec/Peach_Fuzzing/blob/master/pit-xml-samples/httpfuzz1.xml在查閱各種資料中,發(fā)現(xiàn)我上面的寫法比較簡單粗暴,在網(wǎng)上找到一個實現(xiàn)比較優(yōu)雅的httpfuzz的Pit文件。httpfuzz1的pit文件已上傳github:<?xmlversion="1.0"encoding="utf-8"?><Peachxmlns="/2012/Peach"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/2012/Peach/peach/peach.xsd"><DataModelname="Headermodel"><Stringname="Header"/><Stringvalue=":"/><Stringname="Value"/><Stringvalue="\r\n"/></DataModel><DataModelname="HttpRequest"><Blockname="RequestLine"><Stringname="Method"/><Stringvalue=""/><Stringname="RequestUri"/><Stringvalue=""/><Stringname="HttpVersion"/><Stringvalue="\r\n"/></Block><Blockname="HeaderHost"ref="Headermodel"><Stringname="Header"value="Host"/></Block><Blockname="HeaderContentLength"ref="Headermodel"><Stringname="Header"value="Content-Length"/><Stringname="Value"><Relationtype="size"of="httpBody.content"/></String></Block></Block><Blockname="httpBody"><Stringname="content"value="lengthis12"/></Block></DataModel><Dataname="HttpGet"><Fieldname="RequestLine.Method"value="GET"/><Fieldname="RequestLine.RequestUri"value=""/><Fieldname="RequestLine.HttpVersion"value="HTTP/1.1"/><Fieldname="HeaderHost.Value"value=""/><Fieldname="httpBody.content"value="\r\nfuzz"/></Data><Dataname="HttpOptions"ref="HttpGet"><Fieldname="RequestLine.Method"value="OPTIONS"/><Fieldname="RequestLine.RequestUri"value="*"/><Fieldname="HeaderHost.Value"value=""/></Data><StateModelname="State1"initialState="Initial"><Statename="Initial"><Actiontype="output"><DataModelref="HttpRequest"/><Dataref="HttpGet"/></Action></State></StateModel><StateModelname="State2"initialState="Initial"><Statename="Initial"><Actiontype="output"><DataModelref="HttpRequest"/><Dataref="HttpOptions"/></Action></State></StateModel><Testname="Default"><StateModelref="State1"/><Publisherclass="TcpClient"><Paramname="Host"value=""/><Paramname="Port"value="80"/></Publisher><Loggerclass="File"><Paramname="Path"value="C:\peach\logs"/></Logger></Test></Peach>效果和上面類似,數(shù)據(jù)畸變更明顯,大家可以自己體驗一下。測試結(jié)論可惜的是運(yùn)行了很大一會,并沒發(fā)現(xiàn)什么畸形數(shù)據(jù)能導(dǎo)致http服務(wù)宕掉,返回的數(shù)據(jù)包基本也都是400錯誤。peach應(yīng)用——工控協(xié)議模糊測試對modbus協(xié)議的模糊測試參考了2019年10月世界信息安全大會中燈塔實驗室的幾位工控大佬的授課內(nèi)容,在此表示由衷感謝!我們Tide安全團(tuán)隊的另外一個小伙伴也寫了篇關(guān)于工控模糊測試的文章,也可以參考/s/h9JWw1lZpfCmlQYZbBJIY工控協(xié)議里modbus算是最為常見的了,關(guān)于modbus協(xié)議相關(guān)的資料以及比較多了,就不重復(fù)介紹了,不太熟悉的可以參考/luomingui/archive/2013/06/14/Modbus.html。在對modbus協(xié)議有了一定認(rèn)識之后,我們開始對modbus協(xié)議進(jìn)行fuzz測試。搭建環(huán)境理論上來講,應(yīng)該使用真實的工控設(shè)備來進(jìn)行實驗,因為仿真軟件對這種畸形的協(xié)議是不會處理的,而真實的設(shè)備可能會因為無法應(yīng)請求而導(dǎo)致設(shè)備宕掉。但因為比較窮,手頭沒有設(shè)備,所以還是只能用仿真?了。modbus仿真軟件+采集軟件下載:/TideSec/Peach_Fuzzing在一臺虛擬機(jī)上打開modbus仿真軟件,模擬modbus服務(wù)(相關(guān)軟件在文末提供下載)在自己電腦上打開采集?分析數(shù)據(jù)在采集?連接到仿真?時,使用wireshark可抓取到modbus協(xié)議數(shù)據(jù)在任一modbus協(xié)議數(shù)據(jù)包上點(diǎn)右鍵,復(fù)制hex流190000000006010100000064導(dǎo)出的數(shù)據(jù)為 ,這也是協(xié)議的報文格式。190000000006010100000064/TideSec/Peach_Fuzzing/blob/master/pit-xml-samples/modbus.xml配置pit/TideSec/Peach_Fuzzing/blob/master/pit-xml-samples/modbus.xmlmodbusfuzz的pit文件已上傳github:<?<?xmlversion="1.0"encoding="utf-8"?><Peachxmlns="/2012/Peach"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/2012/Peach../peach.xsd"><DataModelname="send_data"><Blockname="mod"><Numbername="01"size="16"value="1900"valueType="hex"signed="false"mutable="false"/><Numbername="02"size="16"value="0000"valueType="hex"
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 杭州市人力資源社保局勞動合同
- 天津市貫徹勞動合同法若干問題實施細(xì)則
- 《場景演練案例集》課件
- 2025年淄博道路運(yùn)輸從業(yè)資格證考試模擬試題
- 2025年迪慶道路運(yùn)輸從業(yè)人員資格考試內(nèi)容有哪些
- 2025年贛州貨運(yùn)上崗證考試題庫
- 2025年貨運(yùn)從業(yè)資格題庫軟件下載
- 礦山開采灰工施工合同
- 實習(xí)律師的領(lǐng)導(dǎo)力培養(yǎng)
- 企業(yè)合同印章管理規(guī)范
- 中醫(yī)思維在臨床中的應(yīng)用護(hù)理課件
- 生產(chǎn)與運(yùn)作管理第三版課后習(xí)題含答案版
- 高頻考點(diǎn)之評價與文本互證考題專練-2024年高考語文二輪復(fù)習(xí)三點(diǎn)突破講解專練
- 年會拜年祝福視頻腳本
- 蘇教版五年級數(shù)學(xué)上冊期末復(fù)習(xí)課件
- 上海交通大學(xué)2003年481物理化學(xué)考研真題
- 公司財務(wù)預(yù)算報告
- 金橋焊材產(chǎn)品質(zhì)量證明書-可-編-輯
- 國家一等獎《紀(jì)念劉和珍君》教學(xué)設(shè)計
- 2023年醫(yī)療機(jī)構(gòu)消毒技術(shù)規(guī)范
- 小學(xué)生主題班會 憶偉人故事展少年風(fēng)采-紀(jì)念偉大領(lǐng)袖毛主席誕辰130周年 課件(共33張PPT內(nèi)嵌視頻)
評論
0/150
提交評論