2024 NISRA Enlightened|課程講師/社員
Pwn 課程
從 Pwn 基礎、真實漏洞案例到 Integer Overflow 與 Buffer Overflow Lab 的入門課程。
- Year
- 2024
- Role
- 社員/課程設計/Lab/現場教學
- Team
- 個人授課
- Share
- 100%
專案總覽
這堂課為 NISRA Enlightened 的 Pwn 入門課程,從二進位漏洞利用的概念與應用開始,再透過 Pwn2Own 案例和 Flag Shop Lab 帶學員逐步實作。
問題與動機
Pwn 同時涉及程式語言、記憶體、組合語言與除錯工具,初學者很容易在工具操作或名詞中失去主線。
從整數、資料覆寫到控制流程,知識層次需要循序建立。
只看漏洞原理不容易建立直覺,必須透過可重現的 Lab 練習。
方法與核心內容
課程先以真實 Pwn2Own 案例建立動機,再使用同一組 Flag Shop 題目逐步加入 Integer Overflow、Overwrite Data 與 Buffer Overflow 等概念。
以『Your printer is not your printer』說明漏洞利用的真實影響。
讓學員在相同情境中觀察不同漏洞如何改變程式狀態。
技術脈絡
教學路線從程式輸入與整數開始,逐步走向記憶體資料、控制流程與漏洞利用。
Pwn 分析主線
教材將漏洞利用拆成資訊蒐集、靜態分析、漏洞定位、利用與後續控制。學員不只嘗試特殊輸入,而要把輸入如何進入記憶體、程式如何做算術與控制流程如何改變連起來。
Pwn2Own 印表機案例
案例以 Canon ImageCLASS MF644Cdw 為背景:裝置執行客製化 DryOSv2,ARMv7 32-bit little-endian,核心與服務連結在同一映像,且缺少 stack guard、DEP 與 ASLR 等現代緩解。研究者先逆向韌體解密,再以已知函式與字串校正 image base 至 0x40affde0。
利用鏈
- 利用 Canon BJNP 協定把 shellcode 放到固定且可預期的位置。
- 觸發 SLP 服務的 stack overflow,覆寫 return address。
- 將控制流程導向先前放入記憶體的 shellcode。
Flag Shop:從資料錯誤到控制流程
Lab 使用同一個商店情境逐步加入負數輸入、32-bit integer overflow、相鄰資料覆寫與 buffer overflow,讓學員觀察錯誤從業務邏輯一路升級為記憶體破壞。
修補對照
- 負數/邊界:驗證輸入範圍,不讓不合理數量進入計算。
- 整數溢位:在運算前後檢查範圍,或選擇具安全檢查的型別與語言。
- 字串覆寫:避免
gets、無界scanf、strcpy、sprintf,改用明確長度限制。
執行流程
每個 Lab 先觀察正常行為,再透過輸入差異引導學員找到漏洞。
01 — 理解程式邏輯
閱讀題目流程與輸入限制,建立正常狀態的預期。
02 — 觸發異常狀態
利用整數與資料處理問題改變程式判斷。
03 — 連結到利用概念
從 Lab 結果回到 Buffer Overflow 與真實漏洞案例。
每個 Lab 的觀察方法
先記錄正常輸入的程式狀態,再設計最小異常輸入並比較金額、變數與記憶體的改變;最後回到原始碼或除錯器定位缺少的驗證。這能把『拿到 Flag』轉成可重複的漏洞分析方法。
由入門題連到真實裝置
Flag Shop 控制變因、降低工具門檻;印表機案例則展示同一概念在 RTOS、韌體與網路協定中的實際組合。兩者相互對照,使學員能理解基礎漏洞為何仍會出現在複雜產品。
我的貢獻
貢獻比例 100%。這堂 Pwn 課程由我獨立規劃與授課,包含課程結構、教材製作、實作 Lab、示範內容及現場講解。
- 01課程設計安排 Pwn 簡介、案例與實作的學習順序。
- 02Lab 準備設計 Flag Shop 練習與各階段提示。
- 03教材製作整理 100 頁簡報與示範內容。
- 04現場教學帶領學員操作、除錯並回答實作問題。
成果與反思
課程完成從 Pwn 概念到漏洞實作的完整教學,同時也重新鞏固了自身的 Pwn 基礎概念,以及也學會設計題目。