phpMyAdmin开启远程登陆导致本地文件读取
下面我们先去分析复现下这个漏洞。
$cfg['AllowArbitraryServer'] = true; //false改为true
则登录时就可以访问远程的服务器。当登陆一个恶意构造的Mysql服务器时,即可利用load data infile
读取该服务器上的任意文件。当然前提条件是secure_file_priv
参数允许的目录下,且phpmyadmin的用户对该文件有读的权限。
这里利用vulnspy上的实验环境演示分析该漏洞。
VulnSpy 已为大家提供在线 phpMyAdmin 环境地址:点击访问
漏洞细节
LOAD DATA LOCAL
导致的任意文件读取是个由来已久的问题,根据前人们的研究:
Read MySQL Client’s File
我们知道下列的情况都存在该问题:
MySQL Client
PHP + mysql/mysqli
PHP + PDO (MYSQL_ATTR_LOCAL_INFILE)
Python + MySQLdb
Python3 + mysqlclient
Java + JDBC Driver
phpMyAdmin 属于典型的 php+mysqli 组合,当 AllowArbitraryServer 开启的情况下(默认关闭),我们可以让phpMyAdmin连接到恶意的MySQL服务器来触发任意文件读取漏洞。
漏洞利用
EXP: 点击下载
第一步:
下载好exp以后,配置恶意mysql服务器,在服务器中修改rogue_mysql_server.py
文件,打开后设置PORT端口,默认为3306,设置为3308(可以随意设置),然后再filelist
中选择一个要读的文件,这里读出/etc/passwd
注意:这里需要读什么样的文件自行添加即可。
第二步:
随后运行python rogue_mysql_server.py
启动恶意的mysql服务器,此时运行了以后,会在当前目录生成一个空白的mysql.log
文件。
第三步:
到这一步为止,我们的恶意mysql服务器就已经搭建好了。服务器也处于监听状态,打开我们需要读取phpmyadmin的服务器。
第四步:
在Server处输入我们的恶意mysql服务器搭建的ip地址和端口,username和passwd随便输入,然后点击Go。
第六步:
然后回到刚搭建的恶意mysql服务器上,查看mysql.log
文件内容。
此时已经成功读取到目标机器中的/etc/passwd
文件内容。
参考文档:
https://www.anquanke.com/post/id/173039
https://lightless.me/archives/read-mysql-client-file.html
https://blog.csdn.net/qq_41107295/article/details/100743094
https://cloud.tencent.com/developer/article/1372863
https://blog.csdn.net/ls1120704214/article/details/88174003