Beyond XSS 6-1~6-5 #6
Yo0GuitarIT
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Beyond XSS 6-1~6-5
Case study - 有趣的攻擊案例分享
6-1 差一點的 Figma XSS
章節回顧
1. 在 Figma 的 XSS 漏洞中,為何即使開發人員沒有將惡意內容插入 document,仍然會觸發 onerror 事件?
由於 innerHTML 的隱藏機制
即使 div 沒有插入到 document,瀏覽器仍然會嘗試載入圖片,並執行 onerror 事件處理程序!
也就是說,只要有一瞬間,攻擊者的輸入被放進 innerHTML,XSS 就可以被觸發。
2. Figma 在這次 XSS 測試中為何沒有真正被攻破,僅獲得「差一點成功的 XSS」回報?
Figma 的 CSP(內容安全政策)救了它:
沒有 unsafe-inline,所以即使成功觸發 onerror,XSS 還是無法真正執行惡意腳本。
6-2 繞過層層防禦:Proton Mail XSS
章節回顧
1. Proton Mail 的 XSS 漏洞是如何成功繞過原本的 DOMPurify sanitization?
由於不同於 HTML,SVG 解析方式不同,導致兩段程式碼解析結果完全不同
在
<div>
中:在
<svg>
中:瀏覽器解析:
<div>
瀏覽器解析<style>
:<a>
會被當成普通文字。<svg>
瀏覽器解析<style>
:<a>
會被當成標籤。利用
<style>
內的屬性來,逃逸出原本的 HTML 限制,原本應該被當成 ID 屬性的內容,卻變成了一個<img>
標籤,成功 XSS。2. 在 Proton Mail 的攻擊鏈中,結合那些攻擊?
✅ Sanitization Bypass(SVG 解析異常)
✅ Sandbox Bypass(新開視窗逃逸)
✅ CSP Bypass(Blob URL 內容檢查疏漏)
✅ CSS Injection(洩漏 Blob URL)
6-3 隱藏在 Payment 功能中的 Chrome 漏洞
章節回顧
1. 為什麼 Chrome 的 Payment Request API 會導致 XSS 漏洞?
瀏覽器收到 Payment Request API 的請求時,會去解析 金流服務的 URL,並且搜尋 manifest 檔案,這個過程包含以下步驟:
如果攻擊者可以控制這些 JSON 檔案,就能偷偷註冊惡意的 service worker!
讀取
Link header
,獲取payment-manifest.json
讀取
app_manifest.json
,找到service worker
透過
service worker
控制付款流程2. 攻擊者如何利用 Payment Request API 來執行 XSS?
攻擊者上傳三個 JSON 檔案與 service worker 到開放上傳的網站
(files.example.com):manifest.json / app_manifest.json / sw.js(惡意 Service Worker)。
在惡意網站上 發送 Payment Request API 請求,指向
https://files.example.com/huli123/manifest.json
。瀏覽器誤以為這是一個正常的支付請求,開始載入這些檔案。
瀏覽器安裝攻擊者的 惡意 Service Worker,攻擊者即可攔截請求,並回傳 任意 JavaScript,觸發 XSS。
6-4 從 Prototype Pollution 到 Bitrix24 XSS
章節回顧
1. Bitrix24 的 XSS 漏洞是怎麼產生的?
// Todo: Answer
2. 在 Bitrix24 XSS 漏洞中,攻擊者如何進一步擴大影響?
// Todo: Answer
6-5 PHP 底層 bug 引發的 Joomla! XSS
章節回顧
1. Joomla! 的 XSS 漏洞是如何發生的?
處理多字節字串(像是中文、日文)時,會使用
mb_
系列函式,因為像substr()
這種函式是以byte
為單位,可能會截斷UTF-8
字元,導致亂碼問題。如果字元編碼不合法,不同的函式會有不同的處理方式。
mb_strpos()
會忽略錯誤的UTF-8
字元,因此它認為 < 在 第六個字mb_substr()
直接把錯誤的UTF-8
當作合法字元處理,所以 < 變成了第五個字錯誤的
mb_substr()
會取出未經處理的<
,導致 XSS。2. Joomla! 最後是如何修復這個漏洞的?
1️. Joomla! 修復方式:
改用
strpos()
和substr()
,避免 mb_ 函式的不一致性2️. PHP 修復方式:
修正
mb_substr()
的行為,讓它與mb_strpos()
一致,確保不會誤判字串長度問題不在
Joomla!
本身,而是在 PHP 的底層實作,所以 PHP 官方也發布了更新修復這個問題!討論
1.Payment Request API 的安全漏洞解析
漏洞原理
攻擊手法詳解
前提條件
攻擊流程
在 victim.com 上傳兩個檔案:
從任意網站發起攻擊:
攻擊特點
安全修復方案
URL 編碼與 API 參數處理
常見問題
&
字元會被誤解為新參數的分隔符+
字元會被解析為空格/
字元在某些情況下需要編碼範例說明
未編碼的問題
正確處理方式
URL 編碼對照
&
→%26
+
→%2B
/
→%2F
%20
或+
最佳實踐
使用現成的 HTTP 客戶端(如 axios)
如果要手動處理
encodeURIComponent()
這樣的處理可以避免因特殊字元造成的參數解析錯誤,確保 API 呼叫的正確性。
Beta Was this translation helpful? Give feedback.
All reactions