udf(User-Defined Functions)用户自定义函数
UDF是mysql的一个拓展接口。用户可以通过自定义函数实现在mysql中无法方便实现的功能,对MYSQL的功能进行扩充,性质就象使用本地MYSQL函数如abs()或concat() ,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样,
Mysql版本 | 提权dll存放位置 |
>5.1 | mysql根路径(select @@basedir)下/lib/plugin/ |
<5.1 | 系统目录c:\windows\system32下 |
条件:mysql账号有insert和delete权限,一般root账号最佳,具备root账号所具备的条件也可以。
secure_file_priv不能为NULL
secure_file_priv是用来限制load_file()、load dumpfile、into outfile在哪个目录上拥有上传或者读取文件的权限,如果想写shell的话这个值不能为NULL(本地自己操作的时候,可以通过my.ini进行修改)
当secure_file_priv的值为NULL时表示不允许导入导出,这个时候不能提权
当secure_file_priv的值为空时表示没有限制,可以任意导入导出,这个时候可以提权
当secure_file_priv的值为某个目录时,表示只能在这个文件夹下面导入导出,这时候不能提权
攻击者可以利用lib_mysqludf_sys提供的函数执行系统命令。
函数:
sys_eval,执行任意命令,并将输出返回。
sys_exec,执行任意命令,并将退出码返回。
sys_get,获取一个环境变量。
sys_set,创建或修改一个环境变量
select * from mysql.func 来查看绑定的函数
这些函数哪里来的?
其实很多对于这个提权,都是会用,但是没想过这些函数是怎么跑出来的?
而sys_eval这些函数,都是来自于dll中的函数
https://github.com/mysqludf/lib_mysqludf_sys/blob/master/lib_mysqludf_sys.c