UDF:User Defined Function 用户自定义函数,MySQL数据库的初志是用于方便用户举行自定义函数,方便查询一些复杂的数据,同时也有可能被攻击者利用,利用udf举行提权。 提权原理:攻击者通过编写,能调用cmd或者shell的共享库文件(window为.dll,linux为.so),并且导入到一个指定的文件夹目录下,在数据库中通过导入的共享库文件创建自定义函数,该自定义函数功能依照于共享库文件的功能,从而在数据库中调用该自定义函数能够利用系统命令(就像利用version()函数可以查看数据库版本,自定义函数就可以执行系统命令) 执行过程:本质上还是利用了MySQL能够执行系统命令的特点。具体过程如下
(1)攻击者编写,可以调用用cmd或者shel的共享库文件(window为.dll,linux为.so),将共享库导入指定的函数量录中。
(2)在MySQL中创建自定义函数其功能有共享库文件提权。(类似于python中的写了一个函数,其函数重要功能是python内置库中所提供的)
(3)通过创建的函数执行系统命令,实现提权。
1.1共享库文件(UDF文件)指定目录:
select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so';
复制代码
该SQL语句用于导出"foo"表中全部行的数据,并将其以文本形式写入到'/usr/lib/mysql/plugin/raptor_udf2.so'文件中。特殊留意,这里的写入路径是plugin目录的路径,在“提权前提”小节中已经提到,如果你不知道plugin目录的路径,可以用show variables like '%plugin%';
举行查看。
create function do_system returns integer soname 'raptor_udf2.so';