<progress id="jnld5"><th id="jnld5"></th></progress>

        <pre id="jnld5"></pre>

        <strike id="jnld5"><noframes id="jnld5"><pre id="jnld5"></pre>
        <strike id="jnld5"></strike>

        <strike id="jnld5"><span id="jnld5"><pre id="jnld5"></pre></span></strike>

        <font id="jnld5"><track id="jnld5"></track></font>

        模糊測試之實例講解

        發表于:2019-12-30來源:未知作者:天天點擊數: 標簽:模糊測試
        模糊測試(Fuzzing),是一種通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。測試的基本思想就是通過向程序中輸入大量的隨機數據,然后觀察輸入這些數據之

        什么是模糊測試

        模糊測試(Fuzzing),是一種通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。測試的基本思想就是通過向程序中輸入大量的隨機數據,然后觀察輸入這些數據之后程序的情況,記錄下使程序發生異常的數據,從而判斷程序是在那些地方發生了異常。

        模糊測試的實現是一個非常簡單的過程:

        1. 準備一份插入程序中的正確的文件。

        2. 用隨機數據替換該文件的某些部分。

        3. 用程序打開文件。

        4. 觀察破壞了什么。

        Peachfuzzer

        Peachfuzzer 是一款先進的且可擴展的安全測試平臺,這款軟件適用于軟件測試人員企業的安全保證團隊,以及測試實驗室用來自動的發現軟件的脆弱性和軟件的突變的應對方法。

         

        Peachfuzzer is an advanced and extensible security testing platform. This software enables software testers, enterprise quality assurance teams, and testing labs to find vulnerabilities in software using automated generative and mutational methods.

        Peach-pit

        Peach所使用的Peach Pit文件包含了以下5個模塊:

        GeneralConf

        DataModel

        StateModel

        Agents and Monitors

        Test and Run Configuration

        下面分別介紹這5個模塊的定義方法,并完成一個簡單的HelloWorld程序。

        題外話:在這之前,我們需要準備一個好用的XML文件編輯器,Visual Studio,Open XML Editor或者Notepad++都是不錯的選擇。這里我使用的是Notepad++,它集成了數十種語言的語法著色方案,并且,它安裝完后只有10MB左右。

        首先,我們先搭好一個XML框架,下面要寫的所有元素都要被包含在根元素<Peach>里。

        <?xml version="1.0" encoding="utf-8"?>[/align] <Peach xmlns=http://phed.org/2008/Peach
        xmlns:xsi="http://www.w3.org/ 2001/ XMLSchema-instance"
        xsi:schemaLocation=http://phed.org/2008/Peach ../peach.xsd >
        <!-- add elements here -->
        [align=left]</Peach>

        其中,Peach元素的各個屬性基本是固定的,不要輕易改動。

        (1)GeneralConf

        GeneralConf是Peach Pit文件的第一部分,用來定義基本配置信息。具體來說,包括以下三種元素。

        Include:要包含的其他Peach Pit文件。

        Import:要導入的python庫。

        PythonPath:要添加的python庫的路徑。

        要注意的是,所有的Peach Pit文件都要包含default.xml這個文件。

        在HelloWorld中,GerneralConf部分只需寫入如下內容。

        <Include ns="default" src="file:defaults.xml" />

        (2)DataModel

        DataModel元素用來定義數據模型,包括數據結構和數據關系等。一個Peach Pit文件中需要包含一個或者多個數據模型。DataModel可以定義的幾種常用的數據類型如下。

        String:字符串型。

        Number:數據型。

        Blob:無具體數據類型。

        Block:用于對數據進行分組。

        比如:

        <DataModel name="HelloData">[/align] <String name="ID" size="32" value="RIFF" isStatic="true" />
        <Block name="TypeAndData">
        <Number name="Type" size="16"/>
        <Blob name="Data"/>
        </Block>
        </DataModel>

         

        要注意的是,size的單位是bit。上面的例子中,”ID”的”size”為32,表示”ID”的長度為4字節(1 byte = 8 bits),剛好它的值”RIFF”也是4個字節。

        在HelloWorld程序中,僅定義一個值為”Hello World!”的String類型數據。

        <DataModel name="HelloWorldTemplate">[/align] <String value="Hello World!" />
        </DataModel>

        (3)StateModel

        StateModel元素用于描述如何向目標程序發送/接收數據。StateModel由至少一個State組成,并且用initialState指定第一個State;每個State由至少一個Action組成,Action用于定義StateModel中的各種動作,動作類型由type來指定。Action支持的動作類型包括start、stop、open、close、input、output、call等。下面是一個例子:

        <Action type="input">[/align] <DataModel ref="InputModel" />
        </Action>

        <Action type="output">
        <DataModel ref="SomeDataModel" />
        <Data name=”sample” filename=”sample.bin”/>
        </Action>

        <Action type="call" method="DoStuff">
        <Param name="param1" type="in">
        <DataModel ref="Param1DataModel" />
        </Param>
        </Action>

        <Action type="close" />

        上例中,第一個Action描述了一個輸入型動作,表示按照數據模型InputModel產生數據并作為輸入數據;第二個Action描述了一個輸出型動作,表示按照數據模型SomeDataMode產生數據并輸出到文件sample.bin中;第三個Action描述了一個調用動作,表示調用函數DoStuff,并且將按照數據模型Param1DataModel產生的數據作為函數DoStuff的參數;第四個Action描述了一個關閉程序的動作。

        當代碼中存在多個Action時,則從上至下依次執行。

        在HelloWorld程序中,我們只需要接收數據模型”HelloWorldTemplate“中的數據,所以寫出如下的StateModel。

        <StateModel name="State" initialState="State1" >[/align] <State name="State1" >
        <Action type="output" >
        <DataModel ref="HelloWorldTemplate"/>
        </Action>
        </State>
        </StateModel>

        (4)Agent

        Agent元素用于定義代理和監視器,可以用來調用WinDbg等調試器來監控程序運行的錯誤信息等。一個Peach Pit文件可以定義多個Agent,每個Agent下可以定義多個Monitor。下面是一個例子:

        <Agent name="LocalAgent" location="http://127.0.0.1:9000">[/align] <Monitor class="debugger.WindowsDebugEngine">
        <Param name="CommandLine" value="notepad.exe fileName" />
        </Monitor>
        <Monitor class="process.PageHeap">
        <Param name="Executable" value="notepad.exe" />
        </Monitor>
        </Agent>

        上例中,第一個Monitor類型為debugger.WindowsDebugEngine,是調用WinDbg來執行下面的”notepad.exe filename”命令的。第二個Monitor類型為process.PageHeap,意思是為notepad.exe開啟頁堆調試(Page Heap Debug),這在大多數Windows Fuzzing中都是很有用的。

        在HelloWorld程序中,我們不需要啟用WinDbg調試,所以無需配置Agent。

        (5)Test and Run configuration

        在Peach Pit文件中,Test and Run configuration 包括 Test 和 Run 兩個元素。

        Test元素用來定義一個測試的配置,包括一個StateModel和一個Publisher,以及includeing/excluding、Agent信息等。其中StateModel和Publisher是必須定義的,其他是可選定義的。下面是一個Test配置的例子。

        <Test name="TheTest">[/align] <Exclude xpath="//Reserved" />
        <Agent ref="LocalAgent" />
        <StateModel ref="TheState" />
        <Publisher class="file.FileWriter">
        <Param name="fileName" value="FuzzedFile"/>
        </Publisher>
        </Test>

        先對Publisher做一下介紹。Publisher用來定義Peach的IO連接,可以構造網絡數據流(如TCP,UDP,HTTP)和文件流(如FileWriter,FileReader)等。上例中的Publisher定義表示將生成的畸形數據寫到FuzzedFile文件中。

        在HelloWorld程序中,需要做的僅僅是把生成的畸形數據顯示到命令行,所以Publisher用的是標準輸出stdout.Stdout。

        <Test name="HelloWorldTest"> [/align] <StateModel ref="State"/>
        <Publisher class="stdout.Stdout" />
        </Test>

        現在到了最后一步,Run的配置。Run元素用來定義要運行哪些測試,包含一個或多個Test,另外還可以通過Logger元素配置日志來捕獲運行結果。當然,Logger也是可選的。

        <Run name="DefaultRun">[/align] <Test ref="TheTest" />
        <Logger class="logger.Filesystem">
        <Param name="path" value="c:\peach\logtest" />
        </Logger>
        </Run>

        上例表示程序運行”TheTest”這個測試,并且把運行日志記錄到C:\peach\logtest目錄下。

        在HelloWorld程序中,只需要在Run配置中放入之前定義好的HelloWorldTest就可以了。

        <Run name="DefaultRun">[/align] <Test ref="HelloWorldTest" />
        </Run>

        示例測試過程

        下面我們就最簡單的測試程序為例,來講解一下用peach進行模糊測試的基本過程。

        我們所用的peach-pit文件是helloworld.xml文件,它在打印輸出helloworld字符串之后會自動的生成很多的變種字符串,包括超長串和null缺失的非法串等,幾乎只要是可以造成程序出錯的串都會涉及到。

        以下是完整的代碼:

        <?xml version="1.0" encoding="UTF-8"?>
        <Peachxmlns="http://phed.org/2008/peach"xmlns:xsi= "http://www.w3.org/2001/XMLschema-instance" xsi:schemalocation="http://phed.org/2008/peach ../peach.xsd" version="1.0"
        author="Michael Eddington" description="Hello World Example" />
        <Include ns="default"src="file:defaults.xml" />
        <DateModel name="HelloWorldTemplate">
        <String value="hello world!" />
        </DateModel>
        <StateModel name="State" initialState="State1">
        <State name="State1">
        <Action type="output">
        <DateModl ref="HelloWorldTemplate" />
        </Action>
        </State>
        </StateModel>
        <Test name="HelloWorldTest">
        <StateModel ref="State"/>
        <Publisher class="stdout.Stdout"/>
        </Test>
        <Run name="DefaultRun" description="Stdout HelloWorld Run">
        <Test ref="HelloWorldTest"/>
        </Run>
        </peach>

        然后運行以上pit文件。

         

        原文轉自:http://www.uml.org.cn/Test/201910303.asp

        欧美日韩亚洲中文字幕|欧美变态另类z0z0禽交|久久国产精品-国产精|久久激情四射婷婷五月天

        <progress id="jnld5"><th id="jnld5"></th></progress>

              <pre id="jnld5"></pre>

              <strike id="jnld5"><noframes id="jnld5"><pre id="jnld5"></pre>
              <strike id="jnld5"></strike>

              <strike id="jnld5"><span id="jnld5"><pre id="jnld5"></pre></span></strike>

              <font id="jnld5"><track id="jnld5"></track></font>