iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 9
2
自我挑戰組

到處挖坑,現在該來還(填)願(坑)ㄌ !!!系列 第 9

『 Day 9 』Web Security - A7 . Cross-Site Scripting (XSS) - 上篇

A7 - Cross-Site Scripting(XSS) 跨站攻擊

XSS 俗稱 JavaScript Injection ,顧名思義就是讓攻擊者執行惡意的 javascript,以達成其目的。事實上也包括 Java、VBScript、ActiveX、Flash,甚至是 HTML 等。

https://ithelp.ithome.com.tw/upload/images/20190921/201150607Xgbm7RC3G.png

XSS 是一種繞過 SOP 概念的方法,透過注入惡意程式指令的方式的方式,使得使用者在訪問該網頁時,同時會執行該惡意程式碼。這將可能導致攻擊者可擷取使用者的私密網頁內容、對談或是透過擷取 Cookie 或 Session 資料而假冒使用者為合法使用者等。

主要分為以下三種:

1. Stored XSS (儲存型)

遭到被保存在伺服器資料庫中的 JavaScript 代碼引起的攻擊

Stored XSS 就是讓 JavaScript 可以儲存在網站資料庫中,最常見的例子就是網站留言板或是訊息。

由於留言板的各式較無限制,因此駭客就可以把程式碼放在留言板中,等待下一個瀏覽該留言板的受害者。

https://ithelp.ithome.com.tw/upload/images/20190922/20115060ixd7U2l8Jv.png

攻擊步驟:
  1. 攻擊者將惡意代碼提交到目標網站的數據庫中。
  2. 用戶打開目標網站時,網站服務端將惡意代碼從數據庫取出,拼接在HTML 中返回給瀏覽器。
  3. 用戶瀏覽器接收到響應後解析執行,混在其中的惡意代碼也被執行。
  4. 惡意代碼竊取用戶數據並發送到攻擊者的網站,或者冒充用戶的行為,調用目標網站接口執行攻擊者指定的操作。

2. Reflected XSS (反射型)

網站會反應使用者所輸入的 URL(含 JavaScript 代碼)引起的攻擊

當攻擊者發現某個網站可以執行預期的惡意程式碼時,攻擊者就可以把受害 (被植入 JavaScript)網站的 URL 透過釣魚的方式或是郵件傳送給被害人。當被害人點擊該 URL時,就會看到且執行該 JavaScript。由於需要用戶主動打開惡意的URL 才能生效,攻擊者往往會結合多種手段誘導用戶點擊。

https://ithelp.ithome.com.tw/upload/images/20190922/20115060eqqWfMAdZ6.png

攻擊步驟:
  1. 攻擊者構造出含惡意代碼的 URL。
  2. 使用者打開帶有惡意代碼的 URL 時,網站服務端將惡意代碼從 URL 中取出並拼接在 HTML 中返回給瀏覽器。
  3. 用戶瀏覽器接收到響應後解析執行,混在其中的惡意代碼也被執行。
  4. 惡意代碼竊取用戶數據並發送到攻擊者的網站,或者冒充用戶的行為,調用目標網站接口執行攻擊者指定的操作。

3. DOM-Based XSS

網頁javascript在執行過程中,沒有詳細檢查資料使操作DOM的過程中帶入惡意的指令

DOM 全稱為 Document Object Model,用以描述 HTML 文件的表示法,它讓我們可以使用 JavaScript 動態產生完整的網頁,而不必透過伺服器。

https://ithelp.ithome.com.tw/upload/images/20190923/20115060NaW0Dp39rZ.png

攻擊步驟:
  1. 攻擊者構造出特殊的 URL,其中包含惡意代碼。
  2. 用戶打開帶有惡意代碼的 URL。
  3. 網站回應不包含惡意字串的 Response
  4. 用戶瀏覽器接收到響應後解析執行,前端 JavaScript 取出 URL 中的惡意代碼並執行。
  5. 惡意代碼竊取用戶數據並發送到攻擊者的網站,或者冒充用戶的行為,調用目標網站接口執行攻擊者指定的操作。

如下程式碼:

<script>

function cat() {
    var str = document.getElementById("meow").value;
    document.getElementById("cats").innerHTML = "<a href='" + str + "' >Meowiscute</a>";
}

</script>

<div id="cats"></div>
<input type="text" id="meow" value="" />
<input type="button" id="s" value="write" onclick="cat()" />

在這裡,"write"按鈕的 onclick 事件使用了 cat() 函數。而在 cat() 函數中,修改了 DOM 節點,通過 innerHTML 把一段用戶資料當作 HTML 寫入到頁面中,這就造成了 DOM-Based XSS

組織如下語句:

' onclick=alert(/xss/)//

輸入後,頁面程式碼就變成了:

<a href='' onclick=alert(/xss/)//'>Meowiscute</a>

首先,我們先將 href 的第一個單引號用'閉合掉,然後插入一個 onclick 事件
最後再用//註釋掉第二個單引號。

最後腳本執行
https://ithelp.ithome.com.tw/upload/images/20190923/201150603hBHZlVxkj.png

DOM 型XSS 跟前兩種XSS 的區別:DOM 型XSS 攻擊中,取出和執行惡意代碼由瀏覽器端完成,屬於前端JavaScript 自身的安全漏洞,而其他兩種XSS 都屬於服務端的安全漏洞。

.
.
.

好喔 今天先到這裡,明天我們再繼續,絕對不是因為我參加 DEVCORE ,所以沒時間寫文章的喵。

ฅ●ω●ฅ


上一篇
『 Day 8 』Web Security - A6 . Security Misconfiguration
下一篇
『 Day 10 』Web Security - A7 . Cross-Site Scripting (XSS) - 下篇
系列文
到處挖坑,現在該來還(填)願(坑)ㄌ !!!30

1 則留言

0
阿展展展
iT邦好手 1 級 ‧ 2020-01-31 00:23:15

好可愛的圖XD

我要留言

立即登入留言