KeyFrame內部研究專用

CTF-Academy CTF 2026: Hi-PIE 👋🥧

Hubert Feyrer / hubertf·6月30日週二·6 min中文

三句話摘要

利用 NOP sled 和有效載荷噴灑技術,將緩衝區溢出漏洞在 ASLR 保護下的利用時間從數分鐘加速至秒級。 通過 NOP sled 和有效載荷噴灑的組合,即使在 ASLR 環保護下,也能將緩衝區溢出的利用時間從盲猜的數分鐘大幅縮短至可接受的秒級。 基本漏洞原理:目標程序使用 strcpy 將使用者輸入複製到 72 字節的棧緩衝區,因為沒有大小檢查且 strcpy 遇零字節才停止,攻擊者可輸入超過 72 字節的資料來覆蓋保存的返回地址,使程式跳轉至任意地址。

重點整理

重點
  • 1

    基本漏洞原理:目標程序使用 strcpy 將使用者輸入複製到 72 字節的棧緩衝區,因為沒有大小檢查且 strcpy 遇零字節才停止,攻擊者可輸入超過 72 字節的資料來覆蓋保存的返回地址,使程式跳轉至任意地址。

  • 2

    ASLR 的挑戰:堆棧和堆的基址在每次運行時隨機變化,攻擊者無法預知 shellcode 的確切位置,導致傳統的猜測方法運行時間極長。

  • 3

    NOP sled 技術:在 shellcode 前放置大量 NOP(無操作)指令,使任何落入該區域的返回地址都能滑行至真正的 shellcode,將「一個精確目標位置」變成「一個寬泛的命中區域」,大幅增加命中概率。

  • 4

    有效載荷分割與噴灑:第一部分是 72 字節的返回地址放入緩衝區,第二部分是多份 64KB NOP sled 加 shellcode 的組合放入環境變數(NVP),通過複製多份來進一步提升 ASLR 碰撞的機率。

實用技巧與重點

乾貨
  • 緩衝區大小:72 字節
  • 返回地址偏移:72 字節
  • NOP sled 大小:64KB 單份
  • 預期運行時間:約 1 分鐘(相比原方法的數分鐘)
  • 使用工具:Ghidra(反向工程)、GDB(定位地址)、Pwntools(開發框架)、Shellcraft(生成無零字節 shellcode)
  • 系統呼叫:sendfile syscall(用於讀取檔案而不修改權限)
  • 環境變數清空:移除多餘環境變數以減少地址偏移
  • 微調策略:初次使用 gdb 定位大致地址,後續每次嘗試微調返回地址值
  • Core dump 限制:設定為 0 以減少檔案寫入開銷

結論

結論

通過 NOP sled 和有效載荷噴灑的組合,即使在 ASLR 環保護下,也能將緩衝區溢出的利用時間從盲猜的數分鐘大幅縮短至可接受的秒級。

完整解析

詳細

緩衝區溢出是經典的軟體安全漏洞。在本演講中,Hubert 以一個簡單程式為例:主函數接收使用者輸入,傳遞給 greet 函數,該函數使用 strcpy 將輸入複製到 72 字節的棧緩衝區。strcpy 有兩個致命缺陷——它完全忽視目標緩衝區的大小,並在遇到零字節時才停止複製。攻擊者可以輸入 72 字節的任意資料,後跟要覆蓋的返回地址和 shellcode,從而劫持程式的控制流。

然而,現實環境中 ASLR(地址空間佈局隨機化)通常是啟用的,這意味著每次程式運行時,堆棧的基址都會變化。傳統的利用方式是盲目猜測:反覆執行程式,期望 ASLR 碰巧將堆棧放在預期位置。這在統計上可行但耗時極長,某些情況下需要數分鐘甚至更久。

演講者引入 NOP sled 技術來加速這個過程。與其指向 shellcode 的某一精確位址,不如在 shellcode 前面放置數千甚至數萬個 NOP(無操作指令)。當返回地址跳到 NOP 區域的任何位置時,CPU 會執行這些無操作指令,然後自然地進行到真正的 shellcode。這樣做的效果是將單一的「命中目標」變成了一個寬泛的「命中區域」,大幅提升了 ASLR 命中的機率。

