Web攻擊技術看這裡!10分鐘帶你初探RPO攻擊!
Relative Path Overwrite(相對路徑覆蓋)是一種通過覆蓋目標文件來利用相對URL的技術,簡稱RPO技術。
隨著RPO(相對路徑覆蓋)技術在強網杯的web題中被提出,國內相繼出現了不少相關的writeup。作為14年就被發現的技術,它的攻擊技巧早已被拓展開,本期「安仔課堂」,ISEC實驗室的凌老師對這項技術之前的研究成果進行了歸納,10分鐘的時間,讓我們跟隨凌老師一起初探RPO攻擊。
GIF
絕對路徑與相對路徑的區別
一、絕對路徑
圖1
二、相對路徑
圖2
我們可以發現:絕對路徑的URL目標地址完整,包含了協議和域名,而相對路徑的URL並不指定協議或域名,而是使用現有的目的地來確定協議和域名。
如何理解相對路徑
使用當前路徑並查找其中的目錄,如「mytest」,或使用目錄遍歷技術,如「../mytest」。
工作方式以下方的樣式表為例:
圖3
上方樣式表的鏈接元素使用相對URL,引用「test.css」,樣式表的載入取決於所在站點目錄結構的位置。
例如:如果在一個名為「mytest」的目錄中,那麼樣式表將從「mytest /Test.css」載入。使用相對URL,瀏覽器不知道什麼是正確的路徑,因此,瀏覽器無法訪問伺服器的文件系統。
RPO原理解析
一、漏洞觸發條件:
配置錯誤的Apache伺服器或者Ngnix伺服器,URL重寫
相對路徑JS、CSS樣式表的調用
存儲允許CSS注入的XSS
可控頁面
註:為方便演示,以Ngnix伺服器為例
二、關於觸發條件:
對於用戶看到的完全相似的URL,伺服器的處理方式也有所不同。
以下方樣式表為例:
圖4
對於默認的Apache伺服器來說:
「%2f」在這裡並不會被解析,因為伺服器不認識這個符號,因此它會認為
「..%2f1.php」是一個文件。
對於默認的Ngnix伺服器來說:
Ngnix會把「%2f」進行解碼,轉化為「../」,從而使URL如下圖所示:
圖5
而我們知道「../」表示的是向前跳轉一個目錄,因此我們最終得到的URL是:
圖6
我們簡單梳理一下流程:
目標URL:
圖7
網頁代碼:
圖8
瀏覽器將提交的URL編碼解碼後發給伺服器使用「%2f」代替「/」,把URL寫為:
圖9
結果:
伺服器:
圖10
瀏覽器:
圖11
頁面中導入的樣式表為:
圖12
瀏覽器認為「test.css」的根目錄是:
「/RPO/mytest/」
而不是:
「/RPO/mytest/test/」
所以「../../test.css」跳到了更高一級的目錄下。
偽造一個目錄「ISEC」,嘗試導入一個不存在的「RPO/Isec/test.css」。
偽造:
圖13
結果:
伺服器:
圖14
瀏覽器:
圖15
頁面中導入的樣式表為:
圖16
瀏覽器的認知中,「ISEC」和「%2fbasic」是兩個不同的目錄,從而導入主域下任意樣式表。
三、解讀觸發條件:
前提:
在利用CSS選擇器之前,我們需要知道它是怎麼進行解析的。在CSS2規範中,明確了在某些情況下,user agents必須忽略非法樣式表的一部分,這個規範定義為忽略。這意味著user agents解析非法部分時,除非明確匹配到了開始和結束,否則將予以忽略,簡單的說就是解析其中格式正確完整的部分,忽略非法語法。
結論:
瀏覽器在解析CSS樣式時,會忽略非法的部分,直到找到正確的開始才會進行解析,一直到結束停止。所以我們植入CSS代碼,欺騙CSS解析器忽略之前不合法的語法內容,從而載入我們注入的CSS內容,最終頁面變成渲染後的紅色,如下圖所示:
圖17
再加入XSS的內容,我們定義了一個全局的選擇器:
圖18
RPO攻擊還原
實例:
在infinite security上我們找到這樣一個簡單的實例:
在下面的頁面中,它存儲了XSS,滿足了條件,因此,在CSS中的表達式功能將執行JavaScript。
圖19
現在通過分析源代碼鏈接與href風格「.css」,讓我們看看開發者工具或瀏覽器中的網路部分,我們可以通過從「url」結尾添加和去除「/」來看到RPO的行為。
通過刪除「style.css」,我們得到「404」狀態碼響應。
圖20
通過添加「style.css」,我們獲得「200OK」狀態碼響應。
圖21
由於Internet Explorer支持表達式,因此,為了運行這個代碼,我們將在舊版本的IE中執行這個頁面。當此頁面載入到IE中時,IE中的CSS解析器將執行CSS部分,跳過HTML部分,執行XSS負載,最終執行XSS的payload。
圖22
RPO(相對路徑覆蓋)技術作為14年的攻擊方式,如今依然被廣泛運用,近期舉辦的強網杯上也出現了類似題目, 網上有很多的思路,大家可搜索下方鏈接以作參考。
圖23
RPO攻擊擴展
最初的RPO攻擊有一些(隱含的)限制:
易受攻擊的HTML和HTML載入的樣式表必須是同一個文件。
攻擊者無法操作已載入樣式表URL的查詢字元串參數。
因此,我們來探討幾個特殊環境下避免這些限制的技術(如上實例),主要是利用Web伺服器或瀏覽器解釋URL的差異來欺騙瀏覽器或伺服器。
(註:不同環境版本結果有出入)
例如:點「.」、斜杠「/」、反斜杠「」、問號「?」和分號「;」等字元及其編碼的等價物在URL中具有特殊意義,伺服器和瀏覽器可以通過交互讓這些具有不同含義,這些不同的解釋給了攻擊者擴展RPO攻擊的可能性。
一、在IIS/ASP.NET上載入另一個文件
前提條件:通過使用包含「/」的URL來遍歷路徑,可以欺騙瀏覽器將另一個文件作為樣式表載入到IIS/ASP.NET上。
由Soroush Dalili發現,Poc:
圖24
URL返回「/demo/rpo/test.aspx」的內容,因為「%2f」和「/」,在IIS/ASP.NET上被同等對待。
圖25
同時, 因為瀏覽器不將「%2f」視為路徑分隔符,HTML中的鏈接元素(如上文所示)將從
「/demo/rpo/andivipage.css.aspx/style.css」載入樣式表。樣式表URL的「PATH_INFO」部分,即「/style.css」的部分在伺服器端被忽略了。
這意味著上述兩種限制中的第一種,即關於文件路徑的限制,已經成功的被規避。
注意:這種技術對攻擊者來說非常方便,因為攻擊者可控內容的URL有時與包含路徑相對樣式表的網頁不同。
二、在Safari/Firefox上載入另一個文件
Safari在路徑解釋方面的獨特之處在於它不對URL中的編碼點(和其他字元)進行解碼,攻擊者可以將其用於另一種文件載入攻擊。
假設Safari用戶訪問下面的URL:
圖26
Safari按照原樣把URL路徑發送到伺服器(PHP/Apache),伺服器將解析路徑中的「.%2E」,並返回「/member/top.php」的內容。
假設響應包含以下腳本元素:
圖27
由於Safari不對URL中的編碼點進行解碼,載入的JS路徑將是
「/member/profile_photo.php/js/jquery.js」,這意味著伺服器載入了一個不同於主HTML的文件。在本例中,Profile_Photo.php返回的圖像將在瀏覽器上作為JavaScript執行。
至於Firefox,它的獨特之處在於如何處理跟蹤編碼的雙點。
假設Firefox用戶訪問下面的URL:
圖28
Firefox將路徑發送到伺服器,但是不解析最後編碼的點,伺服器對它進行解析,然後返回「/members/」的內容。
假設內容下面包含一個腳本元素:
圖29
當Firefox在確定JS路徑留下未解決的尾隨點時,載入的JS路徑將是
「/member/profile_photo.php/js/jquery.js」,這將返回Profile_Photo.php的內容。
注意:在這兩種攻擊中,攻擊者都無法像在ASP.NET上一樣自由地控制載入的資源路徑。,具體而言,前一種攻擊要求載入資源路徑以「../」開頭,而後一種攻擊要求HTML路徑以「/」結尾。
三、在WebLogic/IE上載入另一個文件
與IIS/ASP.NET一樣,WebLogic對待「%2f」和「/」是平等的,但是上述對ASP.NET的攻擊並不僅僅適用於WebLogic,原因如下:
WebLogic需要分號來添加字元串到URL的末尾;
像「..%2F」這樣的字元串是在「分號不會導致伺服器遍歷」之後才出現(WebLogic在第一個分號出現後完全忽略了一個字元串)。
因此,我們使用另一種方法便能成功攻擊,如下圖所示:
圖30
這個URL將返回「/aa/Test1Servlet」的內容,因為如上所述,WebLogic只是在第一個分號之後忽略一個字元串。
假設內容包含下面的鏈接元素:
圖31
當瀏覽器確定樣式表URL時,原始URL中的「.%2E/」被解碼為「../」,這樣發送給伺服器的樣式表路徑將是「/aaa/test2Servlet;/style.css」,而它作用於「/aaa/test2servlet」的內容。
這意味著與第一個HTML不同的HTML文件被成功載入為樣式表。
攻擊要求
「.%2E」在初始HTTP請求中按原樣發送;
它們在下一個樣式表載入請求中對這些事件進行解碼。
注意:這兩種情況只有在IE上才能滿足, 攻擊URL在位置標頭中提供。
圖32
換句話說,如果攻擊URL是在中提供的,或者只是在地址欄中輸入,則此技術不起作用,因為處於這些情況時,在向伺服器發送初始請求之前,IE就會立即解析路徑中的「.%2E/」 。
四、在WebLogic+Apache上載入帶有查詢字元串的文件
在基於Java的大型企業系統中,我們經常可以看到將Apache置於WebLogic前面的系統架構。對於這個構成,Oracle提供了一個Apache模塊(mod_wl.so),它就像他們之間的反向代理。
有趣的是,在將URL路徑傳遞給後端WebLogic之前,該模塊以一種非常獨特的方式規範URL路徑。具體來說,它將URL路徑中的「%3F」解碼為「?」,這顯然會混淆URL解析器,給攻擊者提供機會。
圖33
假設內容包含下面的鏈接元素:
圖34
在本例中,最終樣式表從瀏覽器發送到Apache的路徑是「/aaa/test1servlet?param={}*/style.css」,
這是因為瀏覽器將「%3F」視為URL路徑的一部分。因此,在確定最終樣式表的路徑時,瀏覽器不會刪除該部分。
如前所述,樣式表中的URL由模塊解碼,然後發送到後端WebLogic,以便在WebLogic中將之後的部分視為查詢字元串,這意味著本節開頭顯示的第二個限制,即查詢字元串,成功地被繞過。
GIF
互了個動
小夥伴們,
本期內容到這裡就結束啦,
你get到了嗎?
歡迎大家於文末留言,
分享你的寶貴見解、
疑問、補充~
與ISEC實驗室大神互動的機會來啦!
速速行動起來撒!
安勝作為國內領先的網路安全類產品及服務提供商,秉承「創新為安,服務致勝」的經營理念,專註於網路安全類產品的生產與服務;以「研發+服務+銷售」的經營模式,「裝備+平台+服務」的產品體系,在技術研究、研發創新、產品化等方面已形成一套完整的流程化體系,為廣大用戶提供量體裁衣的綜合解決方案!
ISEC實驗室作為公司新技術和新產品的預研基地,秉承「我的安全,我做主」的理念,專註於網路安全領域前沿技術研究,提供網路安全培訓、應急響應、安全檢測等服務。
2018年
承擔全國兩會網路安全保障工作。
2017年
承擔全國兩會網路安全保障工作;
完成金磚「廈門會晤」保障工作;
完成北京「一帶一路」國際合作高峰論壇網路安全保障;
承擔中國共產黨第十九次全國代表大會網路安全保障。
承擔第四屆世界互聯網大會。
2016年
承擔全國兩會網路安全保障工作;
為貴陽大數據與網路安全攻防演練提供技術支持;
承擔G20峰會的網路安保工作;
承擔第三屆世界互聯網大會。
2015年
承擔第二屆世界互聯網大會。
不忘初心、砥礪前行;未來,我們將繼續堅守、不懈追求,為國家網路安全事業保駕護航!
TAG:美亞柏科 |