当前位置: 首页 > news >正文

从零搭建内网渗透单域环境:Active Directory攻防实战指南

1. 项目概述:为什么需要从零搭建一个内网渗透单域环境?

如果你对网络安全、渗透测试或者红蓝对抗感兴趣,那么“内网渗透”这个词对你来说一定不陌生。它模拟的是攻击者在突破边界防御后,进入组织内部网络进行横向移动、权限提升和数据窃取的过程。而“域环境”,尤其是微软的Active Directory(AD)域,则是绝大多数企业内网的核心架构。可以说,不懂域渗透,就等于不懂内网渗透。

那么,为什么我们要“从零搭建”这样一个环境呢?直接拿现成的靶机不好吗?这里面的门道可不少。首先,现成的靶机环境往往是固化的,攻击路径和防御措施都已经被设计好了,你只是在走别人设定好的流程。而自己从零搭建,意味着你需要理解域环境中的每一个组件——域控制器、成员服务器、工作站、用户、组策略——是如何协同工作的。这就像学开车,你不能只会在模拟器上开固定路线,必须得自己从启动引擎、挂挡、打方向盘开始,才能真正理解车辆的运行机制。其次,一个完全由你掌控的环境,是进行深度研究、复现新型攻击手法、测试防御策略的绝佳沙盒。你可以随意创建漏洞、配置错误策略、部署恶意软件,而不用担心影响任何真实系统。这对于安全研究员、渗透测试工程师和想深入理解AD安全的学生来说,是至关重要的第一步。这个项目,就是带你亲手打造这样一个专属的、可控的、用于学习和研究的内网渗透单域实验室环境。

2. 环境整体设计与核心组件选型

搭建一个用于渗透测试的单域环境,绝不是简单装几台虚拟机就完事了。它需要模拟一个真实企业内网的简化缩影,同时又要兼顾实验的便捷性和可复现性。我的设计思路是:最小化但功能完整。一个典型的单域环境至少需要三台机器:一台域控制器、一台成员服务器和一台工作站。但为了覆盖更全面的攻击面,我通常会搭建一个包含四台主机的环境。

2.1 核心架构与角色分配

我设计的标准单域环境架构如下:

  1. 域控制器:这是整个域的大脑和心脏。我选择使用Windows Server 20162019。为什么不选最新的2022?因为2016/2019是目前企业环境中保有量极高的版本,更具代表性。它的核心服务是Active Directory 域服务,负责管理所有域用户、计算机、组策略等。我会将其命名为DC01,并分配一个固定的IP地址,例如192.168.1.10

  2. 成员服务器:在真实环境中,除了DC,还会有各种应用服务器,如文件服务器、Web服务器、数据库服务器等。为了模拟横向移动,我会搭建一台Windows Server 2016作为成员服务器,命名为SRV01,IP为192.168.1.20。我会在上面安装一些常见服务,比如IIS一个存在漏洞的旧版应用,为后续的漏洞利用提供场景。

  3. 工作站:代表普通员工的办公电脑。我选择Windows 10专业版,因为它是最广泛使用的客户端系统。将其命名为WIN10-CLIENT,IP为192.168.1.30。这台机器将加入域,供域用户登录使用。

  4. 攻击机:这是我们的“黑客”主机。我强烈推荐使用Kali Linux,因为它集成了几乎所有你需要的渗透测试工具。将其命名为KALI,IP为192.168.1.100。它位于同一个虚拟网络内,模拟已经通过某种方式(如钓鱼邮件)进入了内网的攻击者。

注意:所有虚拟机应使用仅主机模式自定义的私有NAT网络绝对不要使用桥接模式,否则你的实验环境可能会干扰到真实的家庭或公司网络,甚至产生安全风险。

2.2 软件与工具选型理由

  • 虚拟化平台VMware Workstation ProVirtualBox。VMware在性能和网络模拟上更胜一筹,适合追求稳定和效率的用户。VirtualBox免费且跨平台,是入门首选。我个人更倾向于VMware。
  • 操作系统镜像:务必从微软官方渠道下载评估版镜像。切勿使用来路不明的“精简版”或“破解版”,这些版本可能缺失关键组件或引入未知问题,导致实验失败。
  • 渗透测试工具:Kali Linux已经内置了绝大部分。但有几个工具需要特别关注,我们会在攻击阶段详细讲解:nmap(扫描)、impacket套件(协议利用)、BloodHound(域内关系分析)、Mimikatz(凭据提取)等。

