UDF全名UserDefineFunction(用户自定义函数),用户可通过自己定义新的函数和来拓展Mysql的技术手段。

UDF提权通俗的来说就是通过用户自定义执行系统命令的函数。

利用条件:

1、mysql中的secure_file_priv为空

2、当mysql版本大于5.1以上时要将udf文件放在mysql根目录下的lib/plugin文件夹中(但是这个文件夹默认不存在,需要自己创建)

3、当mysql版本大于5.0且小于5.1时需要导出到目标服务器系统目录

4、当mysql版本小于5.0时可随意导出

5、需要有对数据库有一定权限的用户

测试环境:

靶机:192.168.17.127  mysql5.5.29

kali攻击机:192.168.17.116

  • 无回显提权

在msf中search mysql,选择payload

sudo MySQL 提权 mysql udf提权条件_sql

 

 use 22,然后查看需要配置的选项 ,show options

sudo MySQL 提权 mysql udf提权条件_系统命令_02

 

 输入靶机ip和数据库用户密码然后直接执行

可以看到msf创建了一个cpcuQWEG.dll的文件在lib/plugin目录下,并且生成了一个sys_exec()的函数,这里msf没有直接生成一个连接,需要回到数据库进行执行命令

sudo MySQL 提权 mysql udf提权条件_mysql_03

 

 回到数据库查询mysql库中的func表可以看到刚才msf生成的函数

sudo MySQL 提权 mysql udf提权条件_mysql_04

 

执行select sys_exec('whoami');发现没有回显,这是因为创建的msf生成的sys_exec()函数执行了系统命令后只返回退出码,windows默认成功执行命令后的退出码为0,所以也可以通过判断退出码来知道是否执行成功

sudo MySQL 提权 mysql udf提权条件_系统命令_05

 

 这时候我们就可以添加后门用户,并且添加到管理员组里

sudo MySQL 提权 mysql udf提权条件_sql_06

 

 如果开启了远程登录就可以直接使用kali的rdesktop进行登录了

sudo MySQL 提权 mysql udf提权条件_系统命令_07

 

  • 有回显提权

我们可将msf中的udf提权文件自己拿出来进行提权(在/usr/share/metasploit-framework/data/exploits/mysql下.dll是windows提权文件.so对linux提权的文件)

(PS:sqlmap里面的udf文件还没试成功过。。在sqlma的根目录下的data\udf\mysql文件夹中,有windows和linux系统区分,再里面还有32位和64位系统区分,要根据靶机mysql来选择)

可执行show variables like '%complie%'来查看

sudo MySQL 提权 mysql udf提权条件_sudo MySQL 提权_08

 

 

sudo MySQL 提权 mysql udf提权条件_系统命令_09

 

 这时候我们将msf下的lib_mysqludf_sys_32.dll文件上传到靶机的plugin目录下

然后执行创建函数命令

第一个圈是创建的函数(sys_eval函数可以执行系统命令并输出结果),后面就是刚才使用的dll文件。

sudo MySQL 提权 mysql udf提权条件_sql_10

 

 这时候就可以指定系统命令了

sudo MySQL 提权 mysql udf提权条件_mysql_11