(譯)Ruby on Rails中的一個有趣XSS
作者:Egor Homakov(推特:https://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相對路徑)。然後:
- Rails框架並不會在意多餘的斜杠 / 並且後端讀取時URL時默認清除它,因此 https://host.com//customsearch 也可以使用,感恩Rails框架!
- //custompath 本來想表示Rails的相對路徑。然而custompath的兩條斜杠會把Ajax變成跨域請求,訪問到custompath [1]。因此將 // 弄成路徑並不好。開發者應該用 rel:// 來完成實現這種功能 ,不然會有許多跳轉的問題。感激Web標準!
- 雖然買不了頂級域 "customsearch" ,但是我們可以用其他價格低廉的域名像 "customsearch.space" 來替代,幸好有便宜的域名QAQ
- 由於Rails將 『.』 當作一種參數形式,因此https://host.com//customsearch.space 會照常當customsearch對待。再次感謝Rails的大力支持
- 現在我們用 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 |