这个架构看似简单,但已经包含了域渗透的核心要素:身份认证(Kerberos/NTLM)、权限管理(用户/组)、资源访问(共享、服务)和信任关系(域成员信任DC)。攻击者从一台入域的工作站或服务器出发,到最终完全控制域控制器,这条攻击链上的大多数环节都能在这个环境中得到演练。

3. 分步搭建实战:构建你的单域实验室

接下来,我们进入实操环节。请跟随我的步骤,一步步构建环境。我会详细解释每个操作背后的意图,而不仅仅是告诉你点击哪里。

3.1 第一步:准备虚拟网络与基础系统

首先,在VMware中创建一个新的自定义虚拟网络(例如,VMnet2),将其配置为“仅主机模式”,并关闭DHCP服务。我们将手动分配IP地址,以便于精准控制。

  1. 安装域控制器

    • 新建虚拟机,安装Windows Server 2016/2019。
    • 将网络适配器连接到VMnet2
    • 启动系统,将计算机名改为DC01,重启。
    • 手动设置IPv4地址:192.168.1.10,子网掩码255.255.255.0,网关可留空,DNS服务器指向自己127.0.0.1(安装AD服务后,DC自身就是DNS服务器)。
    • 安装完成后,暂时不要做其他配置。
  2. 安装成员服务器与工作站

    • 同理,安装SRV01WIN10-CLIENT
    • SRV01IP:192.168.1.20,DNS指向192.168.1.10
    • WIN10-CLIENTIP:192.168.1.30,DNS指向192.168.1.10
    • 注意,在加入域之前,它们的DNS必须指向域控制器,否则无法解析域域名。
  3. 安装攻击机

    • 安装Kali Linux,网络同样连接到VMnet2
    • 手动设置IP:192.168.1.100,DNS可以设置为192.168.1.10或公共DNS如8.8.8.8

3.2 第二步:部署Active Directory域服务

这是最关键的一步。在DC01上操作:

  1. 打开“服务器管理器”,点击“添加角色和功能”。
  2. 一路“下一步”,直到“服务器角色”页面。勾选“Active Directory 域服务”。在弹出的窗口中点击“添加功能”。
  3. 继续“下一步”直到安装完成。然后点击黄色警告标志上的“将此服务器提升为域控制器”。
  4. 在“部署配置”中,选择“添加新林”,并输入根域名。这里我使用一个在公网不存在的测试域名:lab.local。这很重要,避免与真实域名冲突。
  5. 设置目录服务还原模式密码(用于灾难恢复,请牢记)。
  6. 后续步骤保持默认,直到“先决条件检查”通过,然后点击“安装”。系统会自动重启。

重启后,DC01就正式成为lab.local域的域控制器了。你可以使用LAB\Administrator账户登录。

3.3 第三步:配置基础域环境

登录DC01后,我们需要创建一些基础对象,模拟真实环境。

  1. 创建组织单元和用户

    • 打开“Active Directory 用户和计算机”。
    • lab.local下,新建组织单元,例如EmployeesServers。这是一种良好的管理实践。
    • Employees下,新建几个用户:alice(普通员工)、bob(IT支持人员)、svc_sql(一个用于运行数据库服务的服务账户)。务必为用户设置初始密码,并勾选“用户下次登录时须更改密码”(对于服务账户svc_sql,则取消勾选,并设置为“密码永不过期”)。
    • Servers下,我们可以预先为SRV01创建一个计算机账户(也可在加域时自动创建)。
  2. 创建安全组

    • EmployeesOU下,新建安全组,如IT_AdminsFinance_Users
    • bob用户加入到IT_Admins组。
  3. 配置组策略

    • 打开“组策略管理”。在lab.local域上右键,“在这个域中创建GPO并在此处链接”。
    • 命名为“Default Domain Policy - Test”。右键编辑。
    • 这里我们可以故意引入一些“不安全”的配置,用于后续攻击演练。例如:
      • 计算机配置 -> 策略 -> Windows设置 -> 安全设置 -> 本地策略 -> 安全选项:将“网络访问:可匿名访问的共享”设置为包含C$等(模拟配置失误)。
      • 计算机配置 -> 策略 -> 管理模板 -> 系统 -> 凭据分配:启用“允许分配保存的凭据用于仅 NTLM 服务器身份验证”(为Wdigest攻击或哈希传递铺路)。
    • 注意:在真实生产环境中,这些策略是极其危险的!但在我们的实验环境中,它们是有价值的“漏洞”。

