點擊劫持(ClickJacking)漏洞挖掘及實戰案例全匯總
- 2019 年 10 月 10 日
- 筆記

1、漏洞理解
點擊劫持(Click Jacking)是一種視覺上的欺騙手段,攻擊者通過使用一個透明的iframe,覆蓋在一個網頁上,然後誘使用戶在該頁面上進行操作,通過調整iframe頁面的位置,可以使得偽造的頁面恰好和iframe里受害頁面里一些功能重合(按鈕),以達到竊取用戶信息或者劫持用戶操作的目的。
Clickjacking是僅此於XSS和CSRF的前端漏洞,因為需要誘使用戶交互,攻擊成本高,所以不被重視,但危害不容小覷,攻擊效果見案例。
2、漏洞原理
對於漏洞的防範大部分瀏覽器支持的防禦辦法是使用X-Frame-Options頭,通常設置為DENY可以很好地防範漏洞,其次SAMEORIGIN可以在某個頁面失守時被繞過,ALLOW-FROM uri不被Chrome支持。其次還有CSP頭:Content-Security-Policy: frame-ancestors 'self'僅支持FireFox。
也就是說,如果發現系統沒有設置上述頭,大概率存在ClickJacking漏洞,測試方法很簡單,本地構造一個HTML文件,使用iframe包含此頁面:

若返回拒絕請求,則不存在問題,控制台提示已設置X-Frame頭故引用網站失敗:

3、實戰案例:
1) Twitter Clickjacking($1120)
Twitter的子域Periscope設置頁面存在敏感信息,且未設置X-Frame頭,構造HTML使用iframe包含此頁面:

可正常顯示頁面內容:

進一步可精心設置iframe的位置等進行攻擊,這個漏洞被獎勵了1120刀。
2)$1800 worthClickjacking
在一些常見的端點返回用戶的敏感信息,如
https://example.com/api/v1/wallet/payments?language=en返回的是用戶錢包信息,查看返回包里沒有設置X-FRAME頭,構造一個劫持頁面:

HTML文件內容為:

偽造的頁面引導受害者進行一系列操作,完成之後他的敏感信息將被記錄在console控制台里。

另一個類似的進階利用是結合CSRFToken的竊取:

誘使攻擊者將響應(包含CSRFToken)粘貼到表單里,使用js調用發包,更新受害者的個人信息:

4、漏洞挖掘
漏洞挖掘思路較為簡單,觀察業務系統中重要操作,返回包里是否有X-FRAME頭或CSP頭,若不存在則嘗試使用iframe包含此鏈接,若框架內能正常顯示鏈接的內容,則存在點解劫持風險。

5、漏洞防禦
主要有三種防禦辦法:
1)X-Frame-Options,建議設置為DENY;
2)Content-Security-Policy:frame-ancestors 'self'或『none』,不適用於Safari和IE;
3)js層面:使用iframe的sandbox屬性,判斷當前頁面是否被其他頁面嵌套。
當前最推薦的方案是1和3結合防禦,深入了解可以閱讀原文,下載斯坦福大學對此漏洞的研究論文。