駭客攻擊手法分享-什麼是跨站腳本攻擊(CROSS-SITE-SCRIPTING, XSS)?

什麼是 XSS?

跨站腳本攻擊 (Cross-Site Scripting, XSS),是一種注入型的攻擊型態。當存在這類型弱點,將可以使得任意 JavaScript 程式碼插入到網站頁面中執行以達到攻擊目的,通常攻擊者利用該網頁一些可以與使用者互動的功能如搜尋欄、登入介面等等在 HTML 頁面裡插入惡意程式碼,當使用者瀏覽該頁面時潛藏在 HTML 中的惡意程式碼即被執行從而達到攻擊者的特殊目的如 Cookie 竊取、鍵盤側錄等。

XSS 產生原因

形成 XSS弱點的主要原因是服務伺服器端程式對輸入和輸出之控制不夠嚴謹,以至於腳本輸入後再輸出到前端時被瀏覽器解析成程式碼的一部分執行並可能產生危害。

XSS 種類

1. Reflected XSS

為反射型之 XSS ,所謂反射型的意思是因為伺服器回傳的 HTML 資料中某些數據需透過 URL 中的查詢參數得來,就像在 URL 中輸入的資料會反射至回傳的 HTML 檔案中。以下XSS可能是駭客想執行的內容,如:跳出不雅圖片、假消息、跳轉至惡意或釣魚網頁,可能發生此種攻擊的位置如下:

HTML 的標籤之間,例如:{XSS}
HTML 的屬性,例如:< input name=”test” value=”{XSS}” >
HTML 中改變 URL,例如:< a href={XSS}>
CSS 的值,例如:color:{XSS}
JavaScript 中,例如:var name={XSS}

2. Stored XSS

為儲存型之 XSS ,所謂儲存型的意思是讓 JavaScript 可以儲存在網站資料庫中,例如無名小站的留言板,因此攻擊者若將惡意 JavaScript 程式碼透過留言板存進伺服器後端資料庫中,每當有使用者瀏覽該留言板,惡意程式碼將會從資料庫後端被撈出來並執行。因惡意程式碼存進資料庫每次瀏覽即執行,亦有持續型 XSS 一稱。

3. DOM Based XSS

DOM (Document Object Model) 為文件物件模型的縮寫,是把一份 HTML 文件內的標籤定義成物件。DOM 旨在規範一個標準使得不同公司可以按照規則設計瀏覽器,如此一來就不須用針對不同瀏覽器編寫不同的網頁程式。與前兩種 XSS 攻擊類型差別在於所填入的惡意程式碼是否在前端被渲染出來,而這類經由 JavaScript 在前端渲染所產生的 XSS 弱點被稱為 DOM Based XSS。

XSS 可以做到那些事

竊取 Cookie

攻擊者可在 JavaScript 中透過 document.cookie 取得 Cookie 訊息。
Cookie 通常被用來使網站辨認使用者身分,例如輸入帳號密碼登入 Facebook 成功後,下次訪問就會因為攜帶含有登入資訊的 Cookie 而不用再次登入驗證身分。因此當攻擊者取得合法使用者之 Cookie 後,以前述例子而言即可無需帳號密碼登入他人帳戶,再透過更改密碼取得該帳戶的使用權等等危害。

跳轉惡意網站

透過在網址列插入惡意 JavaScript 代碼使得訪問的網站被跳轉至惡意或釣魚網站,導致機敏資料洩漏等等。

鍵盤側錄

JavaScript 能做到的遠遠不止於此,其中強大的功能可以記錄使用者在瀏覽器的大部分操作,例如鍵盤側錄等等可將使用者的帳號密碼一覽無遺,XSS之危害以上僅僅是冰山一角,由上述可知這些攻擊對使用者的威脅非常高需要大家意識到且做好防範措施才可以避免後續造成的嚴重影響。

結語

我們從 HITCON ZeroDay 漏洞通報平台當中可查看過往已揭發漏洞的平台,經過篩選 XSS 類型裡面可以發現非常多的公司企業甚至教育學界、基金會等等諸多組織的系統皆有被揭露過此類型弱點,其中包括劍湖山、全家與台灣大學等等,另外從全球具有指標性的開放式網頁應用程式安全專案 (OWASP) 基金會對 XSS 弱點列為前十大資安問題中之第三名,可知這樣的攻擊已經淪為常態,也是很常見且容易被利用的弱點之一,因此開發時需更加注意此類型造成的危害。

 

資安廠商推薦: