1.什么是udf
UDF是mysql的一个拓展接口,UDF(User defined function)可翻译为用户自定义函数,这个是用来拓展Mysql的技术手段。用户可以通过UDF添加自定义函数,在sql语句中直接调用。
2.udf使用
假设用户自定义了一个名为“udf.dll”的udf文件,其中包含了cmdshell函数。函数的功能为执行系统命令。
1) 为了在mysql中使用此函数,须将udf.dll放在特定文件夹下。
1.Mysql版本大于5.1,udf.dll文件必须放在MySQL安装目录的lib\plugin文件夹下。(plugin文件夹默认不存在,需要创建)。
2.Mysql版本小于5.1:
如果是 win 2000 的服务器,我们则需要将 udf.dll 文件导到 C:\Winnt\udf.dll 下。
如果是 win2003 服务器,我们则要将 udf.dll 文件导出在 C:\Windows\udf.dll 下。
2)在mysql中引用自定义函数
create function cmdshell return string soname 'udf.dll'
3 )执行命令
select cmdshell("whoami");
3.udf提权条件
1.获得一个数据库账号,拥有对MySQL的insert和delete权限。以root为佳。
2.拥有将udf.dll写入相应目录的权限。
4.udf提权过程
测试环境:
目标操作系统:win10
mysql版本:5.5.53
1)获取mysql安装路径
select @@basedir;
2)创建plugin文件夹
网上有说可以使用ntfs数据流创建,测试失败。。
select 'test' into dumpfile 'D:\\phpStudy\\MySQL\\lib\\plugin::$INDEX_ALLOCATION';
为后续测试,最后手动创建plugin文件夹。
3)创建临时的表保存udf.dll 16进制内容
4)使用dumpfile将临时表中的udf内容写到指定路径
SELECT udf FROM Temp_udf INTO DUMPFILE '<path>';
5)删除临时表
6)创建自定义函数
7)执行cmdshell
5.UDF提权难点
1.高版本mysql中有个参数至关重要,就是secure-file-priv,这个参数限制了MySQL的导出。该参数为NULL时不允许导出、该参数为空时允许在任意文件夹中导出、该参数为某文件夹时允许在该文件夹中导出。
使用load_file、dumpfile等函数时需要在my.ini中奖secure-file-priv设为空:
2.plugin文件夹的创建,未解决
(通过将新值传递给mysqld来更改插件目录变量?
编写一个新的mysql配置文件并将其传递给mysqld?)。
网友评论