自動化測試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的風險

[pastacode lang=”markup” manual=”%3Chtml%3E%0A%3Cbody%3E%0A%3Ciframe%20src%3D%22”’%2BURL%2B”’%22%20height%3D’500px’%20width%3D’600px’%3E%3C%2Fiframe%3E%0A%3C%2Fbody%3E%0A%3C%2Fhtml%3E” message=”” highlight=”” provider=”manual”/]

 

Python 範例小技巧

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

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

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

[pastacode lang=”python” manual=”import%20requests%0A%0Areq%20%3D%20requests.get(URL)%0Axframe%20%3D%20req.headers%5B’x-frame-options’%5D” message=”” highlight=”” provider=”manual”/]

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

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

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

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

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

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

 

範例程式

[pastacode lang=”python” manual=”import%20requests%0Afrom%20ghost%20import%20Ghost%0Aimport%20logging%0Aimport%20os%0A%0A%23%3Ciframe%20src%3D%22http%3A%2F%2Fusabledesigns.com%2Fdemo%2Fiframe-test%22%3E%3C%2Fiframe%3E%0A%0AURL%20%3D%20’http%3A%2F%2Fusabledesigns.com%2Fdemo%2Fiframe-test’%0AURL%20%3D%20’https%3A%2F%2Ftarget.com’%0A%0A%23def%20clickjack(URL)%3A%0A%0A%0Areq%20%3D%20requests.get(URL)%0A%0Atry%3A%0A%20%20%20%20xframe%20%3D%20req.headers%5B’x-frame-options’%5D%0A%20%20%20%20print%20’X-FRAME-OPTIONS%3A’%2C%20xframe%20%2C%20’present%2C%20clickjacking%20not%20likely%20possible’%0Aexcept%3A%0A%20%20%20%20print%20’X-FRAME-OPTIONS%20missing’%0A%0Aprint%20’Attempting%20clickjacking…’%0A%23clickjack(URL)%0A%0Ahtml%20%3D%20”’%0A%3Chtml%3E%0A%3Cbody%3E%0A%3Ciframe%20src%3D%22”’%2BURL%2B”’%22%20height%3D500px’%20width%3D’600px’%3E%3C%2Fiframe%3E%0A%3C%2Fbody%3E%0A%3C%2Fhtml%3E”’%0A%20%20%0Ahtml_filename%20%3D%20’clickjack.html’%0Alog_filename%20%3D%20’test.log’%0A%20%20%0Af%20%3D%20open(html_filename%2C%20’w%2B’)%0Af.write(html)%0Af.close()%0A%0Alogfilehandler%20%3D%20logging.FileHandler(log_filename)%0Aghost%20%3D%20Ghost(log_level%3Dlogging.INFO%2C%20log_handler%3Dlogfilehandler)%0Apage%2C%20resources%20%3D%20ghost.open(html_filename)%0A%20%20%0Al%20%3D%20open(log_filename%2C%20’r’)%0Aif%20’forbidden%20by%20X-Frame-Options.’%20in%20l.read()%3A%0A%20%20%20%20print%20’Clickjacking%20mitigated%20via%20X-FRAME-OPTIONS’%0Aelse%3A%0A%20%20%20%20href%20%3D%20ghost.evaluate(‘document.location.href’)%5B0%5D%0A%20%20%20%20if%20html_filename%20not%20in%20href%3A%0A%20%20%20%20%20%20%20%20print%20’Frame%20busting%20detected’%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20print%20’Frame%20busting%20not%20detected%2C%20page%20is%20likely%20vulnerable%20to%20clickjacking’%0Al.close()%0A%0Alogging.getLogger(‘ghost’).handlers%5B0%5D.close()%0Aos.unlink(log_filename)%0Aos.unlink(html_filename)” message=”” highlight=”” provider=”manual”/]

Leave a Reply

Your email address will not be published. Required fields are marked *