安全-peach測試

開源Fuzz框架负拟。

簡介

Michael Eddington等人開發(fā)的Peach是一個遵守MIT開源許可證的模糊測試框架秋麸,最初采用Python語言編寫袖外,發(fā)布于2004年循头,第二版于2007年發(fā)布唠摹,最新的第三版使用C#重寫了整個框架爆捞。

Peach支持對文件格式、ActiveX勾拉、網(wǎng)絡(luò)協(xié)議煮甥、API等進行Fuzz測試;Peach Fuzz的關(guān)鍵是編寫Peach Pit配置文件藕赞。

Windows下使用Peach3需要預(yù)先安裝.net 4和windbg成肘;Linux、OS X下需要安裝Mono .net開發(fā)框架斧蜕。

peach中最重要一部分就是peach Pit配置文件双霍。Peach Pit文件包含以下內(nèi)容:

1、General Configuration(通用配置)
2批销、Data Modeling(數(shù)據(jù)模型)
3洒闸、State Modeling(狀態(tài)模型)
4、Agents and Monitors(代理和監(jiān)視)    
5均芽、Test Configuration(測試配置)

具體文件結(jié)構(gòu)如下:

<?xml 版本丘逸,編碼之類?>
<Peach 創(chuàng)建時間,地址骡技,作者等等>
<Include 包含外部文件 />
<DataModel> 類型信息鸣个,關(guān)系(大小,計數(shù)布朦,偏移)囤萤、可嵌套等<\DataMode>
<StateModel>測試邏輯,狀態(tài)轉(zhuǎn)換</StateModel>
<Agent>監(jiān)視被測目標的情況是趴,崩潰信息等</Agent>
<Test>指定使用哪個StateModel涛舍,Agent,Publisher唆途、Strategy富雅、Logger等</Test>
</Peach>

一、 數(shù)據(jù)模型(data modeling)

1.1 Data Model

(1)屬性:

  • Name---必須的肛搬。當(dāng)引用模型或者調(diào)試時没佑,友好的DataModel名字是非常有用的。
  • Ref---可選的温赔。引用一個DataModel模板蛤奢。
  • Mutable---可選的,默認為真。該元素是否可變異啤贩。
  • Constraint---可選的待秃。確定一個表達式,它幫助Peach確定數(shù)據(jù)元素是否已被適當(dāng)?shù)南摹?/li>

(2)子元素:

  • Block痹屹、
  • Choice章郁、
  • Custom、
  • Flag志衍、
  • Flags暖庄、
  • Number、
  • Padding足画、
  • String雄驹、
  • XmlAttribute、
  • XmlElement淹辞、
  • Relation、
  • Fixup俘侠、
  • Transformer象缀、
  • Placement

(3)例子:

DataModel例子
DataModel例子
引用沖突例子
引用沖突例子

當(dāng)一個DataModel被解析時,自定義DataModel看起來像是兩個數(shù)據(jù)模型的組合爷速,如下所示:

沖突時真實解析格式
沖突時真實解析格式

一個Peach文件中可以指定任意多個DataModel元素央星,但每個DataModel的名字必須唯一。通過DataModel可以將復(fù)雜的格式按照邏輯分解為更小的模型惫东,使數(shù)據(jù)模型更易閱讀莉给、調(diào)試和重用。一個名字為“HelloWorld”的DataModel包含一個字符串和輸出“Hello World廉沮!”如下所示:

1.2颓遏、 Blob

Blob元素是DataModel或Block的一個子元素。Blob元素常常用于代表缺少類型定義或格式的數(shù)據(jù)滞时。如下所示:

(1)屬性(除非聲明叁幢,所有的屬性都是可選的):

  • Name---必須的。Blob的名字坪稽。
  • Value---含有Blob的默認值曼玩。
  • Length---Blob的大小,單位為字節(jié)窒百。
  • Ref---引用一個數(shù)據(jù)模型來作為Blob的模板黍判。
  • valueType---默認格式的值,hex篙梢,string顷帖,或者literal,默認為string。
  • minOccurs---該Blob元素必須發(fā)生變化的最小次數(shù)窟她,默認為1陈症。
  • maxOccurs---該Blob元素能夠發(fā)生變化的最大次數(shù),默認為1震糖。
  • Token---當(dāng)解析時該元素應(yīng)該作為一個令牌來信任录肯,默認是假。
  • lengthType---長度的類型吊说,指定長度论咏。
  • Constraint---一個約束的形式表達,用于數(shù)據(jù)破解颁井。
  • Mutable---Blob元素是否可變異(是否能被fuzzing)厅贪,默認為真。

(2)子元素:

  • Anayzers

(3)例子:

一個簡單的Blob雅宾。這個Blob中养涮,任何類型或長度的數(shù)據(jù)能破解。


