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