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)使用命名管道在远程主机上执行命令
  • 工作流程:
    1. 通过SMB连接到目标系统的ADMIN$共享
    2. 上传PSEXESVC.exe
    3. 使用服务控制管理器启动该程序
    4. 在远程系统上创建命名管道用于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原则,尽量减少产生的日志或使其看起来正常。

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