當前位置:
首頁 > 最新 > Web攻擊技術看這裡!10分鐘帶你初探RPO攻擊!

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:美亞柏科 |