复用1433端口进行内网渗透
字数 1302 2025-08-11 08:36:00

MSSQL端口复用内网渗透技术详解

一、技术背景

在高度隔离的网络环境中,当ACL(访问控制列表)严格限制只允许访问目标的MSSQL端口(默认1433)时,传统的渗透方法可能失效。本文介绍一种通过MSSQL CLR功能实现端口复用的内网渗透技术。

二、技术原理

1. 核心机制

  • 利用MSSQL的CLR(Common Language Runtime)功能加载自定义程序集
  • 通过CLR加载C语言编写的SOCKS5代理DLL(reciclador.dll)
  • 使用文件描述符爆破技术复用现有TCP连接

2. 相关概念

  • CLR集成:SQL Server允许通过.NET语言编写存储过程、函数等
  • 端口复用:在已有连接上承载额外通信通道的技术
  • 文件描述符爆破:尝试不同文件描述符值来寻找可复用的连接

三、工具准备

1. 项目地址

  • 原始项目:https://github.com/0xdf-0xdf/mssqlproxy/
  • 修复版项目:https://github.com/djhons/mssqlproxy/

2. 环境要求

  • 目标SQL Server版本:2017以下版本需特殊处理
  • 需要具备SQL Server管理员权限(加载CLR需要UNSAFE权限)

四、实施步骤

1. 部署代理组件

-- 启用CLR集成
sp_configure 'clr enabled', 1
RECONFIGURE

-- 设置数据库为可信任(加载非签名程序集需要)
ALTER DATABASE [当前数据库] SET TRUSTWORTHY ON

-- 创建程序集
CREATE ASSEMBLY [Reciclador] FROM 'C:\path\to\reciclador.dll' WITH PERMISSION_SET = UNSAFE

-- 创建存储过程
CREATE PROCEDURE [dbo].[sp_socks5]
    @port int
AS EXTERNAL NAME [Reciclador].[StoredProcedures].[sp_socks5]

2. 启动SOCKS5代理

-- 启动代理监听指定端口
EXEC sp_socks5 1080

3. 客户端连接

使用任意SOCKS5客户端连接目标SQL Server的1433端口,通过建立的代理通道进行内网渗透。

五、常见问题与修复

1. 文件下载问题

现象:下载文件大小为0,但下载时间随文件大小增加
修复:修改代码中的文件写入方式为:

f.write(bytes.fromhex(data.decode()))

2. SQL Server版本兼容性

问题:SQL Server 2017+使用TRIM()函数,旧版本不支持
解决方案:将代码中的TRIM()替换为LTRIM(RTRIM())

3. CPU占用100%

原因:reciclador.dll在网络异常时进入死循环
修复方法

  1. 将错误处理中的return 1改为return -1
  2. 增加发送成功判断逻辑

4. 文件描述符不可用问题

现象:爆破出的文件描述符可能不可用
解决方案:多次尝试运行脚本,直到找到可用的文件描述符

六、技术限制与注意事项

  1. 稳定性问题:由于采用文件描述符爆破技术,连接可能不稳定
  2. 权限要求:需要足够权限加载非签名CLR程序集
  3. 性能影响:可能导致SQL Server性能下降
  4. 检测风险:异常CLR加载可能触发安全告警
  5. 版本兼容性:不同SQL Server版本可能需要调整代码

七、防御建议

  1. 限制CLR集成功能的使用
  2. 监控非标准程序集的加载行为
  3. 实施最小权限原则,避免不必要的数据库权限
  4. 定期审计数据库中的可疑存储过程和程序集
  5. 启用SQL Server的登录审计功能

八、扩展思考

  1. 类似技术可应用于其他支持自定义代码执行的数据库系统(如MySQL的UDT功能)
  2. 端口复用技术可绕过严格的网络隔离策略
  3. 文件描述符爆破技术在其他场景下的应用可能性

通过以上技术,可以在高度受限的网络环境中建立隐蔽的通信通道,为后续内网渗透提供可能。

MSSQL端口复用内网渗透技术详解 一、技术背景 在高度隔离的网络环境中,当ACL(访问控制列表)严格限制只允许访问目标的MSSQL端口(默认1433)时,传统的渗透方法可能失效。本文介绍一种通过MSSQL CLR功能实现端口复用的内网渗透技术。 二、技术原理 1. 核心机制 利用MSSQL的CLR(Common Language Runtime)功能加载自定义程序集 通过CLR加载C语言编写的SOCKS5代理DLL(reciclador.dll) 使用文件描述符爆破技术复用现有TCP连接 2. 相关概念 CLR集成 :SQL Server允许通过.NET语言编写存储过程、函数等 端口复用 :在已有连接上承载额外通信通道的技术 文件描述符爆破 :尝试不同文件描述符值来寻找可复用的连接 三、工具准备 1. 项目地址 原始项目:https://github.com/0xdf-0xdf/mssqlproxy/ 修复版项目:https://github.com/djhons/mssqlproxy/ 2. 环境要求 目标SQL Server版本:2017以下版本需特殊处理 需要具备SQL Server管理员权限(加载CLR需要 UNSAFE 权限) 四、实施步骤 1. 部署代理组件 2. 启动SOCKS5代理 3. 客户端连接 使用任意SOCKS5客户端连接目标SQL Server的1433端口,通过建立的代理通道进行内网渗透。 五、常见问题与修复 1. 文件下载问题 现象 :下载文件大小为0,但下载时间随文件大小增加 修复 :修改代码中的文件写入方式为: 2. SQL Server版本兼容性 问题 :SQL Server 2017+使用 TRIM() 函数,旧版本不支持 解决方案 :将代码中的 TRIM() 替换为 LTRIM(RTRIM()) 3. CPU占用100% 原因 :reciclador.dll在网络异常时进入死循环 修复方法 : 将错误处理中的 return 1 改为 return -1 增加发送成功判断逻辑 4. 文件描述符不可用问题 现象 :爆破出的文件描述符可能不可用 解决方案 :多次尝试运行脚本,直到找到可用的文件描述符 六、技术限制与注意事项 稳定性问题 :由于采用文件描述符爆破技术,连接可能不稳定 权限要求 :需要足够权限加载非签名CLR程序集 性能影响 :可能导致SQL Server性能下降 检测风险 :异常CLR加载可能触发安全告警 版本兼容性 :不同SQL Server版本可能需要调整代码 七、防御建议 限制CLR集成功能的使用 监控非标准程序集的加载行为 实施最小权限原则,避免不必要的数据库权限 定期审计数据库中的可疑存储过程和程序集 启用SQL Server的登录审计功能 八、扩展思考 类似技术可应用于其他支持自定义代码执行的数据库系统(如MySQL的UDT功能) 端口复用技术可绕过严格的网络隔离策略 文件描述符爆破技术在其他场景下的应用可能性 通过以上技术,可以在高度受限的网络环境中建立隐蔽的通信通道,为后续内网渗透提供可能。