免费发布信息
当前位置:APP交易 > 热点资讯 > app交易 >  Couchdb 任意命令执行漏洞复现

Couchdb 任意命令执行漏洞复现

发表时间:2021-07-09 16:40:25  来源:红帽社区  浏览:次   【】【】【
红帽社区是一个垂直网络安全社区,融合“红帽先锋”正能量精神,每日分享最新安全资讯,提供安全问答、靶场、众测、漏洞库等功能,是网络安全爱好者学习、交流的优质社区。

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

Port:5984

Apache CouchDB 是一个开源数据库,专注于易用性和成为 "完全拥抱 web 的数据库"。CouchDB 会默认会在 5984 端口开放 Restful 的 API 接口,用于数据库的管理功能。它是一个使用 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

CVE-2017-12635 是由于 Erlang 和 JavaScript 对 JSON 解析方式的不同,导致语句执行产生差异性导致的。可以被利用于,非管理员用户赋予自身管理员身份权限。

CVE-2017-12636 时由于数据库自身设计原因,管理员身份可以通过 HTTP(S)方式,配置数据库。在某些配置中,可设置可执行文件的路径,在数据库运行范围内执行。结合 CVE-2017-12635 可实现远程代码执行。

测试环境

如下测试环境借助 vulhub 的 docker 镜像,附上 P 师傅的链接:https://github.com/vulhub/vulhub

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 下的说明

依次执行如下请求即可触发任意命令执行:

新增 query_server 配置,写入要执行的命令;

新建一个临时库和临时表,插入一条记录;

调用 query_server 处理数据

 

     

其中,vulhub:vulhub为管理员账号密码。

第一个请求是添加一个名字为 cmd query_servers,其值为 "id >/tmp/success",这就是我们后面待执行的命令。

第二、三个请求是添加一个 Database 和 Document,这里添加了后面才能查询。770895a97726d5ca6d70a22173005c7b应该表示 vul

 

第四个请求就是在这个 Database 里进行查询,我们将 language 设置为 cmd,这里就会用到第一步里添加的名为 cmd query_servers,最后触发命令执行。

引申一

既然可以命令执行,也就是说可以反弹 shell,如果是 ctf 题,也可以将 flag 带出来。

 

引申二

同样你也可以不用登录获取 Cookie,直接在 curl 请求中带入账号密码也是可以的,类似于这样,执行效果是一样的,这种方法可能更方便点吧。例如:

 

2.1.0 下的说明

2.1.0中修改了上面用到的两个API,这里需要详细说明一下。

Couchdb 2.x 引入了集群,所以修改配置的API需要增加node name。这个其实也简单,我们带上账号密码访问 /_membership即可:

curlhttp://vulhub:vulhub@your-ip:5984/_membership

 

可见,我们这里只有一个node,名字是 nonode@nohost

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

 

然后,与 1.6.0 的利用方式相同,我们先增加一个Database和一个Document:

 

 

增加_view的同时即触发了 query_servers中的命令。

利用脚本

附一个简单的脚本 exp.py,修改其中的 target 和 command 为你的测试机器,然后修改 version 为对应的 Couchdb 版本( 1 或 2 ),成功反弹shell:

 

 

     

 

文章转载来源:https://www.freebuf.com/articles/web/258159.html


责任编辑:
声明:本平台发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。

德品

1377 678 6470