自動化測試ClickJacking的Python範例程式

如何自動化測試ClickJacking

Image result for clickjacking

這篇文章主要說明如何用一個簡單的Python程式

自動化測試給定的網站是否有ClickJacking的安全風險

什麼是 ClickJacking?

簡單來說 ClickJacking比較像是複寫紙的概念

簽名時看到的是請假單. 可是背後卻是一張鉅額的借據

因此使用者在不知情的情況下, 以為是請假單點選 事實上是點選背後的借據

如何防護 ClickJacking

最簡單的方式就是每個頁面加上 X-FRAME-OPTIONS

如何檢測 ClickJacking

因此要如何判斷該網站是否有 clickjacking 的風險呢? 我們必須進行兩種檢查

  • 檢查網頁的 Http Header是否有 X-FRAME-OPTIONS
  • 用一個測試網頁  利用iFrame的方式瀏覽該網站 可以瀏覽成功表示該網站有ClickJacking風險

ClickJacking測試用HTML

可以用下列HTML 儲存為 ClickJack.HTML

URL 為目標測試網站, 用瀏覽器啟動

如果瀏覽器啟動後可以看到目標網站的內容, 則該網站具有 ClickJacking的風險

<html>
<body>
<iframe src="'''+URL+'''" height='500px' width='600px'></iframe>
</body>
</html>

 

Python 範例小技巧

要如何用Python 完成該檢查呢?

首先我們利用 requests 這個模組, 幫我們取得網站內容

判斷回覆的 Http header 中是否包含 x-frame-options

import requests

req = requests.get(URL)
xframe = req.headers['x-frame-options']

接著, 要如何才能夠啟動上述的 ClickJacking網站檢查網頁內容呢?

這邊介紹一個簡單的方式 ghost

利用Ghost這個模組來幫我們啟動HTML檢查啟動後結果

怎麼檢查呢? 其實只需要檢查網頁URL 是否有出現在 Page Title即可

如果網頁開啟之後  網站可以順利瀏覽  Page Title 會出現該網站的URL

http://jeanphix.me/Ghost.py/

 

範例程式

import requests
from ghost import Ghost
import logging
import os

#<iframe src="http://usabledesigns.com/demo/iframe-test"></iframe>

URL = 'http://usabledesigns.com/demo/iframe-test'
URL = 'https://target.com'

#def clickjack(URL):


req = requests.get(URL)

try:
    xframe = req.headers['x-frame-options']
    print 'X-FRAME-OPTIONS:', xframe , 'present, clickjacking not likely possible'
except:
    print 'X-FRAME-OPTIONS missing'

print 'Attempting clickjacking...'
#clickjack(URL)

html = '''
<html>
<body>
<iframe src="'''+URL+'''" height=500px' width='600px'></iframe>
</body>
</html>'''
  
html_filename = 'clickjack.html'
log_filename = 'test.log'
  
f = open(html_filename, 'w+')
f.write(html)
f.close()

logfilehandler = logging.FileHandler(log_filename)
ghost = Ghost(log_level=logging.INFO, log_handler=logfilehandler)
page, resources = ghost.open(html_filename)
  
l = open(log_filename, 'r')
if 'forbidden by X-Frame-Options.' in l.read():
    print 'Clickjacking mitigated via X-FRAME-OPTIONS'
else:
    href = ghost.evaluate('document.location.href')[0]
    if html_filename not in href:
        print 'Frame busting detected'
    else:
        print 'Frame busting not detected, page is likely vulnerable to clickjacking'
l.close()

logging.getLogger('ghost').handlers[0].close()
os.unlink(log_filename)
os.unlink(html_filename)

Leave a Reply

Your email address will not be published.