• 如何自動化測試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)

    Posted by Tony @ 6:25 am

  • Leave a Reply

    Your email address will not be published.