clickhouse注入手法總結

clickhouse

遇到一題clickhouse注入相關的,沒有見過,于是來學習clickhouse的使用,并總結相關注入手法。

環境搭建

直接在docker運行

docker pull clickhouse/clickhouse-server

docker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server

基礎sql語句

列出數據庫

show databases;

列出表

show tables;

查看表結構

desc system.databases;

select name,database,data_path from system.databases;

建表語句

CREATE DATABASE IF NOT EXISTS helloworld;

CREATE TABLE helloworld.my_first_table
(
user_id UInt32,
message String,
timestamp DateTime,
metric Float32
)
ENGINE = MergeTree()
PRIMARY KEY (user_id, timestamp)

插入數據

INSERT INTO helloworld.my_first_table (user_id, message, timestamp, metric) VALUES
(101, 'Hello, ClickHouse!', now(), -1.0 ),
(102, 'Insert a lot of rows per batch', yesterday(), 1.41421 ),
(102, 'Sort your data based on your commonly-used queries', today(), 2.718 ),
(101, 'Granules are the smallest chunks of data read', now() + 5, 3.14159 )

system 數據庫

這個數據庫存儲了數據庫信息、表信息、字段信息

select name,table,database from system.tables where database=database();

select name,table from system.columns where table='my_first_table';

infomation_schema 數據庫

這個數據庫也是存儲了數據庫、表、字段信息

查表

查列

常規函數

常規函數就是產生一個值的函數

字符串拼接

concatWithSeparator(sep, expr1, expr2, expr3...);

字符串切割

select substring('abcdef',2,3);

字符串比較

select startsWith(str, prefix)

select endsWith(str, suffix)

編碼

select ascii('a')

select char(97)

select base64Encode('clickhouse')

select base64Decode('Y2xpY2tob3VzZQ==')

sleep

當sleep參數大于3時,不運行,直接報錯

聚合函數

字段拼接

select groupArray(message) from my_first_table

groupArray的返回結果是數組,不能直接與字符串類型進行union操作

select groupArray(message) from my_first_table union all select '123';

得先把數組轉換成字符串,才能進行union

select arrayStringConcat(groupArray(message),',') from my_first_table;

表函數

表函數就是接在from后面的,返回的結果作為一張表,能夠被查詢

執行腳本文件

在/var/lib/clickhouse/user_scripts/這個目錄下創建腳本文件:

python
#!/usr/bin/python3
import sys
import string
import random

def main():
# Read input value
for number in sys.stdin:
i = int(number)

# Generate some random rows
for id in range(0, i):
letters = string.ascii_letters
random_string = ''.join(random.choices(letters ,k=10))
print(str(id) + '\t' + random_string + '\n', end='')

# Flush results to stdout
sys.stdout.flush()

if __name__ == "__main__":
main()

執行sql語句:SELECT * FROM executable('1.py', TabSeparated, 'id UInt32, random String', (SELECT 10))

其中TabSeparated表示腳本文件的輸出每行以\t符號分隔,用于解析結果,可以換成TSV

如果腳本文件的輸出以逗號結尾,那么就寫CSV

最后一個參數要傳入一個query語句,結果會被傳入腳本文件的標準輸入

用什么解釋器執行腳本,取決于文件開頭的注釋#!/

當嘗試跨目錄執行文件時,報錯:

文件讀取

按照一定的格式讀取文件,要求文件的路徑在user_files下

語法:

file([path_to_archive ::] path [,format] [,structure] [,compression])

例如文件內容為:

java
1,2,3
3,2,1
1,3,2

查詢sql語句:SELECT * FROM file('1.txt', 'CSV', 'column1 UInt32, column2 UInt32, column3 UInt32');

寫文件

沒有別的限制,任意位置都可寫

select 1,2,3 union all select 123,4556,789 into outfile '/tmp/1.txt';

發起網絡請求

SELECT * FROM url('http://127.0.0.1:12345/', CSV, 'column1 String, column2 UInt32', headers('Accept'='text/csv; charset=utf-8'));

其他

除了上述表函數,還能夠發起mysql連接,jdbc連接,redis連接,詳細可以查閱文檔。總之功能十分多樣