3.4 第四步:将服务器和工作站加入域

  1. 将SRV01加入域

    • 登录SRV01的本地管理员账户。
    • 打开系统属性,在“计算机名”选项卡点击“更改”。
    • 选择“域”,输入lab.local,点击确定。
    • 输入域管理员凭据(LAB\Administrator)。
    • 重启后,使用域账户(如LAB\bob)登录,验证加域成功。
    • SRV01上安装IIS,并创建一个简单的网页。在防火墙中放行80端口。
  2. 将WIN10-CLIENT加入域

    • 过程与SRV01类似。加域重启后,尝试使用LAB\alice账户登录。
    • 登录成功后,打开文件资源管理器,访问\\SRV01\,应该能看到共享(可能需要输入LAB\alice的凭据)。这验证了基本的域内资源访问功能。

至此,一个基础的单域环境就搭建完成了。此时,你的网络应该看起来是这样的:DC01SRV01WIN10-CLIENT三台机器都在lab.local域内,可以互相通信和进行身份认证。KALI攻击机在同一个网段,但不在域内,模拟一个内部威胁。

4. 核心渗透测试环节实战演练

环境搭建好不是目的,利用它进行实战演练才是关键。下面,我将模拟一个经典的攻击链,展示如何利用这个环境进行内网渗透。

4.1 环节一:信息收集与侦察

攻击者首先需要摸清内网环境。从KALI机器开始。

  1. 网络发现

    # 使用nmap进行存活主机扫描 nmap -sn 192.168.1.0/24

    这会发现192.168.1.10.20.30等主机。

  2. 端口与服务扫描

    # 对DC进行详细端口扫描 nmap -sV -sC -O -p- 192.168.1.10

    你会看到DC开放了53(DNS),88(Kerberos),135139445(SMB),389(LDAP),636(LDAPS),3268(Global Catalog) 等关键端口。这些端口揭示了它是一台域控制器。

  3. SMB枚举

    # 使用enum4linux枚举SMB信息 enum4linux -a 192.168.1.10

    或者使用smbclient

    # 尝试空会话连接(如果前面组策略允许了匿名访问) smbclient -L //192.168.1.10/ -N

    如果成功,可能列出共享列表,甚至获取用户列表。

4.2 环节二:初始访问与权限提升

假设我们通过钓鱼邮件,在WIN10-CLIENT上获得了alice用户的权限(一个普通域用户)。现在我们在KALI上,已经拿到了alice的密码哈希或明文密码。

  1. 使用Impacket进行横向移动

    # 使用alice的凭据,尝试访问SRV01的C$共享 python3 /usr/share/doc/python3-impacket/examples/smbclient.py lab.local/alice:Password123@192.168.1.20 # 如果成功,可以列出目录,上传文件等。
  2. 利用配置错误提取凭据: 如果我们在SRV01上获得了本地管理员权限,可以尝试转储内存中的凭据。这里模拟使用Mimikatz(需在Windows目标机上执行)。在渗透测试中,我们可能通过漏洞上传并执行它。

    # 在Kali上,我们可以使用Impacket的secretsdump.py远程转储DC的哈希(如果拥有域管理员权限或特定的漏洞) # 注意:这需要高权限。这里演示的是攻击的终极目标之一。 python3 /usr/share/doc/python3-impacket/examples/secretsdump.py lab.local/administrator@192.168.1.10 -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0

    重要警告secretsdump.py需要有效的域管理员NTLM哈希。这通常是通过其他手段(如Kerberoasting、AS-REP Roasting、NTLM Relay等)先获取到一个高权限账户的哈希后才能进行的。这正体现了攻击链的递进性。

