UDF提权

作者: 骑猪满天飞 | 来源:发表于2018-10-22 16:30 被阅读0次

    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?)。

    相关文章

      网友评论

          本文标题:UDF提权

          本文链接:https://www.haomeiwen.com/subject/iemgzftx.html