實現細節上,有效載荷被分為兩部分。第一部分是經過計算的返回地址,放入 72 字節的緩衝區中。第二部分是多份「NOP sled + shellcode」的組合,存放在程式的環境變數中。演講者使用 64KB 的 NOP sled,並將其複製多份,進一步提升命中概率。Shellcode 使用 pwntools 的 shellcraft 模組生成,確保不包含零字節(否則 strcpy 會提前停止)。其他優化包括清空多餘的環境變數以穩定棧地址、使用 gdb 初步定位 sled 的位置,然後在暴力迴圈中逐次微調返回地址,並將 core dump 限制設為 0 以避免不必要的檔案寫入。最終,這套優化將利用時間縮短至約 1 分鐘。

關鍵時刻

Pipeline v2

帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。

事實查核

Pipeline v2

說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

更多「Web2 安全」的內容

SANS Stormcast Tuesday, August 25th, 2026: DOUBLECUP PNG; WebAudio Fingerprinting; Expired Domains; Android; Car
7 min
Web2 安全英文PODCAST8月25日

SANS Stormcast Tuesday, August 25th, 2026: DOUBLECUP PNG; WebAudio Fingerprinting; Expired Domains; Android; Car

SANS Stormcast

  • PNG 容器攻擊的簡易性設計:Double Cup 不依賴複雜的 Exif 或隱寫技術,只用 PNG 副檔名和檔頭來偽裝,核心是利用 findstr 指令的常見可用性讓執行變得無需額外工具。
  • Web Audio API 的隱密指紋識別:音訊於增益零的無聲狀態下播放,使用者完全無感,但錄製波形足以建立裝置特徵,在瀏覽器原生功能層面難以區分是反詐欺還是過度追蹤。
  • 域名過期引發的串聯漏洞:DMARC 報告端點使用過期域名是常見疏漏,允許攻擊者透過簡單的域名註冊取得他人的 SPF/DKIM 錯誤報告,進而收集目標系統配置情報。
Risky Bulletin: Expired credit cards can be used for malicious transactions
5 min
Web2 安全英文PODCAST8月24日

Risky Bulletin: Expired credit cards can be used for malicious transactions

Risky Business

  • 支付安全的非對稱風險:Visa卡利用未加密的卡片資料與NFC通訊,攻擊者可藉由中間人技術竄改過期日期進行交易,但MasterCard、美運卡與Discover的防護更完善,顯示不同發卡機構的安全架構存在明顯差異。
  • 國家級駭客活動的連鎖延伸:北韓Lazarus集團在2月單一事件已累積100名受害者,涵蓋大學、警察部門、媒體與醫療機構,伊朗駭客則針對基礎建設如電力系統發動破壞性攻擊,反映地緣政治在網路戰爭中的升溫。
  • AI加速漏洞生態的雙面刃:AI工具催生近2萬份漏洞概念驗證代碼發布,但同時也導致大量失效漏洞代碼氾濫,增加資安團隊甄別真實威脅的難度;Mayer Protocol遭攻擊事件中,駭客用AI鏈接六個無關的小漏洞完成盜竊170萬美元的攻擊。
SANS Stormcast Monday, August 24th, 2026: More Entra Powershell; Entra Vulnerability; GitLab Vuln (and PoC); GTA 6 Leak Malware
5 min
Web2 安全英文PODCAST8月24日

SANS Stormcast Monday, August 24th, 2026: More Entra Powershell; Entra Vulnerability; GitLab Vuln (and PoC); GTA 6 Leak Malware

SANS Stormcast

  • Microsoft EntraID 的遠端代碼執行漏洞已由微軟修補,初期報告顯示已遭利用但後來更正為未遭利用。這反映 Microsoft 在雲端軟體安全上的透明度提升,對漏洞採用與內部軟體相同的 CVE 編號和公告流程。
  • PowerShell 指令碼可用於驗證 MFA 部署完整性,特別是找出未啟用 MFA 的遺漏帳號。同時可以分析 EntraID 登入日誌中的異常行為,如風險係數評估和地理位置檢測,幫助組織快速識別可疑登入。
  • GitLab 的 GraphQL 代碼注入漏洞允許未認證攻擊者刪除或修改儲存庫,潛在導致供應鏈攻擊。已有公開概念驗證 (PoC) 存在,使用內部部署 GitLab 的組織必須立即修補。