1、udf提权
当获取到mysql的root权限,需要进行权限提升,可以尝试使用udf提权
首先需要查看mysql是否有导入导出功能,如果secure_file_priv为null,则无法使用udf提权,如果value值为空,则可以继续尝试
show variables like 'secure_file_priv';
-
secure_file_priv的value为null ,不允许导入导出
-
secure_file_priv的value为/dir/ ,只允许dir目录下导入导出
-
secure_file_priv的value为空,无限制
也可以查看mysql配置文件的 [mysqld]项
查看数据库版本
1.mysql<5.1 导出目录 c:/windows 或 system32
2.mysql=>5.1 导出mysql/lib/plugin/的绝对路径(如C:/phpstudy/mysql /lib/plugin/)
当版本大于5.1时,
看看是否有plugin目录,默认是没有plugin目录的,需要创建
show variables like "%plugin%";
可以先写入一句话木马进行连接,然后再创建plugin目录
查看mysql路径
select @@basedir;
查看系统,如果是win32,则对应udf_32.dll,linux是.so
show variables like "%compile%";
选择udf文件,可以去msf目录 /usr/share/metasploit-framework/data/exploits/mysql或者sqlmap的 /sqlmap/udf/mysql,
也可以网上下载 https://github.com/rapid7/metasploit-framework/tree/master/data/exploits/mysql
我试了下sqlmap的udf文件根本没用,会报错,用msf的又可以
如果是连接上了后门,可以直接上传 lib_mysqludf_sys_32.dll文件到 plugin目录下
蚁剑连接后门直接上传
也可以通过sql语句进行写入,将lib_mysqludf_sys_32.dll文件导出16进制,这里采用010Editor工具
用notepad打开导出的16进制文件,将所有空格和换行替换为空。使用快捷键Ctrl+F
分别将空格、\n、\r选择全部替换为空得到一行16进制的序列
利用下面的语句进行写入:
如:select 0x4D5A90000.... into dumpfile "C:/phpstudy-5.4/MySQL/lib/plugin/udf.dll";
udf.dll名字自定义
写入成功
然后创建sys_eval命令函数
报上图提示的错误,则有可能是导入的udf.dll有问题,我选择sqlmap自带的会报这个错,写入的时候不加0x或者不去空格也会报错
当创建sys_eval函数的时候不报错则说明提权成功,可以查看权限或者反弹shell
select sys_eval('net user');
我这得到的是不完整的16进制,需要点击选项,然后选择完整内容,再重新执行,得到完整的16进制
复制到在线编码网站: https://www.sojson.com/hexadecimal.html
成功提权
也可以利用脚本直接提权,写入或上传脚本到网站目录,用浏览器访问即可
选择对应版本的udf.dll进行导出,没有报错,导出成功,如果失败可能是plugin目录不存在或者版本udf文件版本选择不正确
成功提权