Vulhub漏洞系列:Couchdb漏洞(CVE-2017-12635、CVE-2017-12636)
00.前言
这篇文章将对该漏洞进行简介并复现,同时简要说明Vulhub的使用方法,适合小白一起学习,大佬看看就好☺
01.Couchdb简介
CouchDB是一个利用JSON文件来存贮数据,javascript作为MapReduce查询,以及常规HTTP作为API的且面向文档的开源数据库管理系统。
02.漏洞描述
0x01:CVE-2017-12635:
该漏洞的原理是因为Erlang和JavaScript对JSON解析方式的不同,导致语句执行产生差异性。这个漏洞可以让任意用户创建管理员,属于垂直权限绕过漏洞。
% Within couch_util:get_value
lists:keysearch(Key, 1, List).
点击查看keysearch原理(不带函数Pred的第14条)
对于给定的键,Eralang解析器将存储两个值,但是JavaScript只存储第二个值。但是在jiffy实现的时候,getter函数只返回第一个值
举个栗子:
Erlang:
jiffy:decode("{“a”:“1”, “a”:“2”}").
结果:{[{<<“a”>>,<<“1”>>}{<<“a”>>,<<“2”>>}]}
JavaScript> JSON.parse("{“a”:“1”, “a”: “2”}")
结果{a: “2”}
0x01:CVE-2017-12636:
该漏洞由于数据库自身设计原因,管理员身份可以通过HTTP(S)方式,配置数据库。在某些配置中,可设置可执行文件的路径,在数据库运行范围内执行。
CVE-2017-12635结合CVE-2017-12636可实现远程代码执行
03.漏洞复现
首先,在vulhub-master中漏洞的相应位置打开终端,输入docker-compose up -d
打开环境:
docker-compose up -d
然后输入docker ps
查看环境是否打开成功:
docker ps
1.访问搭建完成以后的couchdb(该环境为2.1.0版本)http://192.168.10.139:5984/_utils/#login:
我们先尝试构建用户的数据包:
可以看出我们是没有权限的,所以会报错forbidden。其中org.couchdb,user: $ name 与name: $ name是对应的,接下来我们开始利用漏洞原理进行攻击:
发现返回200,攻击成功,账号和密码分别是ccooll,123456。用该账户进行登录:
CVE-2017-12635漏洞复现成功!
接下来根据上面漏洞获得的管理员账号进行CVE-2017-12636漏洞的复现,因为该必须登录到管理员用户才能进行操作。我们先下载该漏洞的poc:https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py,然后将exp.py里的相应ip和couchdb版本号进行修改即可:
用攻击机开启监听443端口,然后在有python3的机子上运行exp.py:
这样攻击机便与建立了会话连接且是root权限:
成功反弹,CVE-2017-12636漏洞也复现成功。
最后复现完漏洞就可以关闭环境了:
docker-compose down
参考:https://mp.weixin.qq.com/s/UZwE15VEjHjVkv9mC_uLLQ
结束语:这是抬锅整理出来的复现过程希望能对大家有帮助☺