标签 文件读取 下的文章

ClickHouse 数据库渗透测试指南

目录

1概述

2信息收集

3权限评估

4文件读取利用

5文件写入利用

6命令执行利用

7SSRF 利用

8云环境利用

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 重绑定

配置文件只读

常见

无绕过

工具与脚本

1. 信息收集一键脚本

2. Python SSRF 扫描脚本

3. 批量端口扫描 SQL 模板