TryHackMe Fools Mate, Revenge | Prototype Pollution | Full Walkthrough 2026
三句話摘要
演示通過 JavaScript prototype pollution 漏洞繞過服務器端安全驗證的 CTF 挑戰解法。 當遇到被過濾的 JSON 端點時,prototype pollution 是在質量分配失效後值得嘗試的高級利用技巧,尤其是使用 `constructor.prototype` 來繞過 `__proto__` 的過濾。 防禦層級遷移:與前一個房間不同,驗證邏輯由服務器執行,服務器返回的錯誤訊息「session config and locked is not set」明確指出需要設置的變數,無法通過客戶端修改繞過。
重點整理
重點- 1
防禦層級遷移:與前一個房間不同,驗證邏輯由服務器執行,服務器返回的錯誤訊息「session config and locked is not set」明確指出需要設置的變數,無法通過客戶端修改繞過。
- 2
識別 JSON 端點漏洞:通過網絡流量檢查,發現偏好設置端點(preferences endpoint)接受 JSON 格式數據,嘗試在此端點進行質量分配攻擊,但被過濾。
- 3
Prototype pollution 替代方案:當質量分配失效時,利用 JavaScript 對象原型鏈特性,通過注入 `constructor.prototype` 來污染全局對象,使新屬性應用到所有對象實例。
- 4
繞過過濾的技巧:`__proto__` 語法被過濾,但 `constructor.prototype` 未被過濾,改用後者成功傳遞 payload 並修改應用行為。
實用技巧與重點
乾貨- 被驗證的變數:`locked`
- 需要設置的值:`true`
- 目標端點:偏好設置端點
- 被過濾的語法:`__proto__`
- 有效 payload 語法:`constructor.prototype.unlock=true` 或 `constructor.prototype.locked=true`
- 請求方式:POST JSON
- 服務器初始錯誤訊息:「reward gate closed, session config and locked is not set」
結論
結論“當遇到被過濾的 JSON 端點時,prototype pollution 是在質量分配失效後值得嘗試的高級利用技巧,尤其是使用 `constructor.prototype` 來繞過 `__proto__` 的過濾。”
完整解析
詳細這支影片演示的是一個網絡安全 CTF 挑戰的解決過程。講者首先通過檢查網絡流量發現,與前一個房間不同的關鍵差異在於防禦機制已經遷移到了服務器端。當他嘗試直接修改客戶端狀態時,服務器返回的錯誤訊息清楚地表示「session config and locked is not set」,這提示他需要以某種方式設置一個與 `locked` 相關的變數。
講者接著嘗試了最直接的攻擊方法——質量分配(mass assignment)。他在 API 請求中添加 `unlocked=true` 等參數,但服務器沒有接受。然後他發現應用中的偏好設置端點也使用 JSON 格式,他繼續在該端點上嘗試質量分配,但同樣被過濾。
當傳統方法失效時,講者轉向了 JavaScript 特定的高級漏洞——prototype pollution。他首先嘗試使用 `__proto__` 語法來污染原型鏈,但發現這個語法被過濾了。隨後他改用 `constructor.prototype` 的方式繞過過濾。通過構造 `constructor.prototype.unlock=true` 這樣的 payload,他成功地污染了全局 JavaScript 對象。當服務器處理了這個 payload 後,應用的行為發生了改變。講者重新加載頁面並發送請求,系統終於認可了變數已被設置,返回了成功訊息並授予了 flag。有趣的是,由於原型已被全局污染,即使重置遊戲狀態,每次都會自動獲得 flag。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

