ClickHouse 数据库渗透测试指南
ClickHouse 数据库渗透测试指南
目录
1概述
2信息收集
3权限评估
9横向移动
10防御绕过
11常见限制与绕过
12工具与脚本
概述
什么是 ClickHouse
ClickHouse 是由 Yandex 开发的开源列式数据库管理系统,专为在线分析处理(OLAP)场景设计。它能够高效处理大规模数据集,支持快速查询和实时数据分析。
默认配置
配置项 | 默认值 |
HTTP 端口 | 8123 |
TCP 端口 | 9000 |
MySQL 协议端口 | 9004 |
配置目录 | /etc/clickhouse-server/ |
数据目录 | /var/lib/clickhouse/ |
用户脚本目录 | /var/lib/clickhouse/user_scripts/ |
用户文件目录 | /var/lib/clickhouse/user_files/ |
渗透测试目标
1 信息泄露:获取敏感数据、配置信息
2 文件读取:读取系统敏感文件
3 文件写入:写入 webshell、脚本、配置文件
4 命令执行:实现 RCE(远程代码执行)
5 横向移动:利用 SSRF 或数据库连接攻击内网
信息收集
1. 版本信息
2. 用户与权限
3. 数据库与表
4. 服务器配置
5. 集群信息
6. 查询历史(敏感信息)
7. 可用函数
权限评估
关键权限检查
权限等级
权限级别 | 可执行操作 |
只读用户 | SELECT 查询 |
普通用户 | SELECT、INSERT、部分表函数 |
DDL 权限 | CREATE、DROP、ALTER |
SOURCES 权限 | url()、mysql()、postgresql() 等 |
管理员 | 全部权限 |
文件读取利用
1. file() 函数读取
2. 路径穿越(低版本可能有效)
3. 软链接绕过(需要命令执行权限)
如果有命令执行权限,可以创建软链接绕过目录限制:
然后读取:
文件写入利用
1. INTO OUTFILE
2. 写入脚本到 user_scripts 目录
命令执行利用
方法1:UDF 配置文件(需要配置文件写入权限)
步骤1:创建 UDF 配置文件
创建 /etc/clickhouse-server/cmd_function.xml:
关键参数说明:
● execute_direct=0:command 通过 sh -c 执行
● execute_direct=1:command 在 user_scripts 目录查找脚本
步骤2:确保 config.xml 包含
步骤3:重启服务后执行
方法2:带参数的交互式 Shell
UDF 配置:
执行命令:
方法3:executable() 表函数
方法4:Executable 表引擎
方法5:Executable Dictionary
SSRF 利用
1. url() 表函数
2. 常见内网服务探测
3. 批量内网扫描
4. 其他 SSRF 函数
云环境利用
AWS
阿里云
腾讯云
Google Cloud
横向移动
1. MySQL 连接
2. PostgreSQL 连接
3. remote() 连接其他 ClickHouse
4. JDBC 连接(需要 JDBC Bridge)
防御绕过
1. 编码绕过
2. 字符串拼接
3. 使用变量
常见限制与绕过
托管环境限制
限制 | 状态 | 绕过方法 |
INTO OUTFILE 禁用 | 常见 | 无直接绕过,尝试其他写入方式 |
Executable DDL 禁用 | 常见 | 尝试配置文件方式 |
路径穿越阻止 | 常见 | 软链接(需命令执行) |
url() 内网限制 | 少见 | DNS 重绑定 |
配置文件只读 | 常见 | 无绕过 |