Fuzz学习笔记(一)—— WinAFL环境搭建与基本使用
WinAFL學(xué)習(xí)筆記(一)—— WinAFL環(huán)境搭建
- 環(huán)境配置
- 安裝步驟
- 1)安裝git
- 2)安裝CMake
- 3)編譯dynamorio
- 編譯32位
- 編譯64位
- 4)編譯winafl
- 編譯32位
- 編譯64位
- 測(cè)試
- 測(cè)試dynamorio
- 測(cè)試winafl
環(huán)境配置
| 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
安裝步驟:雙擊運(yùn)行安裝包,一路next即可
注意:安裝完后需要手動(dòng)將git安裝路徑/usr/bin添加到環(huán)境變量中
2)安裝CMake
安裝步驟:雙擊運(yùn)行安裝包,在其中一步需要勾選Add CMake to the system PATH for all users,其它地方一路next
3)編譯dynamorio
編譯32位
1)首先找到Virsual Studio文件夾中的vcvarsall.bat所在目錄,并打開(kāi)cmd
2)執(zhí)行以下命令
編譯64位
1)首先找到Virsual Studio文件夾中的vcvarsall.bat所在目錄,并打開(kāi)cmd
2)執(zhí)行以下命令
4)編譯winafl
編譯32位
1)首先找到Virsual Studio文件夾中的vcvarsall.bat所在目錄,并打開(kāi)cmd
2)執(zhí)行以下命令
編譯64位
1)首先找到Virsual Studio文件夾中的vcvarsall.bat所在目錄,并打開(kāi)cmd
2)執(zhí)行以下命令
測(cè)試
準(zhǔn)備一個(gè)測(cè)試用例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); //讀取文件內(nèi)容 fclose(fp);strcpy(tmp, buff); //存在棧溢出漏洞printf("%s\n", tmp);return 1;}return 0; }//test.exe準(zhǔn)備一個(gè)文本文件input.txt,內(nèi)容如下
abcdefghijklmnopqrstuvwxyz測(cè)試dynamorio
1)檢測(cè)程序會(huì)執(zhí)行哪些代碼塊
C:\MyFuzz\dynamorio\build32\bin32\drrun.exe -t drcov -- test.exe測(cè)試結(jié)果
2)使用winafl.dll檢測(cè)模塊執(zhí)行概況
注意:winafl.dll需和test.exe在同一目錄
winafl參數(shù)說(shuō)明
-debug //必須為debug模式, 結(jié)束后會(huì)生成一個(gè)log文件 -target_module //目標(biāo)程序(只能有一個(gè)), 也是target_offset所在的模塊 -target_offset //目標(biāo)程序偏移,相對(duì)于target_module的偏移,在method無(wú)法導(dǎo)出的時(shí)候使用 -fuzz_iterations //目標(biāo)程序重新啟動(dòng)一次內(nèi)運(yùn)行目標(biāo)函數(shù)(即target_method)的最大迭代數(shù) -nargs //目標(biāo)程序執(zhí)行所需要的參數(shù)個(gè)數(shù)(包括目標(biāo)程序本身) -target_module //目標(biāo)函數(shù),需要export或者調(diào)試符號(hào)(pdb) -coverage_module //計(jì)算覆蓋率的模塊,也就是目標(biāo)程序會(huì)調(diào)用的模塊(dll); (可以有多個(gè))測(cè)試結(jié)果
測(cè)試winafl
1)在Release目錄下創(chuàng)建兩個(gè)文件夾in和out
2)將input.txt放入in文件夾中
3)afl-fuzz測(cè)試
參數(shù)說(shuō)明
-i //存放樣本的目錄 -o //保存輸出數(shù)據(jù),包括 crash文件、測(cè)試用例等 -D //DynamoRIO的路徑 (drrun, drconfig) -t msec //每一次樣本執(zhí)行的超時(shí)時(shí)間 第一個(gè)"--"分割符 //后面跟的是插樁的參數(shù) 第二個(gè)"--"分割符 //后面跟的是目標(biāo)程序的參數(shù) @@ //引用 -i 參數(shù)的中的測(cè)試用例測(cè)試結(jié)果
各模塊含義
4)查看out目錄
重點(diǎn)查看crashes目錄,這個(gè)目錄中保存運(yùn)行異常時(shí)的文本信息
可以直觀觀察到是由于生成的文本長(zhǎng)度過(guò)長(zhǎng)使程序產(chǎn)生棧溢出而導(dǎo)致崩潰
總結(jié)
以上是生活随笔為你收集整理的Fuzz学习笔记(一)—— WinAFL环境搭建与基本使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: pwn学习总结(五) —— ret2dl
- 下一篇: 硬编码学习笔记(一)—— 经典定长指令