Fuzz学习笔记(一)—— WinAFL环境搭建与基本使用
WinAFL學習筆記(一)—— WinAFL環境搭建
- 環境配置
- 安裝步驟
- 1)安裝git
- 2)安裝CMake
- 3)編譯dynamorio
- 編譯32位
- 編譯64位
- 4)編譯winafl
- 編譯32位
- 編譯64位
- 測試
- 測試dynamorio
- 測試winafl
環境配置
| windows | 10 | |
| Visual Studio | 2019 | https://visualstudio.microsoft.com/zh-hans/vs/ |
| git | 2.31.0 | https://gitscm.com/download/win |
| CMake | 3.20.0 | https://cmake.org/files |
| dynamorio | Source Code | https://github.com/DynamoRIO/dynamorio |
| winafl | Source Code | https://github.com/ivanfratric/winafl |
安裝步驟
1)安裝git
安裝步驟:雙擊運行安裝包,一路next即可
注意:安裝完后需要手動將git安裝路徑/usr/bin添加到環境變量中
2)安裝CMake
安裝步驟:雙擊運行安裝包,在其中一步需要勾選Add CMake to the system PATH for all users,其它地方一路next
3)編譯dynamorio
編譯32位
1)首先找到Virsual Studio文件夾中的vcvarsall.bat所在目錄,并打開cmd
2)執行以下命令
編譯64位
1)首先找到Virsual Studio文件夾中的vcvarsall.bat所在目錄,并打開cmd
2)執行以下命令
4)編譯winafl
編譯32位
1)首先找到Virsual Studio文件夾中的vcvarsall.bat所在目錄,并打開cmd
2)執行以下命令
編譯64位
1)首先找到Virsual Studio文件夾中的vcvarsall.bat所在目錄,并打開cmd
2)執行以下命令
測試
準備一個測試用例test.exe,代碼如下
#include <stdio.h> #include <windows.h>int main(int argc, char *argv[]) {char tmp[30];char buff[1024];FILE *fp;if(argc>=2){fp = fopen(argv[1], "rb");if(fp == NULL){printf("can not load file!\n");return 1;}fgets(buff, 1024, fp); //讀取文件內容 fclose(fp);strcpy(tmp, buff); //存在棧溢出漏洞printf("%s\n", tmp);return 1;}return 0; }//test.exe準備一個文本文件input.txt,內容如下
abcdefghijklmnopqrstuvwxyz測試dynamorio
1)檢測程序會執行哪些代碼塊
C:\MyFuzz\dynamorio\build32\bin32\drrun.exe -t drcov -- test.exe測試結果
2)使用winafl.dll檢測模塊執行概況
注意:winafl.dll需和test.exe在同一目錄
winafl參數說明
-debug //必須為debug模式, 結束后會生成一個log文件 -target_module //目標程序(只能有一個), 也是target_offset所在的模塊 -target_offset //目標程序偏移,相對于target_module的偏移,在method無法導出的時候使用 -fuzz_iterations //目標程序重新啟動一次內運行目標函數(即target_method)的最大迭代數 -nargs //目標程序執行所需要的參數個數(包括目標程序本身) -target_module //目標函數,需要export或者調試符號(pdb) -coverage_module //計算覆蓋率的模塊,也就是目標程序會調用的模塊(dll); (可以有多個)測試結果
測試winafl
1)在Release目錄下創建兩個文件夾in和out
2)將input.txt放入in文件夾中
3)afl-fuzz測試
參數說明
-i //存放樣本的目錄 -o //保存輸出數據,包括 crash文件、測試用例等 -D //DynamoRIO的路徑 (drrun, drconfig) -t msec //每一次樣本執行的超時時間 第一個"--"分割符 //后面跟的是插樁的參數 第二個"--"分割符 //后面跟的是目標程序的參數 @@ //引用 -i 參數的中的測試用例測試結果
各模塊含義
4)查看out目錄
重點查看crashes目錄,這個目錄中保存運行異常時的文本信息
可以直觀觀察到是由于生成的文本長度過長使程序產生棧溢出而導致崩潰
總結
以上是生活随笔為你收集整理的Fuzz学习笔记(一)—— WinAFL环境搭建与基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pwn学习总结(五) —— ret2dl
- 下一篇: 硬编码学习笔记(一)—— 经典定长指令