第十四屆 優選

security
模糊測試從入門到放棄
cc85nod

系列文章

DAY 1

[Day 1] 模糊測試概念總覽

此系列文的主題為模糊測試,內容包含但不限於其概念、實作以及演進,對象設定在有一定程式基礎的人。看完後至少會知道模糊測試怎麼運作,如果能完整消化的話,應該就已經...

DAY 2

[Day 2] Fuzzing 內部架構

簡單介紹一下 basic block。程式在執行時會因為不同的條件執行不同的程式碼,而不同條件主要就是以 if 來定義,以下方程式碼為例子,當 a == 1 &...

DAY 3

[Day 3] 透過 Sanitizer 偵測程式異常

即使程式存在漏洞,也不一定會在執行到有漏洞的程式碼時觸發異常,以下面的程式碼為例子,如果使用者輸入的 idx 落在 0~99 之間則屬於正常範圍,超過 100...

DAY 4

[Day 4] 近代 fuzzer 始祖 - AFL - 總覽 & 編譯

Fuzzing 的概念也許已經存在一陣子,不過近期最有影響性的 fuzzer 應該公認為 AFL,實作直觀並且具有完整的框架,code base 不大之外程式碼...

DAY 5

[Day 5] 近代 fuzzer 始祖 - AFL - 插樁 & 組譯

插樁介紹 插樁 (instrumentation) 的核心概念為: 在保證原程式邏輯的完整性下,在程式中插入一些程式碼來蒐集 runtime 期間的執行狀態。以...

DAY 6

[Day 6] 近代 fuzzer 始祖 - AFL - 插樁程式碼

在 Day 4, 5 已經了解 afl 是如何包裝編譯的過程,並且在組譯時插入程式碼,在此做個小複習: afl-gcc 包裝了 gcc 的執行參數來 comp...

DAY 7

[Day 7] 近代 fuzzer 始祖 - AFL - Fuzzer - 初始化 & Fuzzing loop

前幾天已經介紹 afl 在編譯時會對 target 做怎樣的處理,並且了解 fuzzing 時 target 是如何與 fuzzer 做互動。接下來要講 afl...

DAY 8

[Day 8] 近代 fuzzer 始祖 - AFL - Fuzzer - 校正 & Fork server

由於所有處理的邏輯都寫在 function fuzz_one(),導致此 function 多達 1600 行,因此會拆成多個部分介紹,其中有些處理會包含機率,...

DAY 9

[Day 9] 近代 fuzzer 始祖 - AFL - Fuzzer - Trimming & Mutation

今天主要會介紹 trimming 以及 mutation,並了解 function run_target() 的執行過程,而 run_target() 其實是用...

DAY 10

[Day 10] 近代 fuzzer 始祖 - AFL - Fuzzer - Interesting input

每次做完 mutation 都會執行 common_fuzz_stuff(),而此 function 會呼叫 run_target() 以及 save_if_i...