B. AJAX Security

AJAX Security   

edit by 鄭仲倫(Chung-Lun Cheng)、李昂縣


內容綱要

 

一、Ajax簡介

 

二、技術內容

1.LAB: DOM-Based cross-site scripting

2.DOM Injection

3.LAB: Client Side Filtering

4.Same Origin Policy Protection

5.XML Injection

6.JSON Injection

7.Silent Transactions Attacks

8.Insecure Client Storage

9.Dangerous Use of Eval

 

三、開發Ajax的10大守則

 

四.心得

 


  

一、  AJAX 簡述

 

AJAX 是 Asynchronous JavaScript And XML 的簡寫,綜合多項技術的瀏覽器端網頁開發技術。主要目的在於提高網頁的互動性(interactivity),速度(speed),以及可用性(usability)。AJAX被大量的應用於 Google 的網頁之後,如 Gmail、Google Maps 等內容後才逐漸受到重視。



優點:

1.在不更新(重新載入)整個網頁內容的狀態下維護資料。這使得Web應用程式更為迅捷地反應,並避免了在網路上發送那些沒有改變的信息。

2.不需要任何瀏覽器套件,但需要使用者允許JavaScript在瀏覽器上執行。



 

 


 

二、技術內容

1.LAB: DOM-Based cross-site scripting

【主題簡述】

XSS 全名是 Cross Site Scripting ,也就是跨網站腳本攻擊,就是在第三方的網站中植入有轉址的語法,將被害人導至有毒的網頁,或是將有害的程式,殖入第三方的網頁中,再讓受害人不知不覺的進入該網頁,盜取其個人資料,如照片、隱私、信用卡等等

【技術原理】利用DOM架構進行程式碼的寫入XSS攻擊

【任務內容】根據提示內容,破解五道關卡。

【提示】利用<img>及<iframe>等DOM架構寫入程式碼

【使用工具】Notepad++、網頁直接操作

【完成步驟】

分為五大部分

STAGE 1: For this exercise, your mission is to deface this website using the image at the following location: OWASP IMAGE

答案:        <img src="images/logos/owasp.jpg"/>

 

 

 

STAGE 2: Now, try to create a JavaScript alert using the image tag

答案: <img src=test onerror="alert('lib')"/>

 

 

STAGE 3: Next, try to create a JavaScript alert using the IFRAME tag.

答案: <iframe src=javascript:alert('lib') ></iframe>

 

 

STAGE 4: Use the following to create a fake login form:

Please enter your password:<BR><input type = "password" name="pass"/><button onClick="javascript:alert('I have your password: ' + pass.value);">Submit</button><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>

然後任意輸入密碼

 

STAGE 5: Perform client-side HTML entity encoding to mitigate the DOM XSS vulnerability. A utility method is provided for you in escape.js.

更改.extract\webapps\WebGoat\lessonJS的DOMXSS.js(加上紅色部分)

function displayGreeting(name) {

if (name != ''){

document.getElementById("greeting").innerHTML="Hello, " + escapeHTML(name)+ "!";

}

}

 

 


 2.DOM Injection()

【主題簡述】

DOM 的全名為 Document Object Model ,中文稱之為文件物件模型,這是 W3C 組織所推廣的標準。基本上 DOM 屬於 JavaScript 的介面標準,各種瀏覽器如 Firefox 、 Chrome 、 Opera 、 Safari 與 IE 等都依此標準建置實際的物件,使 JavaScript 程式可以直接利用。

【技術原理】

一些應用程式專門使用AJAX操控和更新在DOM中能夠直接使用的的JavaScript,DHTML和的eval()方法。攻擊者可能會利用這一點,通過攔截答覆,注入一些JavaScript的命令,實施攻擊。

【任務內容】

*輸入驗證碼

*啟動Activate按鈕

【提示】

1.This page is using XMLHTTP to comunicate with the server.

2.Try to find a way to inject the DOM to enable the Activate button.

3.Intercept the reply and replace the body with document.form.SUBMIT.disabled = false;

