Offensive Lateral Movement(上)
字数 1590 2025-08-26 22:11:45
横向渗透技术详解(上)
横向渗透概述
横向渗透是指通过一台已被攻陷的主机渗透其他主机的过程。传统方法通常利用powershell.exe在远程主机上运行base64编码的命令,但这种方法容易被检测和阻止。现代横向渗透要求实施过程安全可靠(OpSec),产生的日志要尽可能少或看起来正常。
关键术语解释
命名管道
- 进程之间通过SMB(TCP 445端口)进行通信的方式
- 运行于OSI模型的第5层
- 可以类似端口侦听连接的方式来侦听请求
访问令牌
- 描述进程或线程安全上下文的对象
- 包含用户帐户的标识和权限信息
- 用户登录时创建,所有以该用户身份执行的进程都具有副本
网络登录(Type 3)
- 帐户在远程系统/服务上进行身份验证时使用
- 可重用凭证不会发送到远程系统
- 导致"双跃点"问题:即使连接上目标系统,也无法通过SMB进行进一步认证
横向渗透技术详解
1. PsExec技术
原理:
- 微软Sysinternals套件提供的工具
- 通过端口445(SMB)使用命名管道在远程主机上执行命令
- 工作流程:
- 通过SMB连接到目标系统的ADMIN$共享
- 上传PSEXESVC.exe
- 使用服务控制管理器启动该程序
- 在远程系统上创建命名管道用于I/O
语法示例:
psexec \\test.domain -u Domain\User -p Password ipconfig
Cobalt Strike实现:
- 创建PowerShell脚本对payload进行base64编码
- 压缩成one-liner
- 连接到ADMIN\(或C\)共享并运行PowerShell命令
变体:
- PsExec:生成rundll32.exe进程
- PsExec(psh):调用Powershell.exe进程
检测指标:
- 创建服务并运行base64编码命令
- 使用默认命名的命名管道
- rundll32.exe不带参数运行
2. SC(服务控制器)技术
原理:
- 通过服务控制管理器(SCM)控制服务
- 通过SMB调度任务
语法示例:
sc \\host.domain create ExampleService binpath="c:\windows\system32\calc.exe"
sc \\host.domain start ExampleService
注意事项:
- 可执行文件必须是特定服务对应的二进制文件
- 服务二进制文件必须"签入"到SCM中
- 非服务二进制文件会导致代理/beacon立即终止
Cobalt Strike实现:
- 专门为服务创建可执行文件
3. WMI(Windows Management Instrumentation)技术
原理:
- Windows系统内置服务,可通过端口135使用RPC进行远程访问
- 管理员可远程执行自动管理任务
语法示例:
wmic /node:target.domain /user:domain\user /password:password process call create "C:\Windows\System32\calc.exe"
Cobalt Strike实现:
- 利用WMI服务执行PowerShell payload
- PowerShell.exe在启动内置WMI服务时打开
- 创建命名管道进行通信(通过SMB)
特点:
- 虽然命名管道非必需,但Cobalt Strike需要它进行通信
4. WinRM(Windows远程管理)技术
原理:
- 用于管理服务器硬件,通信方式为WMI over HTTP(S)
- 使用5985(HTTP)和5986(HTTPS)端口
- 默认安装但通常需要手动开启(服务器操作系统2012R2+版本默认开启)
启用命令:
Enable-PSRemoting -Force
非CS实现:
winrs -r:EXAMPLE.lab.local -u:DOMAIN\user -p:password calc.exe
Cobalt Strike实现:
- 必须使用PowerShell启动
- 远程操作需要借助DCOM或WMI
检测指标:
- 启动WinRM侦听器
- 执行payload时会产生明显活动
5. SchTasks(计划任务)技术
原理:
- 类似Linux中的cron-job
- 最初在端口135上运行,之后使用临时端口通过DCE/RPC通信
语法示例:
schtasks /create /tn ExampleTask /tr c:\windows\system32\calc.exe /sc once /st 00:00 /S host.domain /RU System
schtasks /run /tn ExampleTask /S host.domain
schtasks /F /delete /tn ExampleTask /S host.domain
Cobalt Strike实现:
shell schtasks /create /tn ExampleTask /tr c:\windows\system32\calc.exe /sc once /st 00:00 /S host.domain /RU System
shell schtasks /run /tn ExampleTask /S host.domain
shell schtasks /F /delete /tn ExampleTask /S host.domain
OpSec注意事项:
- 执行后应及时删除任务以避免留下痕迹
总结
本文详细介绍了五种横向渗透技术:PsExec、SC、WMI、WinRM和SchTasks。每种技术都有其特定的工作原理、实现方式和检测指标。在实际渗透测试中,应根据目标环境选择合适的技术,并注意OpSec原则,尽量减少产生的日志或使其看起来正常。