RPO,全稱(Relative Path Overwirte),也就是相對路徑覆蓋,利用客戶端和服務端的差異,通過相對路徑來引入我們想要的js或者css文件,從而實現某種攻擊。通俗來說就是瀏覽器與服務器兩者對請求的解析不一致,并沒有做到同步解析。因而我們可以通過相對路徑來引入其他的資源文件,以至于達到我們的目的。
就目前來看此攻擊方法依賴于瀏覽器和網絡服務器的反應,基于服務器的Web緩存技術和配置差異,以及服務器和客戶端瀏覽器的解析差異,利用前端代碼中加載的css/js的相對路徑來加載其他文件,最終瀏覽器將服務器返回的不是css/js的文件當做css/js來解析,從而導致XSS,信息泄露等漏洞產生。
這里以www.xxx.com/test為例。
www.xxx.com/test
第一步:
比如我們輸入一個請求http://www.xxx.com/test/%2f..%2f,該請求送至服務端進行解析結果為www.xxx.com,因為%2f相當于/,/test/%2f..%2f則相當于/test/../,即/根目錄,因此此時服務端會返回www.xxx.com中的內容。
http://www.xxx.com/test/%2f..%2f
www.xxx.com
第二步:
但是客戶端瀏覽器這邊并不會正常的識別%2f為/,他會認為%2f..%2f只是一個界面,而該頁面的最終路徑為/test/。頁面中如果出現如style.css的超鏈接,那么訪問該鏈接時會自動拼接到www.xxx.com/test/style.css后,即拼接到test/這個路徑下。
www.xxx.com/test/style.css
第三步:
因此加載css時向服務端發送的請求為www.xxx.com/test/style.css,再利用服務端的一些配置,他會返回找到的有效的數據如www.xxx.com/test/中的內容,返回給客戶端。
www.xxx.com/test/
第四步:
客戶端便加載次內容并作為css內容,從而造成RPO攻擊。
回答所涉及的環境:聯想天逸510S、Windows 10。
RPO,全稱(Relative Path Overwirte),也就是相對路徑覆蓋,利用客戶端和服務端的差異,通過相對路徑來引入我們想要的js或者css文件,從而實現某種攻擊。通俗來說就是瀏覽器與服務器兩者對請求的解析不一致,并沒有做到同步解析。因而我們可以通過相對路徑來引入其他的資源文件,以至于達到我們的目的。
就目前來看此攻擊方法依賴于瀏覽器和網絡服務器的反應,基于服務器的Web緩存技術和配置差異,以及服務器和客戶端瀏覽器的解析差異,利用前端代碼中加載的css/js的相對路徑來加載其他文件,最終瀏覽器將服務器返回的不是css/js的文件當做css/js來解析,從而導致XSS,信息泄露等漏洞產生。
這里以
www.xxx.com/test為例。第一步:
比如我們輸入一個請求
http://www.xxx.com/test/%2f..%2f,該請求送至服務端進行解析結果為www.xxx.com,因為%2f相當于/,/test/%2f..%2f則相當于/test/../,即/根目錄,因此此時服務端會返回www.xxx.com中的內容。第二步:
但是客戶端瀏覽器這邊并不會正常的識別%2f為/,他會認為%2f..%2f只是一個界面,而該頁面的最終路徑為/test/。頁面中如果出現如style.css的超鏈接,那么訪問該鏈接時會自動拼接到
www.xxx.com/test/style.css后,即拼接到test/這個路徑下。第三步:
因此加載css時向服務端發送的請求為
www.xxx.com/test/style.css,再利用服務端的一些配置,他會返回找到的有效的數據如www.xxx.com/test/中的內容,返回給客戶端。第四步:
客戶端便加載次內容并作為css內容,從而造成RPO攻擊。
回答所涉及的環境:聯想天逸510S、Windows 10。