Adminer 任意文件读取漏洞

发布于 2024-07-26 22:04:39 字数 4929 浏览 12 评论 0

一、漏洞简介

准确的说该漏洞源于 MySQL LOAD DATA 读取客户端任意文件,MySQL 可以使用 LOAD DATA INFILE 来读取文件,通常有两种用法,分别是:

load data infile "/data/data.csv" into table test;
load data local infile "/data/data.csv" into table test;
  • 第一种用法是从 mysql 自己的服务器上读取 data.csv 文件
  • 第二种用法是客户端把客户端电脑上的 data.csv 发给 mysql 服务器的表中

而 mysql 客户端读取漏洞利用的语句即第二条语句.

前提

  • phpmyadmin 开启了远程连接选项,adminer 是默认开启的
<!-- -->
$cfg['AllowArbitraryServer'] = true; //false 改为 true libraries 下面的 config.default.php
  • mysql 中 secure_file_priv 为空,即支持 load infile 的使用
  • 未开启 open_basedir(开启情况需要拿 shell,否则只能读到指定目录下的文件)

二、漏洞影响

三、复现过程

漏洞分析

正常流程来说当客户端向服务端发起 load data infile "/etc/passwd" ​的时候。

1、客户端会对服务器说:我要把我的 etc/passwd 文件插入到你的表中

客户端->>服务端: Load data infile '/etc/passwd'...

2、服务器对客户端说:好啊,读取你本地的/etc/passwd 文件 (服务端->>客户端: Response TABULAR)

2.png

3、客户端将 data 文件的内容发给服务器 (客户端->>服务端: etc/passwd 的内容)

3.png

而这里存在逻辑错误,即服务端可以不管客户端的请求,直接向客户端发送一个 Response TABULAR,

这样逻辑就变成了:

  • 1、客户端会对服务端说:NULL
  • 2、服务端对客户端说:好啊,读取你本地的/etc/passwd 文件 (服务端->>客户端: Response TABULAR)
  • 3、客户端将/etc/passwd 文件的内容发给服务器 (客户端->>服务端: testtest)

那么设想一种场景:这样服务端就可以读取客户端机器上的任意文件。

有一台靶机存在 PHPmyadmin 或者 adminer(可以远程连接其他服务器)
攻击者在攻击机器上假装一个 mysql 服务器包含读取任意文件的 poc
靶机上的任意文件被攻击机读取

4.png

这里我们将端口改成了 3308 读取目标机器上的 test.php,注意这里文件一定要按照他给的格式写,然后后面要有逗号,不然会读取失败,然后在服务器上运行这个脚本,最坑的地方来了。这个脚本运行后会一直在后台运行,如果要读其他的文件需要把进程杀掉。

netstat -tln | grep 3308
lsof -i:3308
kill

监听后会生成一个 mysql.log 文件

5.png

接着我们用 phpmyadmin 和 adminer 访问一下

6.png

登陆进去的状态,报错不用管

7.png

在 log 文件里可以读到 test.php 的文件内容

8.png

adminer 也一样,不过 adminer 默认开启远程连接,所以挖 src 的时候碰到 adminer 就等于碰到金矿 hh

9.png

10.png

11.png

明显发现 adminer 比 phpmyadmin 的数据量要少,再有就是拿到 shell 后绕过 open_basedir 读取文件可以用这个漏洞。

参考链接

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

伴我老

暂无简介

0 文章
0 评论
21 人气
更多

推荐作者

謌踐踏愛綪

文章 0 评论 0

开始看清了

文章 0 评论 0

高速公鹿

文章 0 评论 0

alipaysp_PLnULTzf66

文章 0 评论 0

热情消退

文章 0 评论 0

白色月光

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文