2026-10-26
舊版 PHP 寫 Steal My Bitcoin 網站
挑戰全球黑白帽僅 20 小時失守 方法曝光
文: 編輯部 / 新聞中心
文章索引: IT快訊

【已攻破 😱】PHP 漏洞向來嚴重,專家甚至形容不盡快更新隨時引發災難,但偏偏有人不信邪,認為單憑 AI 挖掘出的漏洞只屬理論性質,在現實世界中極難實現。因此,有開發者特意架設名為「Steal my Bitcoin」的資安挑戰網站,將存有約 0.025 枚比特幣(價值逾 2,017 美元)的加密錢包私鑰置於伺服器中,公開向全球黑客與資安研究人員下戰帖,只要成功滲透並取得私鑰,即可全數奪走賞金。然而,這項挑戰最終不到 20 小時便告失守。

 

根據網站官方發布的最新公告,伺服器於 UTC 時間 10 月 25 日 15 時 47 分遭到突破。站方隨即確認獎金錢包已被清空,並幽默表示「目前伺服器內已無比特幣」,同時恭喜獲勝者。本次成功攻破挑戰的研究員「KillaBoi」隨後於 GitHub 公開了完整的技術分析報告與概念驗證(PoC),揭露整條攻擊鏈的核心漏洞細節。

 

根據獲勝者公布的攻擊細節,該挑戰伺服器環境架設於 Alpine Linux,後端採用 PHP 8.4.26 內建的 CLI 伺服器並配合 4 個工作程序(Worker),前端則透過 Nginx 進行反向代理。

 

研究人員並非以暴力方式破解私鑰,而是針對 PHP 底層的記憶體管理與會話(Session)解析機制展開精密攻擊:

 

1. 觸發記憶體溢出(OOM)殘留狀態︰攻擊者構造了一個約 250 KB 的 multipart/form-data 請求,利用 PHP_SESSION_UPLOAD_PROGRESS 解析時的深層巢狀陣列結構,使 PHP 在解析過程中消耗大量記憶體,迫使其觸發 128 MB 的記憶體上限(Fatal Error)。此舉導致該工作程序在異常中斷後殘留未清理的髒資料(Stale State),並於隨後被重複調度使用。

 

2. 洩漏 Heap 與程式碼基底位址(Bypass ASLR)︰透過向該殘留狀態的工作程序發送精心構造的後續請求,攻擊者成功誘發伺服器回傳長度異常的 PHPSESSID Cookie。從 Cookie 洩漏的記憶體字元中,研究員成功逆向計算出 Zend 引擎的 Heap 基底位址以及關鍵函數指標(zval_ptr_dtor),順利突破伺服器的 ASLR(位址空間配置隨機化)防禦。

 

3. 偽造 HashTable 劫持執行流程:在取得精確的記憶體佈局後,攻擊者最後發送一個包含偽造 PHP HashTable 結構的 POST 請求。在 PHP 進行物件資源回收清理程序時,執行流程被直接導向內部系統呼叫 zif_system,達成遠端程式碼執行(RCE),進而執行伺服器上的提權程序,讀取存放於本機的比特幣私鑰並完成轉帳。

 

根據公布的概念驗證程式,攻擊亦針對加密貨幣交易的常見習慣展開。許多用戶在轉帳時,為免手動輸入長達數十個字元的錢包地址出錯,普遍習慣直接複製貼上。攻擊者正是利用此操作盲點,透過背景程序持續監聽作業系統的剪貼簿內容。

 

值得注意的是,研究員「KillaBoi」全程僅透過約 20 次 HTTP 請求,便完成偵測、位址洩漏與最終漏洞利用,過程完全無需反覆重試或暴力碰撞。開發者在挑戰結束後感謝所有參與的開發者與資安研究員,並表示未來可能會再推出新的防禦挑戰;官方同時透露正撰寫關於此次挑戰賽的完整架構檢討報告,供技術社群參考借鏡。

 

 

 

資料來源: