(譯)Ruby on Rails中的一個有趣XSS

作者:Egor Homakov(推特:twitter.com/homakov

原文地址:Puzzle #2: Really Curious XSS in Rails

譯者:雪ノ下月乃

譯者註:今天研究ipv6安全還是沒啥頭緒。因為還要趕時間修仙看文獻研究v6,就找了一篇相對短篇但是精妙的文章翻譯一下=_=

Puzzle #2: Really Curious XSS in Rails

我在代碼里看到這樣的Ajax語句不止一次了:

$.get(location.pathname+?something)n

它能夠讀取當前混合著參數的路徑,載入額外的JSON數據,或者調整檢索過濾。看上去人畜無害,不是嗎?

然而你還是too young, too simple了,location.pathname 對Rails框架而言是有威脅的!這麼說吧,我們可以利用 /customsearch (自己定製的查詢)當作端點(通俗的來講就是Web相對路徑)。然後:

  1. Rails框架並不會在意多餘的斜杠 / 並且後端讀取時URL時默認清除它,因此 host.com//customsearch 也可以使用,感恩Rails框架!
  2. //custompath 本來想表示Rails的相對路徑。然而custompath的兩條斜杠會把Ajax變成跨域請求,訪問到custompath [1]。因此將 // 弄成路徑並不好。開發者應該用 rel:// 來完成實現這種功能 ,不然會有許多跳轉的問題。感激Web標準!
  3. 雖然買不了頂級域 "customsearch" ,但是我們可以用其他價格低廉的域名像 "customsearch.space" 來替代,幸好有便宜的域名QAQ
  4. 由於Rails將 『.』 當作一種參數形式,因此host.com//customsearch. 會照常當customsearch對待。再次感謝Rails的大力支持
  5. 現在我們用 jQuery 跨域請求到 //customseach.space 時,我們的內容只要返回 type = text/javascript 並附上js代碼就會被 jQuery 自動執行 [2],愛死 jQ 了!

雖然這不是超級常規的漏洞,不過我還是帥氣的利用各種姿勢將人畜無害的代碼變成XSS了。

批註:

[1]: 在jQuery裡面,用 $.get( /address ) 的地址是當做相對路徑,這個Ajax會訪問 http://example.com/address 。然而如果是 $.get( //address ) ,兩條杠加address的話,則會直接訪問 addressn

n[2]: 這個漏洞參考 Inadequate/dangerous jQuery behavior for 3rd party text/javascript responses · Issue #2432 · jquery/jquery

推薦閱讀:

APT 攻擊是不可能被有效防範的?
如何看待 2017 年 5 月 12 日中國大量高校及公共設備發生電腦中毒,勒索比特幣的事件?
請問大家,現在網路信息這樣不安全,如何能刪除現在互聯網中已經存在的那些個人信息?這麼久了,有跡可循么?

TAG:信息安全 | XSS | RubyonRails |