點擊劫持漏洞之理解 python打造一個挖掘點擊劫持漏洞的腳本


前言:

放假了,上個星期剛剛學習完點擊劫持漏洞。沒來的及寫筆記,今天放學總結了一下

並寫了一個檢測點擊劫持的腳本。點擊劫持腳本說一下哈。= =原本是打算把網站源碼

中的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()

測試結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM