场景介绍:
今天的场景是前一周在内网***的时候遇到过的,找到一个mysql数据库弱口令。
帐号和密码分别是root,也就是mysql中的dba。
这里其实权限很大了,首先mysql的root用户具备文件写权限,同时mysql5.0以上,提供一个system函数,而这个函数一般被***者用做shell的接口。
那时在遇到这个弱口令时,我就在想怎样快速的拿下这台主机,经过mysql的root帐号。是否有比较快速的方法,这时候,我固然想到了sqlmap。通过查询github上的文档,我发现了这样的参数。
下面,让咱们一块儿来学习一下这个场景吧!
环境:
两台机器,一台是kali linux,做为mysql服务器,开放ssh服务以及mysql服务,ip地址为192.168.80.128。
另一台是ubuntu,做为***主机,安装有nmap、sqlmap,ip地址为192.168.80.129。
一、首先咱们对nmap扫描一下常见端口,
命令以下:nmap -A -n -T3 192.168.80.128
扫描结果以下图:
二、第二步主要是经过爆破工具发现了mysql的弱口令,这一步忽略了。
三、如今来说主要内容,咱们得到mysql的root帐号和密码以后怎样利用
1)咱们先来看一下github上的sqlmap文档(ClickMe)
咱们能够看到这是一个"-d"选项,用法在For example有
整一个的语法为:" DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME"或者是" DBMS://DATABASE_FILEPATH"。
[1]DBMS:表明所使用的数据库,如咱们这里是mysql
[2]USER:对应咱们数据库的用户,如咱们这里是root
[3]PASSWORD:对应咱们数据的密码,如个人服务器为3erver
[4]DBMA_IP:数据库服务器对应的ip地址,如我这里为192.168.80.128
[5]DBMS_PORT:数据服务器所使用的端口,不能省略。默认咱们写3306
[6]DATABASE_NAME:你要使用的数据库名,由于mysql通常会有test数据库,如我这里使用test。假如没有test,咱们能够本身使用create database test;建立一个
2)下面咱们开始利用,服务器上我首先以root身份运行mysql数据库。看看会发生什么事情。在Mysql中,以什么身份运行数据库,会在/etc/mysql/my.cnf这个配置文件设置。因此下面我将用户mysqld节点中的user修改成root。以下图:
咱们经过查看进程,能够看到在服务启动的时候,mysqld已经带上--user=root这个选项了。
3)如今我开始根据sqlmap的选项在kali里面对mysql服务器进行链接。
sqlmap -d "mysql://root:3erver@192.168.80.128:3306/test" -f
上面-f参数是打印mysql服务器的版本信息。以下图
咱们以后将-f参数更换成--os-shell参数
以后sqlmap会让咱们选择服务器的位数,要是你不知道就猜一个,反正两个选项,不是32位就是64位。
我这里选择64位,而后系统就会替咱们上传对应位数的动态连接库文件,这个文件提供system函数以便咱们能够执行系统命令。如图,
当咱们输入whoami命令时候,系统会询问咱们是否返回命令的输出。咱们这里选择"a",表明老是返回命令的输出。能够看到这里能够获取到权限与咱们运行mysql服务器用户权限一致。也就是说咱们这里获取root权限全部,好比查看/etc/passwd,nc反弹shell、添加用户等。
ifconfig信息:
查看/etc/passwd文件,
nc反弹shell
(1)执行nc,在Mysql服务器上2333端口进行监听。
(2)咱们查看咱们***机的ip,能够看到的确是192.168.80.129。
咱们使用ncat 192.168.80.128 2333 来进行链接反弹shell。
(4)到这里,咱们已经将怎样快速利用一个mysql的root帐号来获取系统权限的过程演示完毕。
四、局限性是什么?
(1)咱们这里提到过,运行mysql的用户须要是root帐号。由于这里整个利用流程是这样的
[1]sqlmap经过root的帐号和密码链接上远程的数据库
[2]sqlmap将udf文件夹下对应系统平台的64位或者32位的动态连接库文件上传到远程数据库的
/usr/lib/mysql/plugin/目录下
[3]sqlmap用过已经上传的动态连接库文件来调用system函数来执行用户输入的命令。
(2)在上面提到,咱们要将动态连接库传到/usr/lib/mysql/plugin/目录下,可是这个目录只有root帐号具备写权限。也就是说,要是运行mysqld的用户不是root,那么咱们便没法经过这种方法来执行系统命令。
(3)通常windows上的mysql root帐号能执行系统命令的比较多,由于须要专门创建一个非管理员权限的用户去运行mysql,因此有一部分系统管理员将mysql运行在管理员权限的帐号上,这个时候咱们将获取到它的权限。
五、防护策略
(1)linux的最小权限原则,不要给mysql数据的plugin文件夹赋予写权限,即便赋予了也要限制好拥有权限的用户。咱们能够登入数据库以后,使用
select @@plugin_dir;
来查看plugin的目录,以下图,是我在windows上获取到的plugin_dir
(2)最好只让root在localhost上运行,而可以远程访问的数据库用户只分配增删改查等权限,不要分配FILE权限。
六、这一篇文章是根据场景模式来写的,而后介绍工具以及利用方法。mysql