注入手法

獲取表名:

select arrayStringConcat(groupArray(name),',') from system.tables where database=database()

select arrayStringConcat(groupArray(table),',') from system.tables where database=database()

select arrayStringConcat(groupArray(table_schema),',') from information_schema.tables where table_schema=database()

獲取列名

select arrayStringConcat(groupArray(name),',') from system.columns where table='your_table'

select arrayStringConcat(groupArray(column_name),',') from information_schema.tables where table_name='your_table'

聯合注入

要點:

1. 不能寫union select,應該寫union all select 或者union distinct select

2. 兩個查詢對應的列的數據類型要相同

布爾盲注

和mysql差不多,就是注意一下有哪些函數可以互相平替的,比如字符串截取,編碼等函數,方便繞過對特定函數的過濾。

ascii(substr('xxx',0,1))=97

if(ascii(substr('xxx',0,1)) = 97,0,1)

時間盲注

if(ascii(substr('xxx',0,1)) = 97,0,sleep(1))

可以執行其他耗時的查詢代替sleep:

報錯注入

select 1 where 1=CAST((select database()) as UInt32)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77229.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77229.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77229.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智能語音識別工具開發手記

智能語音識別工具開發手記 序言:聽見數字化的聲音 在縣級融媒體中心的日常工作中,我們每天需要處理大量音頻素材——從田間地頭的采訪錄音到演播室的節目原聲,從緊急會議記錄到專題報道素材。二十多年前,筆者剛入職時&#xff0…

TDengine 3.3.6.0 版本中非常實用的 Cols 函數

簡介 在剛剛發布的 TDengine 3.3.6.0 版本 中,新增了一個非常實用的 函數COLS ,此函數用于獲取選擇函數所在行列信息,主要應用在生成報表數據,每行需要出現多個選擇函數結果,如統計每天最大及最小電壓,并報…

【AI學習】AI Agent(人工智能體)

1,AI agent 1)定義 是一種能夠感知環境、基于所感知到的信息進行推理和決策,并通過執行相應動作來影響環境、進而實現特定目標的智能實體。 它整合了多種人工智能技術,具備自主學習、自主行動以及與外界交互的能力,旨…

【MCP】VSCode Cline配置MongoDB連接

VSCode MCP插件配置MongoDB連接教程 前言 本文將介紹如何在VSCode中配置Cline插件連接MongoDB。 環境準備 VSCodeNode.jsMongoDB服務器Cline插件 配置步驟 1. 安裝MCP插件 在VSCode擴展商店中搜索"Cline"并安裝。 安裝完之后需要配置API平臺以及設置API-KEY。…

this指針 和 類的繼承