任意長度的數(shù)據(jù)
任意長度的數(shù)據(jù)

1.3眉抬、 Block

與DataModel 類似
Block是DataModel或Block元素的子元素贯吓。Block用于在一個邏輯結(jié)構(gòu)中將一個或者多個數(shù)據(jù)元素(Number或String)組織在一起,它和Datamodel非常相似蜀变,僅有的差異是它們的位置悄谐。DataModel是個頂層元素,Block是DataModel的一個子元素库北,它們都可以作為其他Block或DataModel的模板爬舰。

(1)屬性(除非聲明,所有的屬性都是可選的):

  • Name---Block的名字寒瓦。
  • Ref---引用一個數(shù)據(jù)模型來作為Block的模板情屹。。
  • minOccurs---該Block必須發(fā)生變化的最小次數(shù)孵构。
  • maxOccurs--該Block可以發(fā)生變化的最大次數(shù)屁商。
  • Mutable---元素是否可變異,默認為真颈墅。

(2)子元素:

Blob蜡镶、 block、 Choice恤筛、 Custom官还、 Fixup、 Flag毒坛、 Flags望伦、 Number林说、 Padding、Placement屯伞、 Relation腿箩、Seek、 String劣摇、 Transformer珠移、 XmlAttribute、 XmlElement末融。

(3)例子:

嵌套的Block钧惧。Block可以根據(jù)需要多層的嵌套,它可以幫助創(chuàng)建邏輯結(jié)構(gòu)而不改變數(shù)據(jù)包含的內(nèi)容勾习。


Block嵌套
Block嵌套

這個嵌套的Block定義產(chǎn)生的輸出為:1 2 3 4 浓瞪。

引用屬性允許構(gòu)建健壯的模板,如下所示模板的名字為“Key”巧婶,值為“\r\n”乾颁。


enter description here
enter description here

使用該模板作為一個引用


enter description here
enter description here

輸出為:
enter description here
enter description here

兩個關(guān)鍵字符串在這里發(fā)生沖突。當(dāng)解析時艺栈,自定義的Block將代替它的DataModel模板的結(jié)構(gòu)钮孵。添加字符串值“:\r\n”。同時“customized”將覆蓋String元素的“Key”和“Value”的值眼滤,用“Content-Length”和55代替。最終的DataModel將被解析如下:


enter description here
enter description here

1.4历涝、 Choice

Choice是DataModel或者Block元素的的子元素之一诅需。Choice元素用于指示任何子元素是有效的,但是只應(yīng)選擇一個荧库,很像編程語言中的switch語句堰塌。

(1)屬性(除非聲明,所有的屬性都是可選的):

  • Name---choice元素的名字分衫。
  • minOccurs---該Choice必須發(fā)生改變的最小次數(shù)场刑。
  • maxOccurs---該Choice能發(fā)生改變的最大次數(shù)。
  • Occurs---該choice能發(fā)生改變的迭代次數(shù)蚪战。

(2)子元素:

Block牵现、Choice、String邀桑、Number瞎疼、Blob、Flags壁畸、Fixup贼急、Transformer茅茂、XmlAttribute、XmlElement太抓。

(3)例子:

一個基本的Choice空闲。這個例子將破解或消耗1,2,3類型的數(shù)據(jù),很像一個需要在令牌上做出決定的常規(guī)切換語句走敌。它的前8個字節(jié)是1碴倾,剩下的數(shù)據(jù)被視為一個32位數(shù)字。如果前8位是2悔常,剩下的數(shù)據(jù)被視為一個255字節(jié)的二進制數(shù)據(jù)影斑。如果前8位是3,剩下的數(shù)據(jù)被視為一個8字節(jié)字符串机打。當(dāng)fuzzing時矫户,Peach將選擇其中的1個類型并進行fuzzing,它的輸出為一個8位數(shù)字残邀,后跟相應(yīng)的類型皆辽。Peach將會嘗試所有的3個類型。


enter description here
enter description here

一系列的Choice芥挣。第一個例子適合構(gòu)建單個Choice驱闷,但如果有許多Type1 、Type2和Type3塊都是彼此跟隨的空免,該怎么做呢空另?。通過設(shè)置minoccurs蹋砚、maxoccurs或者occurs屬性扼菠,可以指定Choice應(yīng)該被重復(fù)。這個例子嘗試來破解至少3個坝咐,最多6不同的Choice循榆。


enter description here
enter description here

1.5、 Flags

Flags定義了一組Flag的大小墨坚。

(1)屬性:

  • Name---可選的秧饮。元素的名字。
  • Size---必須的泽篮。大小盗尸,以位為單位。
  • Mutable---可選的咪辱。元素是否可以變異振劳,默認為真。

(2)子元素:

  • Fixup油狂、Flag历恐、Placement寸癌、Relation、Transformer弱贼。

(3)例子

enter description here
enter description here

1.6蒸苇、 Number

該元素定義了長度為8,16,24,32,或64位長度的二進制數(shù)吮旅。它是DataModel溪烤、Block或者Choice的子元素。

(1)屬性:

  • Name---必須的庇勃。Number的名字檬嘀。
  • Size---必須的。Number的大小责嚷,以位為單位鸳兽。有效值為1到64。
  • Value---分配給Number的默認值罕拂。
  • valueType---可選的揍异。value的表現(xiàn)方式。有效選項為string(字符串)和hex(十進制)爆班。
  • Token---當(dāng)解析的時候衷掷,該元素被視為一個令牌,默認值為假柿菩。有效選項為真和假戚嗅。
  • Endian---Number的字節(jié)順序。默認為小端枢舶。有效選項為大端渡处、小端和網(wǎng)絡(luò)。網(wǎng)絡(luò)一樣是大端祟辟。
  • Signed---Number是否為有符號數(shù)據(jù)。默認為真侣肄。有效選項為真和假旧困。
  • Constraint---一個以Python表達式為形式的約束。用于數(shù)據(jù)破解稼锅。
  • Mutable---元素是否可改變(fuzzing時是否可變異)吼具,默認為真。有效選項為真和假矩距。
  • minOccurs---Number必須發(fā)生改變的最小次數(shù)拗盒,默認為1。有效選項為正整數(shù)值锥债。
  • maxOcuurs---Number能夠發(fā)生改變的最大次數(shù)陡蝇,沒有默認值痊臭。有效選項為正整數(shù)值。

(2)有效子元素:

  • Anayzers登夫、Fixup广匙、Relation、Transformer恼策、Hint鸦致。

(3)例子:

有符號。為了表明這是一個無符號數(shù)據(jù)元素涣楷,設(shè)置signed屬性等于“false”分唾。默認為真。


enter description here
enter description here

Value類型狮斗。值類型定義了怎么解釋Value的屬性绽乔。有效選項為string和hex,默認為string情龄。將值1000分配給Hi5迄汛。


enter description here
enter description here

將43981以十六進制形式分配給Hi5。


enter description here
enter description here

小端骤视。為了改變Number的字節(jié)順序鞍爱,請設(shè)置endian屬性。


enter description here
enter description here

上圖將產(chǎn)生如下字節(jié)順序:AB CD专酗。


enter description here
enter description here

上圖將產(chǎn)生如下字節(jié)順序:CD AB睹逃。

1.7、Padding

Padding元素用來填充大小變化的塊或數(shù)據(jù)模型祷肯。

(1)屬性:

  • Name---必須的沉填。Number元素的名字。
  • Aligned---將父元素對齊到8字節(jié)邊界佑笋,默認為假翼闹。
  • Alignment---對齊到這個位邊界,比如(8蒋纬、16等)猎荠,默認為8。
  • alignedTo---基于我們要填充的元素名字蜀备。
  • Lengthcalc---計算結(jié)果為整數(shù)的腳本表達式关摇。
  • Constraint---一個以Python表達式形式的約束。用于數(shù)據(jù)破解碾阁。
  • Mutable---元素是否可變異输虱,默認為真,有效選項為真和假脂凶。

(2)有效子元素:

  • Fixup宪睹、Relation愁茁、Transformer、Hint横堡。

(3)例子:

enter description here
enter description here

1.8埋市、 String

該元素定義了一個單字節(jié)或者雙字節(jié)的字符串,它是DataModel或者Block的子元素命贴。為了指定這是一個數(shù)值的字符串道宅,請用 NumericalString元素。

(1)屬性:

  • Name---可選的胸蛛,數(shù)據(jù)模型的名字污茵。
  • Length---可選的,字符串的長度葬项。
  • lengthType---可選的泞当,Length屬性的單位。
  • Type---可選的民珍。字符編碼類型襟士,默認為“ASCII”,有效選項為ASCII嚷量、utf7陋桂、utf8、utf6蝶溶、utf6be嗜历、utf32。
  • nullTerminated---可選的抖所。是否為以空字節(jié)結(jié)尾的字符串(真或者假)梨州。
  • padCharacter---可選的。根據(jù)length參數(shù)填充字符串的字符田轧,默認為(0x00)暴匠。
  • Token---可選的。當(dāng)解析的時候傻粘,該元素應(yīng)該被視為一個令牌巷查,默認為假。
  • Constraint---一個腳本表達式形式的約束抹腿。用于數(shù)據(jù)破解。
  • Mutable---可選的旭寿。元素是否可變異警绩,默認為真。
  • Minoccurs---可選的盅称。這個塊必須發(fā)生改變的最小次數(shù)肩祥,默認為1后室。
  • Maxoccurs---可選的。這個塊會發(fā)生改變的最大次數(shù)混狠,默認為1岸霹。