【使用工具】

Firebug

【完成步驟】

1.檢查html發現在 Activate按鈕中input型態設定為disabled。

2.將其disabled去除,即可過關。

3.過關畫面。








3.LAB: Client Side Filtering  

【主題簡述】用戶端篩選器是可以選擇呈現資料的控制器,用戶透過此功能獲得所想了解的資料。

【技術原理】利用用戶端控制選項(例如下拉式選單等)蒐集資料,進而入侵

【任務內容】根據提示,破解兩道關卡。

此項內容是一個含有下拉是選單的查詢系統,可以根據人名查詢其ID、SSN及薪水等資料。

提示】控制項資料蒐集

使用工具

Google Chrome  開發人員工具
Notepad++

完成步驟

STAGE 1:

題目:What is Neville Bartholomew's salary?

答案:450000

利用網頁開發工具 -> network -> XHR -> 了解Filter利用到的檔案

發現在這個檔案clientSideFiltering.jsp中記載答案


STAGE 2: Now, fix the problem. Modify the server to only return results that Moe Stooge is allowed to see.

題目:修復這個漏洞

答案:在路徑上加上[Managers/Manager/text() = "+userid+"]

將.extract\webapps\WebGoat\lessons\Ajax中clientSideFiltering.jsp修改

修改後,在顯示部分只會顯示塞選器所選擇ID的內容,而不會顯示所有資料。

 

修改前

修改後

 

 


 4.Same Origin Policy Protection

主題簡述】同源策略保護

同源策略是客戶端腳本(尤其是Javascript)的重要的安全標準。它最早出自Netscape Navigator2.0,其目的是防止某個文檔或腳本從多個不來源執行。

這裏的同源指的是:同協議,同域名和同端口。

同源策略(Same Origin Policy,SOP),也稱爲單源策略(Single Origin Policy),它是一種用于Web瀏覽器覽程式語言(如JavaScript和Ajax)的安全措施,以保護資訊的保密性和完整性。同源策略能阻止網站腳本訪問其他站點使用的腳本,同時也阻止它與其他站點腳本互相傳遞交流。

技術原理

只允許來自同源的程式碼,以避免駭客利用漏洞撰寫程式碼連結外部網站程式碼以進行侵入。

任務內容

了解同源及非同源URL所帶來的Response有何差異。進而了解此項功能的作用。

提示】點選連結嘗試內外部URL所獲的回應

【完成步驟

點下方兩個連結

點選

Click here to try a Same Origin request:

lessons/Ajax/sameOrigin.jsp

會自動帶入來自同來源網站的URL

並獲得回應

點選

Click here to try a Different Origin request:

http://www.google.com/search?q=aspect+security

則會帶入外部網站的URL

結果是無法連結

 


 5.XML Injection  

主題簡述

可延伸標記式語言(英語:eXtensible Markup Language,簡稱: XML),是一種標記式語言。標記指電腦所能理解的資訊符號,通過此種標記,電腦之間可以處理包含各種資訊的文章等。如何定義這些標記,既可以選擇國際通用的標記式語言,比如HTML,也可以使用像XML這樣由相關人士自由決定的標記式語言,這就是語言的可延伸性。XML是從標準通用標記式語言(SGML)中簡化修改出來的。它主要用到的有可延伸標記式語言、可延伸樣式語言(XSL)、XBRL和XPath等。

技術原理

AJAX應用程式使用XML與服務端進行訊息交換。但該XML內容能夠被非法用戶輕易攔截並篡改。

任務內容

情境敘述:WebGoat‐Miles 的Miles 獎勵顯示了所有的獎金。利用ID 836239成功系統後會取顯示帳號餘額以及可購商品,任務為為自己獲得更多的獎勵。

提示

1.This page is using XMLHTTP to comunicate with the server.

2.Try to intercept the reply and check the reply.

3.Intercept the reply and try to inject some XML to add more rewards to yourself.

【使用工具】

burp suite

完成步驟】

1.輸入ID836239,選擇獎勵,按下submit。

