±à¼ÍƼö: |
ÎÄÕÂÖ÷Òª½éÉÜÁËÄ£ºý²âÊԵĸÅÄPeach-pit5¸öÄ£¿éµÄ¶¨Òå·½·¨£¬ÒÔ¼°ÓÃpeach½øÐÐÄ£ºý²âÊԵĻù±¾¹ý³Ì¡£
±¾ÎÄÀ´×ÔÓÚichunqiu£¬ÓÉ»ðÁú¹ûÈí¼þLuca±à¼¡¢ÍƼö¡£ |
|
ʲôÊÇÄ£ºý²âÊÔ
Ä£ºý²âÊÔ£¨Fuzzing£©£¬ÊÇÒ»ÖÖͨ¹ýÏòÄ¿±êϵͳÌṩ·ÇÔ¤ÆÚµÄÊäÈë²¢¼àÊÓÒì³£½á¹ûÀ´·¢ÏÖÈí¼þ©¶´µÄ·½·¨¡£²âÊԵĻù±¾Ë¼Ïë¾ÍÊÇͨ¹ýÏò³ÌÐòÖÐÊäÈë´óÁ¿µÄËæ»úÊý¾Ý£¬È»ºó¹Û²ìÊäÈëÕâЩÊý¾ÝÖ®ºó³ÌÐòµÄÇé¿ö£¬¼Ç¼ÏÂʹ³ÌÐò·¢ÉúÒì³£µÄÊý¾Ý£¬´Ó¶øÅжϳÌÐòÊÇÔÚÄÇЩµØ·½·¢ÉúÁËÒì³£¡£
Ä£ºý²âÊÔµÄʵÏÖÊÇÒ»¸ö·Ç³£¼òµ¥µÄ¹ý³Ì£º
1. ×¼±¸Ò»·Ý²åÈë³ÌÐòÖеÄÕýÈ·µÄÎļþ¡£
2. ÓÃËæ»úÊý¾ÝÌæ»»¸ÃÎļþµÄijЩ²¿·Ö¡£
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++¶¼ÊDz»´íµÄÑ¡Ôñ¡£ÕâÀïÎÒʹÓõÄÊÇ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³ÌÐòÖУ¬ÎÒÃDz»ÐèÒªÆôÓÃWinDbgµ÷ÊÔ£¬ËùÒÔÎÞÐèÅäÖÃAgent¡£
£¨5£©Test and Run configuration
ÔÚPeach PitÎļþÖУ¬Test and Run configuration °üÀ¨ Test
ºÍ Run Á½¸öÔªËØ¡£
TestÔªËØÓÃÀ´¶¨ÒåÒ»¸ö²âÊÔµÄÅäÖ㬰üÀ¨Ò»¸öStateModelºÍÒ»¸öPublisher£¬ÒÔ¼°includeing/excluding¡¢AgentÐÅÏ¢µÈ¡£ÆäÖÐStateModelºÍPublisherÊDZØÐ붨ÒåµÄ£¬ÆäËûÊÇ¿ÉÑ¡¶¨ÒåµÄ¡£ÏÂÃæÊÇÒ»¸ö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ÓõÄÊDZê×¼Êä³ö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Îļþ¡£

|