(2)有效子元素:

Analyzer、Fixup将饺、Relation贡避、Transformer、Hint予弧。

(3)NumericalString:

enter description here
enter description here

該元素只能用于String來說明它的值是一個數(shù)字刮吧。當(dāng)使用這個提示時,它激活所有的數(shù)字突變以及標準的字符串突變掖蛤。請注意:如果默認情況下一個字符串的值是數(shù)字杀捻,NumericalString元素被自動添加。


enter description here
enter description here

1.9蚓庭、 Relation

Peach允許構(gòu)建數(shù)據(jù)間的關(guān)系致讥。關(guān)系是類似這樣的東西“X是Y的大小”、“X是Y的數(shù)量”器赞、或者“X是y的偏移(字節(jié)單位)”垢袱。

(1)大小關(guān)系:

enter description here
enter description here

在這個例子中,我們將提供兩個python表達式拳魁,它允許在獲取或設(shè)置size屬性的時候修改它的大小惶桐,有兩個變量可用,分別為self和size潘懊。Self是Number元素的一個引用姚糊,size是一個整數(shù)。獲取操作和設(shè)置操作應(yīng)該是彼此的數(shù)學(xué)逆操作授舟。在破解過程中應(yīng)用獲取操作救恨,在發(fā)布過程中應(yīng)用設(shè)置操作。
expressionGet---該表達式的結(jié)果用于內(nèi)部释树,它確定名字為TheValue的String元素讀取多少字節(jié)肠槽。如果Peach取10,它將在內(nèi)部存儲一個5奢啥,然后Peach將讀取5個字節(jié)到String中秸仙。
ExpressionSet---為 publisher生成一個值。 在以下示例中桩盲,為TheValue存儲的Size的值“5”(TheValue的長度)寂纪,因此Peach通過publisher輸出的值將為“5 * 2”或10。


enter description here
enter description here

(2)數(shù)量關(guān)系:

在這個例子中,Number將會說明String列表的數(shù)目。

enter description here
enter description here

在這個例子中,我們將提供兩個python表達式碳却,它允許在獲取或設(shè)置size屬性的時候修改它的大小。有兩個變量可用庄涡,分別為self和count。Self是Number元素的一個引用搬设,count是一個整數(shù)穴店。這里的讓count可用與前面的表達式不同。雖然self在表達式對中始終可用焕梅,但其他可用的變量的名字是Relation元素type屬性的值迹鹅。
expressionGet---該表達式的結(jié)果用于內(nèi)部,它確定String元素將擴展到多少項贞言。maxOccurs 是Peach循環(huán)計算中遇到的最大值斜棚,由于maxOccurs = 1024的限制,Peach在CountIndicator元素中破解時遇到的最大值是2048该窗。
ExpressionSet---設(shè)置要生成的值弟蚀。 以下示例中,count根據(jù)讀入的String元素數(shù)目確定酗失。
enter description here
enter description here

(3)偏移關(guān)系:

todo

Todo

Fixup
Transformers
Placement

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末义钉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子规肴,更是在濱河造成了極大的恐慌捶闸,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拖刃,死亡現(xiàn)場離奇詭異删壮,居然都是意外死亡,警方通過查閱死者的電腦和手機兑牡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門央碟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人均函,你說我怎么就攤上這事亿虽。” “怎么了苞也?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵洛勉,是天一觀的道長。 經(jīng)常有香客問我如迟,道長收毫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮牛哺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘劳吠。我一直安慰自己引润,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布痒玩。 她就那樣靜靜地躺著淳附,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蠢古。 梳的紋絲不亂的頭發(fā)上奴曙,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天,我揣著相機與錄音草讶,去河邊找鬼洽糟。 笑死,一個胖子當(dāng)著我的面吹牛堕战,可吹牛的內(nèi)容都是我干的坤溃。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼嘱丢,長吁一口氣:“原來是場噩夢啊……” “哼薪介!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起越驻,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤汁政,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后缀旁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體记劈,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年诵棵,在試婚紗的時候發(fā)現(xiàn)自己被綠了抠蚣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡履澳,死狀恐怖嘶窄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情距贷,我是刑警寧澤柄冲,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站忠蝗,受9級特大地震影響现横,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一戒祠、第九天 我趴在偏房一處隱蔽的房頂上張望骇两。 院中可真熱鬧,春花似錦姜盈、人聲如沸低千。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽示血。三九已至,卻和暖如春救拉,著一層夾襖步出監(jiān)牢的瞬間难审,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工亿絮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留告喊,地道東北人。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓壹无,卻偏偏與公主長得像葱绒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子斗锭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容