2.按下submit後,從burp suite攔截內容發現有check1001、check1002、check1003的資訊。

3.在攔截的內容中新增check1004、check1005後送出。

 

4.過關畫面。




 


 6.JSON Injection

主題簡述】

JSON(JavaScript Object Notation)是一種由道格拉斯·克羅克福特構想設計、輕量級的資料交換語言,以文字為基礎,且易於讓人閱讀。儘管JSON是Javascript的一個子集,但JSON是獨立於語言的文字格式,並且採用了類似於C語言家族的一些習慣。

【技術原理】

JSON 廣泛應用於 AJAX 和 web2.0 應用。相比XML,JSON 得到程式設計者的青睞,因為它使用更簡單,速度更快。但是與XML一樣容易受到注入攻擊,惡意攻擊者可以通過在請求回應中注入任意值。

【任務內容

輸入由Boston(機場代碼BOS)飛往Seattle(機場代碼SEA)的機場代號。

瀏覽器會由客戶端請求航班與機票價格,資料回傳後會發現有轉機兩次的航班以及直飛航班,任務為使用更便宜的價格購買直飛航班的機票。

【提示】

1. JSON stands for JavaScript Object Notation.

2.JSON is a way of representing data just like XML.

3.The JSON payload is easily interceptable.

4.Intercept the reply, change the $600 to $25.

【使用工具】

burp suite

【完成步驟】

1.輸入起降機場代號,點選第一個radio,後點選submit送出。

 

 

2.在burp suite攔截的內容發現%24600,其意為$600。



3.在攔截內容中將%24600改為%2425($25)後送出,完成任務

 

4.任務完成畫面。

 

 


 7.Silent Transactions Attacks  

【技術原理】

對客戶端來說,任何一個靜默交易攻擊,使用單一提交的系統都是有危險的。舉例來說, 如果一個正常的web 應用允許一個簡單的URL提交,一個預設會話攻擊將允許攻擊者在沒有用戶授權的情況下完成交易。在Ajax裡情況會變得更糟糕:交易是不知不覺的,不會在頁面上給用戶反饋,所以注入的攻擊腳本可以在用戶未授權的情況下從客戶端把錢偷走。 

【任務內容】

網頁內容為一個銀行轉帳頁面,顯示目前金額及轉帳對象帳戶等資訊,該應用程式在基本驗證後傳送轉帳要求,任務為繞過基本驗證的內容,直接執行轉帳。

【提示】

1.Check the javascript in the HTML source.

2.Check how the application calls a specific javascript function to execute the transaction.

3.Check the javascript functions processData and submitData()

4.Function submitData() is the one responsible for actually ececuting the transaction.

5.Check if your browser supports running javascript from the address bar.

6.Try to navigate to 'javascript:submitData(1234556,11000);'

使用工具】

Firebug

【完成步驟】

1.任務畫面,可輸入轉帳帳戶。



2.利用firebug檢閱原始碼發現confirm按鈕連結函數為processData()。

 

 

 

 

 

3.將confirm按鈕的連接改為submitData(1234556,11000),繞過客戶端驗證直接進行交易。

 

 

4.任務完成畫面。

 

 

 


 8.Insecure Client Storage

【主題簡述】用戶端不安全的儲存

意指敏感性資料未受到適當的保護,一般常見如敏感性資料未加密,或是一些不常用到的暫存資料可能含有敏感訊息(例如:登入帳號與密碼),可能會造成機密性資料損失、憑證外洩、侵犯隱私權等衝擊。

【技術原理】

客戶端HTML 和JavaScript 語句可以對網頁內容、形式做修改,如隱藏、控制讀寫、限制長度等。同樣,通過修改網頁原始碼也能解除此類限制。

【任務內容

任務一:尋找優惠碼

任務二:送出免費訂單

【提示】

1.Use Firebug to examine the JavaScript.

2.Using Firebug, you can add breakpoints in the JavaScript.

3.Use Firebug to find the array of encrypted coupon codes, and step through the JavaScript to see the decrypted values.

