肚子难受了两天,躺了两天
关于 UDF ,我当时第一想到的是 sqlmap 里的 -os-shell
这两者之间又有怎么样的区别?
经过我查了一番资料
UDF 全称为 User Defined Functions ,翻译过来就是用户可自定义函数.
UDF 适用于只知道root 账户密码,且前提是secure_file_priv 为空,且 MySQL 有写入和删除权限
sqlmap里的-os-shell 也是要有一样的前提,但是实现的原理不同,主要是用 into out_file 的命令,偷偷写了一份文件上传,又偷偷上传了包含可以执行各种函数的 eval() 的文件.
这二者都需要知道文件的绝对位置
可以用下面两个 MySQL 语句来知道文件的位置
show variables like 'plugin%';
#查找 plugin 所在位置
select @@basedir;
#查看 mysql 所在目录
部署软件:小皮助手
MySQL 查询工具: phpMyAdmin
MySQL 版本: 5.7.26
我们要进行检测是否有条件进行渗入
- 检测secure_file_priv是否为空(不是为null)
show global variables like 'secure%';
如果出现下面这个情况那么就是不可以
null就是不允许
所以放弃吧,本文结束(?
开玩笑啦,没有条件也要创造条件上!
既然是基于本机,就改下配置文件吧
在 [mysqld] 里面插入这句话即可
secure_file_priv=
重启 MySQL 服务,出现以下截图内容就是成功
- 检测软件版本
show variables like '%compile%';
我们可以看出系统和软件都是 x64 的
我们只需要获取 x64 的udf.dll 即可
满足条件了,又该如何进行提权呢?
- 获取 udf.dll
有两种办法让 lib/plugin 里面有 udf.dll,
第一种办法是通过 webshell 将 udf.dll 拖进去
第二种办法是让 MySQL 写入 16进制的文件
由于实在本机上运行,以上两个办法就先不写
获取 udf.dll , kali里面有编译好的dll文件
只要去以下路径就可以
/usr/share/metasploit-framework/data/exploits/mysql
在这里本人用的是基于 wsl2 的 kali Linux (不得不说,传文件挺好用的)
由于 MySQL 是5.7版本,所以我们需要创建 lib/plugin 文件夹
把 udf.dll 文件放入进去
- 创建自定义函数
create function sys_eval returns string soname 'udf.dll';
#udf.dll取决于你放入文件的名称
然后再执行 sql 语句就可以了
SELECT sys_eval ('whoami');
但是结果应该是当前的用户
但是实际出的却是 0x5f…
这是触发了微软某种保护机制吗?
希望有大佬能告诉我