4.3 环节三:域内权限维持与横向移动

  1. 黄金票据攻击: 如果我们通过secretsdump获取了域控制器的krbtgt账户的哈希,我们就可以伪造任意用户的TGT(票据授予票据),即生成“黄金票据”。

    # 在Kali上使用Impacket的ticketer.py python3 /usr/share/doc/python3-impacket/examples/ticketer.py -nthash <krbtgt_nt_hash> -domain-sid <domain_sid> -domain lab.local administrator

    生成票据后,使用export KRB5CCNAME环境变量指定票据文件,即可用administrator身份访问任何域资源。

  2. BloodHound 图谱分析: 这是现代域渗透的“神器”。我们需要在KALI上运行BloodHound的采集器SharpHound.exe(需上传到已控的域内主机执行),它会收集整个AD的拓扑、权限关系数据,然后导入到Kali上的BloodHound UI中进行分析。

    • 在Kali启动BloodHound:bloodhound &
    • 在Neo4j中设置密码(默认bloodhound)。
    • 在UI中上传SharpHound收集的zip文件。 BloodHound会清晰地展示出从alice域管理员的攻击路径,例如:alice是某服务器的本地管理员 -> 该服务器上有某服务账户的凭据 -> 该服务账户是某特权组的成员 -> 该组对域控制器有写权限。这为我们提供了清晰的横向移动路线图。

5. 常见问题、排查技巧与防御思考

在搭建和演练过程中,你肯定会遇到各种问题。这里我分享一些踩过的坑和解决思路。

5.1 环境搭建常见问题

问题现象可能原因排查与解决
计算机无法加入域1. DNS解析失败。
2. 网络不通。
3. 域控制器防火墙阻止。
4. 时间不同步。
1. 确保客户机DNS设置为DC的IP。
2. 在客户机上ping DC的IP和域名lab.local
3. 在DC上关闭防火墙或放行相关端口(实验环境可暂时关闭)。
4. 确保所有机器时间相差不超过5分钟。
域用户登录失败1. 密码错误。
2. 账户被禁用。
3. 用户无权在此计算机登录。
1. 仔细检查密码。
2. 在AD用户和计算机中检查账户状态。
3. 在DC的“本地安全策略”或域组策略中,检查“允许本地登录”权限。
Kali无法解析域名DNS设置错误。在Kali的/etc/resolv.conf中增加nameserver 192.168.1.10。注意网络重启可能会重置,建议修改/etc/resolvconf/resolv.conf.d/head文件。
Impacket工具连接失败1. 认证失败。
2. 目标服务未开启。
3. 协议版本问题。
1. 使用-hashes参数时,确保哈希格式正确(LM:NT)。
2. 使用nmap确认目标端口开放。
3. 尝试使用-target-ip参数指定IP。

5.2 渗透演练中的技巧与心得

  1. 善用crackmapexec:这是内网渗透的瑞士军刀。它可以批量测试SMB、WinRM、MSSQL等的凭据,执行命令,上传下载文件等。命令如crackmapexec smb 192.168.1.0/24 -u user.txt -p pass.txt可以快速进行密码喷洒攻击。

  2. 关注服务账户:在BloodHound中,重点关注像svc_sql这类服务账户。它们通常密码不会频繁更改,且可能被配置了过高的权限。通过Kerberoasting攻击(使用GetUserSPNs.py)可以离线破解其密码哈希。

  3. NTLM Relay攻击的利用:在我们的实验环境中,可以故意让SRV01的LLMNR、NetBIOS协议开启,并关闭SMB签名(默认关闭),从而在内部网络发起NTLM Relay攻击,将其他主机的认证流量中继到DC,直接获取高权限。这需要配合Responderntlmrelayx.py工具。

  4. 日志与监控:别忘了从防御者视角看问题。在DC和成员服务器上打开“审核策略”,记录成功和失败的登录事件、账户管理事件等。然后在你发起攻击时,去“事件查看器”里观察这些日志是如何记录的。这能帮你更好地理解攻击检测原理。

