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

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