4.You can use Firebug to inspect (and modify) the HTML.

5.Use Firebug to remove the 'readonly' attribute from the input next to 'The total charged to your credit card:' and set the value to 0.

【使用工具】

Firebug、google開發人員工具

【完成步驟】

1.任務畫面。

2.讀取原始碼後發現在優惠碼欄位中連結的javascript,細讀後發現優惠碼為陣列中的內容。

 

 

 

 

3.利用google開發人員工具在指令列中輸入decrypt("sfwmjt")後產生結果為SILVER。

 

 

 

 

4.輸入SILVER後通過第一階段。

 

5.第二階段,在數量欄位隨意輸入。

6.檢視原始碼發現上述內容。

 

7.將上述內容readonly修除及金額修正為0。

 

 

8.任務完成畫面。





 


9. Dangerous Use of Eval

【主題簡述】

未經驗證的使用者使用JavaScript的eval()函數,達到惡意目的,達成XSS攻擊。

【技術原理】

HTML 網頁有一系列的HTML 編輯語言和字元組合完成。在原始法中任意位置添加程式碼都有可能讓瀏覽器解析,進而造成類似XSS的攻擊。

【任務內容】

利用特殊輸入方式,在應用程式中執行惡意內容,本任務要求使用alert()函數顯示出 document.cookie。

【提示】

1.The lesson is similar to the standard reflected cross-site scripting lesson.

2.The access code parameter is vulnerable to a reflected cross-site scripting problem.

3.The usual <SCRIPT>alert(document.cookie);</SCRIPT> will not work in this lesson. Why?

4.User-supplied data is landing in the Javascript eval() function. Your attack will not require 5.the < and > characters.

6.In order to pass this lesson, you must 'alert' the document.cookie.

7.Try 123');alert(document.cookie);('

【使用工具】

網頁直接操作。

完成步驟】

1.於access code 中輸入123');alert(document.cookie);('完成任務。

 

2.任務完成畫面。

 


 

開發Ajax的10大守則


1.前、端後都要做好安全的把關工作
2.盡量以HTTP POST方法傳輸資料
3.不要直接用eval函式喚起JSON物件
4.限制使用者可用的HTML語法
5.禁止可留言的網頁頁面使用JavaScript語法
6.使用Ajax框架,必須注意安全性問題
7.讓使用者知道自己身處的狀況
8.保持小量傳輸
9.注意易用性與內容的平衡
10.優雅降級原則

http://ithelp.ithome.com.tw/question/10000126?tag=rt.rq

 

防範方式:

1.資料處理前加密

2.僅允許特定語法,避開可能造成攻擊的語法使用

3.客戶端、伺服器端驗證

 

三、心得

鄭仲倫:

這次ajax security 的操作其實花費不少的時間,雖然有提示,但有的時候提示會讓人陷入一個死胡同,所以常常會去尋找其他資源輔助,同時在firebug的部分花了一些時間學習操作,但是這樣一系列的操作下來,感覺非常充實,且深知自己仍然不足,對於相關領域有興趣,要花費更多的時間去學習,鑽研。未來也希望能夠持續接觸資訊安全的相關議題與技術,在觀念與技術面上都學到東西。因此這次的主題內容完成後,我還是會督促自己去完成webgoat其他單元的內容,提高本質學能。

 

李昂縣:

這次實際操作WebGoat的AJAX Security部分,雖然過程中碰到一些困難,但自己摸索和上課有老師教的狀況不同,必須自己去了解題目的內容跟去學習會用到的觀念,像是在AJAX這個部分,我原先只了解一些,但破關後對AJAX有更深的了解。也發現自己對於這些架構原理認識的不足,只能做中學、學中做,幸好現在網路資源豐富,能找到很多有用的資源供我學習。


本篇內容之截圖來自於webgoat6.0版本之內容畫面及操作工具之畫面,其僅用於課程學習之用。
觀念參考維基百科相關主題,以力求完備。
如有未盡之處,還請提供意見修正。