KeyFrame內部研究專用

Black Hat EU 2001- Third Generation Exploits on NT/Win2k Platforms pt2

YouTube Creator·10月2日週三·64 min英文

三句話摘要

Windows系統緩衝區溢位與格式字串漏洞的利用技術及可靠性提升方法。 在NT系統上,透過利用可預測的TEB地址和SEH連結串列、配合精心控制的多執行緒環境,能夠將基於緩衝區溢位的漏洞利用成功率提升到80-90%;而格式字串漏洞因其通用性和隱蔽性,已成為比緩衝區溢位更普遍的威脅,且可透過自動化工具在二進位制層面快速定位。 緩衝區溢位的可靠性困境:在NT系統中,返回地址會隨著Service Pack、熱修復程式及程式語言版本變化而改變,且多執行緒應用無法預測堆疊位置,標準Unix跳轉堆疊技術完全失效。講者強調,單靠堆疊溢位在NT上已不可行。

重點整理

重點
  • 1

    緩衝區溢位的可靠性困境:在NT系統中,返回地址會隨著Service Pack、熱修復程式及程式語言版本變化而改變,且多執行緒應用無法預測堆疊位置,標準Unix跳轉堆疊技術完全失效。講者強調,單靠堆疊溢位在NT上已不可行。

  • 2

    Windows異常處理鏈的可利用性:NT系統的SEH機制比Unix訊號處理更強大,允許程式註冊多層異常處理器。透過覆寫執行緒環境區塊(fs:0x00)中的異常處理器指標,攻擊者能夠劫持程式流程,只需在異常觸發後獲得控制權。

  • 3

    TEB記憶體佈局的可預測性:第一個執行緒的TEB始終位於0x7ffde000,後續執行緒按遞減順序分配,地址高度可預測。雖然執行緒終止會導致記憶體碎片化,但透過製造高負載讓目標執行緒排隊靠前,再配合垃圾執行緒填補空隙,可將利用成功率穩定在80-90%以上。

  • 4

    格式字串漏洞的通用性:`printf(user_data)`這種模式普遍存在於程式碼中,源於程式設計師懶惰或不瞭解規範。單個格式字串漏洞可實現任意記憶體讀寫,利用方式比緩衝區溢位靈活,且在二進位制層面可透過棧修正指令自動檢測。

實用技巧與重點

乾貨
  • 關鍵資料與發現:
  • 第一執行緒TEB地址:0x7ffde000
  • 第12個執行緒TEB地址:0x7ffd0000
  • 測試執行緒數量:500個
  • 利用成功率:80-90%(多執行緒、無Service Pack資訊情況下)
  • Microsoft FTP伺服器中發現的格式字串漏洞需啟用除錯標誌才能觸發
  • 工具與技術:
  • IDA反彙編器:可編寫指令碼自動檢測格式字串漏洞
  • 檢測引數:棧修正量、格式字串長度、引數個數
  • sprintf最小棧修正值:12位元組;printf最小值:8位元組
  • 格式字元應用:`%x`(讀記憶體)、`%n`(寫記憶體)、`%s`(讀字串)
  • 關鍵概念:
  • 引數缺陷錯誤(Parameter Insufficiency Error):缺少格式字串引數導致的漏洞
  • 棧修正(Stack Correction):函式呼叫後恢復棧指標的操作
  • 執行緒環境區塊碎片化(TEB Fragmentation):執行緒終止導致記憶體地址空隙
  • 實際案例:
  • Checkpoint管理客戶端:存在可利用的版本
  • 微軟FTP伺服器:DNS查詢中的格式字串漏洞
  • Apache模組:格式字串漏洞自動檢測工具可發現

結論

結論

在NT系統上,透過利用可預測的TEB地址和SEH連結串列、配合精心控制的多執行緒環境,能夠將基於緩衝區溢位的漏洞利用成功率提升到80-90%;而格式字串漏洞因其通用性和隱蔽性,已成為比緩衝區溢位更普遍的威脅,且可透過自動化工具在二進位制層面快速定位。

完整解析

詳細

演講從緩衝區溢位的根本難題開始。在Unix系統中,攻擊者可以預測堆疊位置並跳轉到那裡執行shell code,但Windows NT完全改變了規則。首先,大多數NT編譯器將全域性偏移表(GOT)設為只讀,寫入會觸發訪問違例異常(SE_ACCESS_VIOLATION)。其次,NT本質上是多執行緒架構,每個執行緒的堆疊位置不同且隨Service Pack版本變化,使得盲目跳轉極其不可靠。

針對這一困局,講者介紹了Windows的結構化異常處理(SEH)機制。每個執行緒透過fs:0x00指向一個異常處理器連結串列,連結串列中每個節點包含指向下一個處理器的指標和處理器程式碼的地址。當異常發生時,系統依次呼叫連結串列中的處理器。透過緩衝區溢位或格式字串漏洞覆寫這個指標,攻擊者可以指向惡意結構體,觸發異常後就能獲得程式碼執行權。

然而SEH位於fs段中,跨段任意寫入看似不可能。講者的突破性發現是:TEB(執行緒環境區塊)雖然官方不公開支援,但被對映到使用者地址空間。透過測試發現,第一個執行緒的TEB始終在0x7ffde000,第二個在0x7fddc000,依此類推,每個遞減0x2000位元組。這種高度可預測性使得直接覆寫fs:0x00成為可能。

但多執行緒系統還有另一重難題:執行緒碎片化。當執行緒建立後又快速終止,TEB地址空間會產生空隙,導致按順序溢位時可能跳過目標執行緒。講者的對策是先對伺服器施加高併發壓力,迫使大量執行緒建立;然後讓它們全部快速終止,造成地址空間最前面空出來;接著立即連線攻擊執行緒,使其排在前面;最後建立大量垃圾執行緒填補空隙。這個精心編排的流程將利用成功率提升到80-90%,即使在完全不知道作業系統版本、Service Pack號和程式語言的情況下。

後半部分講者轉向格式字串漏洞。`printf(user_data)`這一模式源於程式設計師的懶惰,完全省略了格式字串引數。格式字元如`%x`會從棧中讀取引數並列印,`%s`會讀取指標指向的字串,`%n`會將已寫入位元組數寫入引數地址。透過精心構造輸入,攻擊者可以從棧上讀取自己輸入的緩衝區地址,然後利用`%n`在任意地址寫入任意值,完成從記憶體讀寫到程式碼執行的全鏈路利用。

講者演示了在IDA中編寫指令碼自動檢測這些漏洞的方法。透過分析棧修正指令的大小和格式字串是否被雙引號括起,指令碼能自動定位可疑函式。在Microsoft FTP伺服器中,他實際發現了一個透過DNS查詢觸發的格式字串漏洞。雖然需要啟用除錯標誌才能觸發,但這充分說明了自動化檢測的價值——無需人工逐一審計,指令碼能在數秒內掃描數百個函式。

關鍵時刻

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 的組織必須立即修補。