渗透学习笔记--场景篇--通过mysql的root账号来get shell

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

场景介绍:    
     今天的场景是前一周在内网渗透的时候遇到过的,找到一个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。


1、首先我们对nmap扫描一下常见端口,
命令如下:nmap -A -n -T3 192.168.80.128
扫描结果如下图:




2、第二步主要是通过爆破工具发现了mysql的弱口令,这一步忽略了。
3、现在来讲主要内容,我们获得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账号来获取系统权限的过程演示完毕。
4、局限性是什么?
(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运行在管理员权限的账号上,这个时候我们将获取到它的权限。


5、防御策略
(1)linux的最小权限原则,不要给mysql数据的plugin文件夹赋予写权限,即使赋予了也要限制好拥有权限的用户。我们可以登入数据库之后,使用
select @@plugin_dir;
来查看plugin的目录,如下图,是我在windows上获取到的plugin_dir




(2)最好只让root在localhost上运行,而能够远程访问的数据库用户只分配增删改查等权限,不要分配FILE权限。


6、这一篇文章是根据场景模式来写的,然后介绍工具以及利用方法。











本文转自 qq414207614 51CTO博客,原文链接:http://blog.51cto.com/skytina/1722403,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
141 6
|
2月前
|
存储 关系型数据库 MySQL
MySQL在企业内部应用场景有哪些
【10月更文挑战第17天】MySQL在企业内部应用场景有哪些
101 0
|
2月前
|
存储 关系型数据库 MySQL
介绍一下MySQL的一些应用场景
【10月更文挑战第17天】介绍一下MySQL的一些应用场景
384 0
|
3月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
4天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
25 2
|
2月前
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
85 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
2月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
79 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
3月前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
528 15
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
2月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
73 1
|
3月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余