最近准备做一个关于未授权访问漏洞的系列。恰巧遇到InfluxDB的未授权,记录一下。
InfluxDB是什么?
InfluxDB是一个开源的分布式时序数据库,使用Go语言编写,无需外部依赖。
InfluxDB使用JWT作为鉴权方式,在用户开启了认证,但未设置参数shared-secret的情况下,JWT的认证密钥为空字符串,此时可以伪造任意用户身份在InfluxDB中执行SQL语句,从而可能造成敏感信息泄露或执行恶意数据库命令。
漏洞复现
漏洞影响版本:InfluxDB<1.7.6
InfluxDB默认端口是8086。在测试中,如果通过Nmap工具扫描到此端口,则可验证是否存在该漏洞。访问http://xx.xx.xx.xx:8086/debug/vars可以查看系统服务信息。如图:
通过抓包工具可以在返回头中查看版本信息,本次测试版本是1.7.4。
尝试执行SQL语句,可以执行成功。
查看用户
查看数据库
添加数据库
漏洞建议
升级到最新版本,或设置shared-secret来加强JWT的安全性。
注:
部分版本在执行SQL语句时可能会遇到报错现象,此时需要通过https://jwt.io/来生成一个jwt token。
在请求头中添加Authorization参数,参数值为生成的jwt token即可。