一、this指針 Human類的屬性fishc與Human()構造器的參數fishc同名,但卻是兩個東西。使用this指針讓構造器知道哪個是參數,哪個是屬性。 this指針:指向當前的類生成的對象 this -> fishc fishc當前對象(…

使用PyTorch訓練VGG11模型:Fashion-MNIST圖像分類實戰

本文將通過代碼實戰,詳細講解如何使用 PyTorch 和 VGG11 模型在 Fashion-MNIST 數據集上進行圖像分類任務。代碼包含數據預處理、模型定義、訓練與評估全流程,并附上訓練結果的可視化圖表。所有代碼可直接復現,適合深度學習初學者和進階開發者…

汽車BMS技術分享及其HIL測試方案

一、BMS技術簡介 在全球碳中和目標的戰略驅動下,新能源汽車產業正以指數級速度重塑交通出行格局。動力電池作為電動汽車的"心臟",其性能與安全性不僅直接決定了車輛的續航里程、使用壽命等關鍵指標,更深刻影響著消費者對電動汽車的…

打造船岸“5G+AI”智能慧眼 智驅力賦能客船數智管理

項目介紹 船舶在航行、作業過程中有著嚴格的規范要求,但在實際航行與作業中往往會因為人為的疏忽,發生事故,導致人員重大傷亡和財產損失; 為推動安全治理模式向事前預防轉型,實現不安全狀態和行為智能預警&#xff0c…

C#二叉樹

C#二叉樹 二叉樹是一種常見的數據結構,它是由節點組成的一種樹形結構,其中每個節點最多有兩個子節點。二叉樹的一個節點通常包含三部分:存儲數據的變量、指向左子節點的指針和指向右子節點的指針。二叉樹可以用于多種算法和操作,…

WinForm真入門(11)——ComboBox控件詳解

WinForm中 ComboBox 控件詳解? ComboBox 是 WinForms 中一個集文本框與下拉列表于一體的控件,支持用戶從預定義選項中選擇或直接輸入內容。以下從核心屬性、事件、使用場景到高級技巧的全面解析: 一、ComboBox 核心屬性? 屬性說明示例?Items?下拉…

超詳細解讀:數據庫MVCC機制

之前文章:Mysql鎖_exclusivelock for update寫鎖-CSDN博客 中有提到通過MVCC來實現快照讀,從而解決幻讀問題,這里詳細介紹下MVCC。 一、前言 表1:實例表t idk1122 表2:事務A、B、C的執行流程 事務A事務B事務Cstart …

【SpringCloud】從入門到精通【上】

今天主播我把黑馬新版微服務課程MQ高級之前的內容都看完了,雖然在看視頻的時候也記了筆記,但是看完之后還是忘得差不多了,所以打算寫一篇博客再溫習一下內容。 課程坐標:黑馬程序員SpringCloud微服務開發與實戰 微服務 認識單體架構 單體架…

力扣hot100_回溯(2)_python版本

一、39. 組合總和(中等) 代碼: class Solution:def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:ans []path []def dfs(i: int, left: int) -> None:if left 0:# 找到一個合法組合ans.append(pa…

AI平臺如何實現推理?數算島是一個開源的AI平臺(主要用于管理和調度分布式AI訓練和推理任務。)

數算島是一個開源的AI平臺,主要用于管理和調度分布式AI訓練和推理任務。它基于Kubernetes構建,支持多種深度學習框架(如TensorFlow、PyTorch等)。以下是數算島實現模型推理的核心原理、架構及具體實現步驟: 一、數算島…

cesium項目之cesiumlab地形數據加載

之前的文章我們有提到,使用cesiumlab加載地形出現了一些錯誤,沒有解決,今天作者終于找到了解決方法,下面描述一下具體步驟,首先在地理數據云下載dem數據,在cesiumlab中使用地形切片,得到terrain…

[Vue]App.vue講解

頁面中可以看見的內容不再在index.html中進行編輯,而是在App.vue中進行編輯。 組件化開發 在傳統的html開發中,一個頁面的資源往往都寫在同一個html文件中。這種模式在開發小規模、樣式簡單的項目時會相當便捷,但當項目規模越來越大&#xf…

sql-labs靶場 less-1

文章目錄 sqli-labs靶場less 1 聯合注入 sqli-labs靶場 每道題都從以下模板講解,并且每個步驟都有圖片,清晰明了,便于復盤。 sql注入的基本步驟 注入點注入類型 字符型:判斷閉合方式 (‘、"、’、“”&#xf…

藍橋杯-小明的彩燈(差分)

問題描述: 差分數組 1. 什么是差分數組? 差分數組 c 是原數組 a 的“差值表示”,其定義如下: c[0] a[0]c[i] a[i] - a[i-1] (i ≥ 1) 差分數組記錄了相鄰元素的差值。例如,原數組 a [1, …

精品可編輯PPT | 基于湖倉一體構建數據中臺架構大數據湖數據倉庫一體化中臺解決方案

本文介紹了基于湖倉一體構建數據中臺架構的技術創新與實踐。它詳細闡述了數據湖、數據倉庫和數據中臺的概念,分析了三者的區別與協作關系,指出數據湖可存儲大規模結構化和非結構化數據,數據倉庫用于高效存儲和快速查詢以支持決策,…

最近api.themoviedb.org無法連接的問題解決

修改NAS的host需要用到SSH終端連接工具,比如常見的Putty,XShell,或者FinalShell等都可以,我個人還是習慣Putty。 1.輸入命令“ sudo -i ”回車,提示輸入密碼,密碼就是我們NAS的登錄密碼,輸入的…