【35】WEB安全學習----XST攻擊
本章為知識擴充部分,此攻擊現瀏覽器已不支援傳送TRACE請求,故只需要瞭解攻擊原理即可。
XST攻擊原理
"Cross-Site-Tracing"簡稱為XST,如果開發者在設定cookie屬性時配置了httponly屬性,那麼通過XSS攻擊就無法讀取cookie資料,那麼如果伺服器支援TRACE請求並且允許跨域的話,那麼還是可以讀取到cookie資料的。
要想理解XST攻擊,首先需要了解以下技術:
一、AJAX
AJAX = 非同步 JavaScript 和 XML,是一種用於建立快速動態網頁的技術,通過在後臺與伺服器進行少量資料交換,AJAX 可以使網頁實現非同步更新。這意味著可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新。現目前瀏覽器已不支援傳送其他請求方法。
var xmlhttp;
var result;
xmlhttp=new XMLHttpRequest(); //建立物件
xmlhttp.open(method,url,async); //設定傳送請求 method只支援POST和GET
xmlhttp.send(); //傳送請求
result=xmlhttp.responseText; //獲取響應結果
二、TRACE請求
TRACE是用來除錯web伺服器連線的HTTP方式,該方法會使伺服器原樣返回任意客戶端請求的任何內容,我們知道,在傳送請求時,瀏覽器會自動附帶cookie進行提交,如果伺服器支援TRACE請求,那麼就會把附帶提交的cookie頭部資訊原樣返回回來,這樣就讀取到cookie資料。
檢視伺服器是否支援TRACE請求,用OPTIONS請求檢視:
三、跨域請求
什麼是跨域?
在JavaScript中,有一個很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略)。這一策略對於JavaScript程式碼能夠訪問的頁面內容做了很重要的限制,即JavaScript只能訪問與包含它的文件在同一域下的內容。對於Ajax的影響在於,通過XMLHttpRequest實現的Ajax請求,不能向不同的域提交請求,例如,在abc.example.com下的頁面,不能向def.example.com提交Ajax請求。
因為使用XMLHttpRequest物件不能進行跨域訪問,所以即使伺服器支援TRACE方法,讀取到了cookie資料也沒辦法傳送到攻擊者手裡,要想伺服器支援跨域傳送,最常用的方法是使用CORS策略。
CORS策略
CORS是一個W3C標準,全稱是"跨域資源共享",它允許瀏覽器向跨源伺服器,發出ajax請求,從而克服了AJAX只能同源使用的限制。
CORS依賴於伺服器端的設定,只要在伺服器端進行了設定,就可以實現相應的資源訪問。
只需要在伺服器端頭部增加以下欄位:*表示任何源都可以進行訪問
Access-Control-Allow-Origin: *
所以,在使用漏洞掃描器掃描時,常常會發現一個低危風險,說伺服器開啟了Access-Control-Allow-Origin: *,可能會導致跨域風險。
所以,要使XST攻擊成功,需要同時滿足:存在XSS漏洞、伺服器支援TRACE請求方法、伺服器開啟了Access-Control-Allow-Origin: *。
再加上現在瀏覽器ajax已不支援其他請求方法,這個攻擊已屬於古老漏洞之一了。
再來了解一個跨域方法,增加知識點:
JSONP
通過JSONP也可以進行跨域訪問,我們知道在頁面上有三種資源是可以與頁面本身不同源的。它們是:js指令碼,css樣式檔案,圖片。而jsonp就是利用了script標籤的src屬性是沒有跨域的限制的,從而達到跨域訪問的目的。因此它的最基本原理就是:動態新增一個<script>標籤來實現。
<script type="text/javascript" src="http://www.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackFunction"></script>
雖然這樣可以進行跨域訪問,但只能為GET請求方法。