5.3 从攻击到防御的思维转变

搭建并攻破自己的域环境后,最大的收获不是学会了几条攻击命令,而是深刻理解了“攻击路径”和“安全假设”。你会明白:

  • 最小权限原则为何如此重要:如果alice只是一个普通用户,没有对任何服务器的本地管理员权限,很多横向移动手段就会失效。
  • 强密码与定期改密的价值:如果krbtgt账户的密码强度极高且定期更改,黄金票据攻击的窗口期就很短,危害降低。
  • 启用SMB签名的必要性:如果所有服务器都强制启用SMB签名,NTLM Relay攻击将无法成功。
  • 禁用过时协议的意义:关闭LLMNR和NetBIOS,可以很大程度上消除基于名称解析的欺骗攻击。

这个自己搭建的单域环境,就像一个安全的“道场”。你既可以在这里练习最锋利的“矛”(攻击技术),也可以在这里锻造最坚固的“盾”(防御策略)。每一次成功的攻击,都应该对应一个或多个防御方案的思考。只有这样,你的技能才是完整和立体的。

http://www.jsqmd.com/news/1152425/

相关文章:

  • NVIDIA A800/A100 服务器环境配置:Ubuntu 22.04 + CUDA 12.1 + PyTorch 2.1 完整避坑指南
  • Cytoscape 3.10 下载安装教程 专业生物科学数据分析与蛋白互作网络可视化软件下载安装步骤
  • 专家系统(ES)与ChatGPT对比:3个维度解析符号AI与神经网络的差异与融合
  • 说说java中hashMap的原理
  • Ubuntu 24.04 彻底关闭自动更新(桌面+服务器通用)
  • TI DLP4710 完整产品线及应用场景
  • GPT-4 API 成本优化实战:3种调用策略对比,Token消耗降低40%
  • 软件 License 防破解策略对比:3 种常见攻击手段与 5 种加固方案实测
  • Android BLE 开发实战:连接 GATT 服务器与 20 字节数据分包传输
  • 【大数据课程设计/毕业设计】基于 Hadoop 的外卖配送用户评价挖掘系统设计与实现 基于智能数据分析的外卖配送运营决策系统【附源码、数据库、万字文档】
  • Go HTTP Client 连接池:推理调用别忘了调 MaxIdleConns
  • 射频混频器测试——变频损耗、隔离度、1dB压缩点一次讲透
  • YOLOv6模型高效转换昇腾OM格式实战指南
  • 工业负载控制方案:TPD2017FN与STM32F401RB应用指南
  • LLM创意写作能力深度解析:技术瓶颈与优化策略
  • 2026年,这家切削液净化专家如何让工厂废液变“黄金”?
  • YOLO11超参数优化实战:提升目标检测性能的关键方法
  • C++详细分析讲解引用的概念与使用
  • CVPR 2025 | FEFM:频域穷尽融合机制,CRM+DRM双分支协同挖掘跨场共性与差异特征!
  • CRU 数据与 ArcGIS 集成:3 步完成站点气候值批量提取与重采样
  • 经销商管理系统适合哪些行业使用?2026年好用的经销商管理系统服务商推荐
  • 开发者“复活”Windows Movie Maker 视频编辑工具,内存占用比微软 Clipchamp 低 97%
  • 靠谱的EMBA院校对比|2026内地及境外头部EMBA综合实力榜单
  • Multi-Raft 分片架构的实现细节:数据放置策略与 Leader 均衡的工程权衡
  • 支付逻辑漏洞防御:5 项后端校验策略与 3 个真实代码修复案例
  • 无密码卸载飞连
  • 你刷到的那些好评,可能一半是 AI 写的
  • 老客户流失多因报告纰漏,IACheck AI报告审核通审Agent版如何通过智能审核体系稳住检测机构口碑?
  • 科大讯飞六麦语音模块 Linux SDK 部署:从 APPID 申请到 udev 规则配置的 8 个关键步骤
  • Kimi K2与DeepSeek V3性能实测对比:吞吐量、长文本、代码生成、中文理解、显存占用、API延迟、微调成本——98%工程师不知道的隐藏短板