phpMyAdmin(LOAD DATA INFILE) 任意文件读取漏洞

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章