# 9 SULLEY
Sulley 名字來起源于電影《Monsters》, 一頭毛絨絨的藍色怪物。下面將要看到的 Sulley 也是一個怪物,強大的基于 Python 的 fuzzing 框架的怪物(在這里讓我們感謝他們:Pedram Amini 和 Aaron Portnoy of TippingPoint)。Sulley 不僅僅是一個 fuzzer;它還有擁有優秀的崩 潰報告,自動虛擬化技術(VMWare automation)。在 fuzzing 的過程中你可以在任意時刻, 甚至是目標程序崩潰的時候,從新啟動程序到前一刻,繼續尋找 bug 之旅。In short, Sulley is badass.
Sulley 和 SPIKE(一款著名的協議 fuzzing 工具,當然它是免費的)一樣使用了數據塊 技術,所以生成的數據會更有“智慧”,不在是一群沒頭沒腦的蒼蠅。讓我們看看什么是基 于塊的 fuzzing 技術,在生成測試數據前,你必須針對協議或者是文件格式,完成一個數據 生成的框架,框架里盡可能詳細的包含了協議(或者文件格式)的各個字段,數據類型,還 有長度信息,最后生成的測試數據就會非常有針對性。讓后把這些測試數據傳遞給負責協議 測試的框架,用于 fuzzing。這項技術最早提出來的目的就是為了解決網絡協議 fuzz 時的盲 目性。舉個例子,在網絡協議中,一般每個字段都有長度記錄,如果我們發送的測試數據增 加了數據的長度,卻沒有改變長度記錄,那服務端程序,就會根據長度記錄,自動拋棄多余 的數據,這樣在 fuzzing 的時候,就很難找出 bug 了。基于塊的技術則是負責處理這些數據 塊間的關系的,讓生成的數據更標準,而不是像野蠻人。
接下來我們會詳細的講解 Sully,從安裝到使用。先是快速的了解 Sulley 創建 protocol description(協議描述)的基礎知識。接著再完成一個包含,fuzzing 框架,包捕獲,以及崩潰報告的完整的 fuzzer。我們 fuzzing 的目標就是 WarFTPD,早期的版本存在棧溢出。測試 fuzzer 最常見方法就是,用有漏洞的程序喂它,如果它能咬出一個洞,說明你的 fuzzer 還不 傻,如果什么都沒發現,那洗洗回去睡把。這次我們喂的是個怪物,如果你還沒有飼養手冊, 可以看看 Pedram 和 Aaron 寫的 Sulley manual。好了,讓我們繼續。
- 序
- 1 搭建開發環境
- 1.1 操作系統準備
- 1.2 獲取和安裝 Python2.5
- 1.3 配置 Eclipse 和 PyDev
- 2 調試器設計
- 2.1 通用 CPU 寄存器
- 2.2 棧
- 2.3 調試事件
- 2.4 斷點
- 3 自己動手寫一個 windows 調試器
- 3.2 獲得 CPU 寄存器狀態
- 3.3 實現調試事件處理
- 3.4 全能的斷點
- 4 PyDBG---純 PYTHON 調試器
- 4.1 擴展斷點處理
- 4.2 處理訪問違例
- 4.3 進程快照
- 5 IMMUNITY----最好的調試器
- 5.1 安裝 Immunity 調試器
- 5.2 Immunity Debugger 101
- 5.3 Exploit 開發
- 5.4 搞定反調試機制
- 6 HOOKING
- 6.1 用 PyDbg 實現 Soft Hooking
- 6.2 Hard Hooking
- 7 Dll 和代碼注入
- 7.1 創建遠線程
- 7.2 邪惡的代碼
- 8 FUZZING
- 8.1 Bug 的分類
- 8.2 File Fuzzer
- 8.3 改進你的 Fuzzer
- 9 SULLEY
- 9.1 安裝 Sulley
- 9.2 Sulley primitives
- 9.3 獵殺 WarFTPD
- 10 Fuzzing Windows 驅動
- 10.1 驅動通信
- 10.2 用 Immunity fuzzing 驅動
- 10.4 構建 Driver Fuzzer
- 11 IDAPYTHON --- IDA 腳本
- 11.1 安裝 IDAPython
- 11.2 IDAPython 函數
- 11.3 腳本例子
- 12 PyEmu
- 12.1 安裝 PyEmu
- 12.2 PyEmu 一覽
- 12.3 IDAPyEmu