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
use 22,然后查看需要配置的选项 ,show options
输入靶机ip和数据库用户密码然后直接执行
可以看到msf创建了一个cpcuQWEG.dll的文件在lib/plugin目录下,并且生成了一个sys_exec()的函数,这里msf没有直接生成一个连接,需要回到数据库进行执行命令
回到数据库查询mysql库中的func表可以看到刚才msf生成的函数
执行select sys_exec('whoami');发现没有回显,这是因为创建的msf生成的sys_exec()函数执行了系统命令后只返回退出码,windows默认成功执行命令后的退出码为0,所以也可以通过判断退出码来知道是否执行成功
这时候我们就可以添加后门用户,并且添加到管理员组里
如果开启了远程登录就可以直接使用kali的rdesktop进行登录了
- 有回显提权
我们可将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%'来查看
这时候我们将msf下的lib_mysqludf_sys_32.dll文件上传到靶机的plugin目录下
然后执行创建函数命令
第一个圈是创建的函数(sys_eval函数可以执行系统命令并输出结果),后面就是刚才使用的dll文件。
这时候就可以指定系统命令了