权限提升与横向移动:从内网渗透到域控的完整技术图谱

1. 引言:为什么权限提升与横向移动是内网渗透的核心

在真实的攻防对抗中,外网突破往往只是第一步。攻击者拿到一台主机的初始权限后,真正的挑战才刚刚开始:如何从普通用户提升为管理员,如何从单台主机扩散到整个内网,最终拿下域控制器。这一过程的核心技术就是权限提升(Privilege Escalation)与横向移动(Lateral Movement)。本文将从 Linux 与 Windows 两大平台出发,系统梳理提权技术、内网主机发现、域环境信息收集以及哈希传递、票据传递等横向移动技术,帮助读者建立完整的内网渗透知识框架。

需要特别强调的是,本文所有技术内容仅用于合法的安全测试、渗透测试授权评估与防御体系建设。未经授权对他人系统进行测试属于违法行为,请务必在获得书面授权的前提下实践。

2. 权限提升基础:从普通用户到管理员

权限提升是指攻击者在获得目标系统初始访问权限后,利用系统配置缺陷、漏洞或错误权限设置,将自身权限从低权限用户提升到更高权限(如 root 或 Administrator)的过程。提权通常分为两类:纵向提权(Vertical Privilege Escalation)和横向提权(Horizontal Privilege Escalation)。纵向提权是提升自身权限等级,横向提权则是以相同权限访问其他用户资源。在实际渗透中,纵向提权是主要目标。

提权的前提是信息收集。拿到一台主机后,首先要全面了解系统版本、补丁情况、当前用户权限、可写目录、计划任务、服务配置等信息。这些信息决定了后续提权路径的选择。下面分别介绍 Linux 和 Windows 两大平台的常见提权技术。

3. Linux 系统提权技术

3.1 SUID 滥用提权

SUID(Set User ID)是 Linux 的一种特殊文件权限。当可执行文件设置了 SUID 位后,任何用户运行该文件时,进程的有效用户 ID 会临时变为文件属主的 ID。如果属主是 root,那么普通用户运行该程序时就能以 root 权限执行。攻击者一旦发现系统中有可利用的 SUID 程序,就可能借此获得 root shell。

查找 SUID 文件的常用命令如下:

bash 复制代码
find / -perm -4000 -type f 2>/dev/null
find / -perm -u=s -type f 2>/dev/null

常见的可利用 SUID 程序包括:findvimnanolessmorecpmvpythonperl 等。以 find 为例,如果 find 设置了 SUID 位,可以通过 -exec 参数执行命令:

bash 复制代码
find / -exec whoami \;
find / -exec /bin/sh -p \;

如果 python 具有 SUID 权限,可以执行:

bash 复制代码
python -c 'import os; os.setuid(0); os.system("/bin/bash")'

防御 SUID 提权的核心是定期审计系统 SUID 文件,移除不必要的 SUID 位,并遵循最小权限原则。

3.2 内核漏洞提权

内核漏洞提权是 Linux 提权中影响面最广、危害最大的方式。当系统内核存在已知漏洞且未及时打补丁时,攻击者可以编译对应的漏洞利用代码(Exploit),直接获取 root 权限。经典的 Linux 内核提权漏洞包括 Dirty COW(CVE-2016-5195)、Dirty Pipe(CVE-2022-0847)、OverlayFS 系列漏洞等。

提权前需要先确认内核版本:

bash 复制代码
uname -a
cat /etc/os-release

拿到内核版本后,可以在本地漏洞库或 Exploit-DB 中搜索匹配的利用代码。以 Dirty Pipe 为例,该漏洞影响 Linux 内核 5.8 至 5.16.11 版本,攻击者可以覆盖只读文件内容,进而实现提权。利用代码通常以 C 语言编写,需要在目标主机上编译执行:

bash 复制代码
gcc exploit.c -o exploit
./exploit

内核漏洞提权虽然威力巨大,但利用代码可能造成系统崩溃或数据损坏,在真实环境中需要谨慎评估稳定性。防御方面,及时更新内核补丁是最有效的措施。

3.3 其他常见 Linux 提权方式

除了 SUID 和内核漏洞,Linux 提权还有多种常见路径。可写路径提权是指攻击者发现 PATH 环境变量中存在可写目录,通过放置同名恶意程序劫持命令执行。例如,如果当前用户对 /usr/local/bin 有写权限,而系统命令通过 PATH 调用,攻击者可以放置恶意 psls 程序实现提权。

Cron 计划任务提权也是常见手法。管理员配置的定时任务如果以 root 权限运行,且脚本所在目录或脚本本身可写,攻击者可以修改脚本内容,等待下次任务执行时获得 root shell。查看计划任务的命令:

bash 复制代码
cat /etc/crontab
ls -la /etc/cron.*
crontab -l

sudo 配置不当同样值得关注。如果 /etc/sudoers 中配置了某些命令允许当前用户以 root 权限免密执行,攻击者可以利用这些命令提权。例如允许执行 sudo vim,则可以在 vim 中执行 :!sh 获得 shell。检查当前用户 sudo 权限:

bash 复制代码
sudo -l

此外,Docker 组提权、Capabilities 配置不当、NFS 配置错误等也是实际渗透中常见的提权入口。

4. Windows 系统提权技术

4.1 内核漏洞提权

Windows 内核漏洞提权与 Linux 类似,利用操作系统内核或驱动中的漏洞获取 SYSTEM 权限。经典的 Windows 提权漏洞包括 MS17-010(永恒之蓝)、CVE-2020-0796(SMBGhost)、PrintNightmare(CVE-2021-34527)等。攻击者首先需要确认系统版本和补丁情况:

bash 复制代码
systeminfo
wmic qfe list

拿到补丁信息后,可以使用 Windows-Exploit-Suggester 等工具自动比对缺失补丁并推荐利用代码。以 PrintNightmare 为例,该漏洞影响 Windows Print Spooler 服务,攻击者可以通过精心构造的打印请求在目标主机上执行任意代码,获得 SYSTEM 权限。

4.2 服务配置错误提权

Windows 服务配置错误是实际渗透中非常常见的提权路径。主要包括以下几种情况:服务路径权限可控、服务二进制文件可替换、未引用的服务路径(Unquoted Service Path)、服务权限配置不当等。

未引用的服务路径是经典案例。如果服务的可执行文件路径包含空格且未加引号,Windows 会按照路径逐段解析。例如路径 C:\Program Files\My App\service.exe 未加引号时,系统会依次尝试执行 C:\Program.exeC:\Program Files\My.exe 等。如果这些中间目录可写,攻击者放置恶意程序即可在服务启动时被加载。查询未引用服务路径的命令:

bash 复制代码
wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """

服务二进制文件可替换是指服务指向的 exe 文件所在目录对普通用户可写,攻击者可以直接替换该文件,待服务重启时执行恶意代码。使用 accesschk 工具可以快速检查目录权限:

bash 复制代码
accesschk.exe /accepteula -uwcqv "Authenticated Users" C:\Program Files\

4.3 令牌模拟与 Potato 系列提权

Windows 令牌(Token)包含进程或线程的安全上下文信息。如果当前进程拥有 SeImpersonatePrivilege 或 SeAssignPrimaryTokenPrivilege 权限,攻击者可以利用 Potato 系列漏洞(Juicy Potato、Sweet Potato、PrintSpoofer 等)模拟 SYSTEM 令牌,实现提权。这类攻击通常针对 IIS、SQL Server 等服务账户,因为这些账户默认拥有模拟权限。

以 PrintSpoofer 为例,该工具利用 Print Spooler 服务的命名管道模拟令牌,在拥有 SeImpersonatePrivilege 权限的上下文中可以直接获得 SYSTEM shell:

bash 复制代码
PrintSpoofer.exe -i -c cmd

查询当前进程权限可以使用 whoami 命令:

bash 复制代码
whoami /priv

4.4 其他 Windows 提权方式

注册表自启动项提权是指攻击者发现注册表 Run 键或启动文件夹可写,通过写入恶意程序实现开机自启提权。AlwaysInstallElevated 策略配置不当也是一个经典问题:如果注册表中 AlwaysInstallElevated 键值被设置为 1,普通用户安装的 MSI 包会以 SYSTEM 权限运行,攻击者可以构造恶意 MSI 包实现提权。

DLL 劫持提权则是利用应用程序加载 DLL 时的搜索顺序,将恶意 DLL 放置在应用程序优先搜索的目录中,待程序启动时加载恶意代码。此外,存储的凭据(如 cmdkey /list 发现的凭据)、计划任务、UAC 绕过等也是 Windows 提权的常见入口。

5. 内网主机发现与信息收集

5.1 内网主机发现

完成单机提权后,攻击者需要将视野扩展到整个内网。主机发现是横向移动的第一步,目标是确认内网中存在哪些存活主机及其开放的服务。常见的主机发现技术包括 ICMP 扫描、ARP 扫描、TCP 端口扫描等。

在 Windows 内网环境中,ARP 扫描往往比 ICMP 更可靠,因为很多主机禁用了 ICMP 回显。使用工具如 fscan、nmap 可以快速发现存活主机:

bash 复制代码
nmap -sn 192.168.1.0/24
fscan -h 192.168.1.0/24 -np -no

除了主动扫描,被动收集同样重要。攻击者可以查看本机 ARP 缓存、NetBIOS 缓存、DNS 缓存、路由表等信息,这些数据往往能直接暴露内网中的活跃主机和关键服务器:

bash 复制代码
arp -a
ipconfig /displaydns
route print

5.2 端口与服务识别

发现存活主机后,需要进一步识别主机上开放的服务和端口,以判断其角色和潜在攻击面。常见的高价值端口包括:445(SMB)、3389(RDP)、22(SSH)、3306(MySQL)、1433(MSSQL)、6379(Redis)、5985/5986(WinRM)等。

使用 nmap 进行服务版本探测:

bash 复制代码
nmap -sV -sC -p- 192.168.1.10

识别出服务后,攻击者可以针对性地尝试弱口令、未授权访问或已知漏洞利用。例如 Redis 未授权访问、MS17-010 漏洞、SMB 弱口令等都是内网横向中高频使用的入口。

6. 域环境信息收集:BloodHound 与 AD 侦察

6.1 域环境基础概念

在大型企业内网中,Active Directory(AD)域环境是最常见的架构。域控制器(DC)集中管理所有域用户的认证和授权。攻击者进入域环境后,首要任务是摸清域内的用户、组、计算机、策略以及它们之间的信任关系,从而找到通往域管的路径。

基础域信息收集命令如下:

bash 复制代码
net user /domain
net group "Domain Admins" /domain
net group "Domain Controllers" /domain
nltest /dclist:domain.com

6.2 BloodHound 与 SharpHound

BloodHound 是目前最强大的域环境信息收集与分析工具。它通过图数据库(Neo4j)可视化展示 AD 域中的用户、组、计算机、会话、ACL 等对象及其相互关系,帮助攻击者快速找到从当前权限到域管的最短攻击路径。

使用流程分为两步:首先在目标主机上运行 SharpHound 收集器采集数据,然后将数据导入 BloodHound 进行分析。SharpHound 的常用采集方式:

bash 复制代码
SharpHound.exe --CollectionMethods All --Domain domain.com
SharpHound.exe -c Default,GPOLocalGroup

采集完成后会生成 zip 文件,将其导入 BloodHound 前端即可看到完整的域关系图。BloodHound 内置了多种预置查询,例如「找到从当前用户到域管的最短路径」「查找具有 GenericAll 权限的用户」「查找 Kerberoastable 用户」等,这些查询能极大加速攻击路径的发现。

BloodHound 的核心价值在于将复杂的 ACL 关系和组成员关系可视化。例如,攻击者可能发现某个普通用户对某台服务器拥有 GenericAll 权限,而该服务器上运行着域管会话,这就形成了一条完整的攻击链。

6.3 域内其他信息收集手段

除了 BloodHound,还有多种域信息收集手段。Kerberoasting 是一种针对 SPN(服务主体名称)的攻击技术,攻击者可以向域控请求注册了 SPN 的服务账户的 TGS 票据,然后离线破解服务账户密码。使用 Impacket 工具包中的 GetUserSPNs.py 可以快速提取:

bash 复制代码
python3 GetUserSPNs.py domain.com/user:password -request

AS-REP Roasting 则针对未启用预认证的账户,攻击者可以直接请求该账户的 AS-REP 响应并离线破解。此外,通过 DCSync 攻击可以模拟域控复制目录数据库,直接导出域内所有用户的哈希,这是拿下域控后的终极信息收集手段。

7. 横向移动技术

7.1 哈希传递(Pass-the-Hash,PTH)

哈希传递是 Windows 内网横向移动中最经典的技术。在 NTLM 认证体系中,密码的哈希值(NTLM Hash)本身就足以完成身份认证,攻击者无需破解明文密码,直接使用抓取到的哈希即可登录其他主机。这一特性使得 PTH 在域环境中极具杀伤力。

使用 Impacket 工具包中的 psexec.pywmiexec.py 可以方便地执行 PTH:

bash 复制代码
python3 psexec.py -hashes :NTLMHash domain.com/user@192.168.1.10
python3 wmiexec.py -hashes :NTLMHash domain.com/user@192.168.1.10

在 Windows 原生环境中,可以使用 mimikatz 的 sekurlsa::pth 模块:

bash 复制代码
mimikatz.exe "sekurlsa::pth /user:admin /domain:domain.com /ntlm:NTLMHash"

执行后会弹出一个以目标用户身份运行的 cmd 窗口,在该窗口中访问目标主机即可实现横向移动。PTH 的防御重点是启用 Credential Guard、限制本地管理员账户的远程访问权限、使用 LAPS 管理本地管理员密码等。

7.2 票据传递(Pass-the-Ticket,PTT)

票据传递是利用 Kerberos 认证机制的特性进行横向移动的技术。在 Kerberos 体系中,用户通过 TGT(Ticket Granting Ticket)向域控申请访问服务的 TGS 票据。攻击者如果窃取了用户的 TGT 或 TGS 票据,就可以在内存中注入这些票据,冒充该用户访问目标服务,无需知道密码。

使用 mimikatz 导出和注入票据:

bash 复制代码
mimikatz.exe "sekurlsa::tickets /export"
mimikatz.exe "kerberos::ptt ticket.kirbi"

票据注入后,当前会话即拥有该票据对应的访问权限。使用 klist 可以查看当前会话中的票据:

bash 复制代码
klist

票据传递的进阶形态是黄金票据(Golden Ticket)和白银票据(Silver Ticket)。黄金票据是攻击者拿到域控的 krbtgt 账户哈希后,自行伪造的任意用户 TGT,可以访问域内所有资源且长期有效。白银票据则是伪造的针对特定服务的 TGS 票据,只能访问指定服务,但更加隐蔽。

7.3 其他横向移动方式

除了 PTH 和 PTT,横向移动还有多种实现方式。PsExec 类工具通过 SMB 服务在远程主机上创建服务并执行命令,是最常用的横向移动手段之一。WMI 远程执行则利用 Windows Management Instrumentation 的远程调用功能执行命令,无需开启额外端口,隐蔽性更好。

WinRM(Windows Remote Management)是 Windows 自带的远程管理服务,如果目标主机开启了 5985/5986 端口,可以使用 evil-winrm 工具直接获取交互式 shell:

bash 复制代码
evil-winrm -i 192.168.1.10 -u user -p password

RDP 远程桌面也是常见的横向移动方式,但需要目标开启 3389 端口且拥有合法凭据。此外,利用 SMB 共享、计划任务远程触发、SSH 密钥复用等方式也可以实现横向移动。

8. 从单机到域控:完整攻击链示例

为了帮助读者理解上述技术的串联使用,这里给出一个典型的完整攻击链示例。假设攻击者已通过 Web 漏洞获得一台 Windows 服务器的普通用户权限:

第一步,信息收集与提权。攻击者使用 whoami /priv 发现当前用户拥有 SeImpersonatePrivilege 权限,于是使用 PrintSpoofer 工具成功提权到 SYSTEM。

第二步,内网主机发现。攻击者使用 fscan 扫描内网 192.168.1.0/24 网段,发现多台存活主机,其中 192.168.1.20 开放 445 端口且存在 MS17-010 漏洞。

第三步,域信息收集。攻击者发现当前主机已加入域 domain.com,使用 SharpHound 采集域信息并导入 BloodHound 分析,发现域内存在 Kerberoastable 服务账户。

第四步,获取域内凭据。攻击者使用 GetUserSPNs.py 提取服务账户的 TGS 票据并离线破解,获得一个域用户密码。

第五步,横向移动。攻击者使用该域用户哈希执行 PTH,通过 psexec 登录到多台业务服务器,并在其中一台发现域管账户的会话。

第六步,拿下域控。攻击者利用域管会话执行 DCSync 攻击,导出 krbtgt 账户哈希,伪造黄金票据,最终完全控制整个域环境。

9. 防御体系建设与检测建议

面对上述攻击链,防守方需要建立纵深防御体系。在权限提升层面,应定期审计 SUID 文件、服务配置、计划任务和注册表自启动项,及时修补系统漏洞,遵循最小权限原则,移除不必要的特权。

在横向移动层面,应重点监控异常的网络连接、SMB 远程执行行为、WMI 调用、Kerberos 票据请求等。启用 Windows 事件日志审计,重点关注事件 ID 4624(登录成功)、4625(登录失败)、4672(特殊权限登录)、4768(Kerberos TGT 请求)等。部署 EDR 产品可以有效检测 mimikatz、SharpHound 等常见攻击工具的行为特征。

在域安全层面,应启用 Credential Guard 保护凭据,使用 LAPS 管理本地管理员密码,限制域管的登录位置,对高权限账户启用智能卡认证。定期使用 BloodHound 的防御查询检查域内是否存在危险 ACL 关系,及时收敛攻击路径。

10. 总结

权限提升与横向移动是内网渗透的核心能力,也是攻防演练中决定成败的关键环节。本文系统梳理了 Linux 与 Windows 两大平台的提权技术、内网主机发现方法、BloodHound 域信息收集以及哈希传递、票据传递等横向移动技术,并通过完整攻击链示例展示了这些技术的串联应用。

需要再次强调,这些技术是一把双刃剑。安全从业者应当将其用于授权范围内的渗透测试和防御体系建设,通过理解攻击者的手法来构建更坚固的防线。防守方只有深入了解攻击路径,才能在真实威胁到来时做到有效检测与快速响应。希望本文能为读者构建完整的内网安全知识体系提供有价值的参考。

相关推荐
代码方舟20 分钟前
零信任架构实战:基于天远车辆估值构建自动化二手车评估网关
运维·人工智能·架构·自动化
人生百态,人生如梦25 分钟前
每日论文解读(9.1)——ReToolSQL:面向鲁棒Text-to-SQL的Agentic强化学习与工具增强两阶段训练框架
数据库·sql
bgy666629 分钟前
从零上手 Docker,容器技术完整入门指南
运维·docker·容器
DevOpenClub33 分钟前
网页采集如何稳定输出结构化数据:JSON、链接与快照三阶段流水线
数据库·json·api
mounter62535 分钟前
突破零停机演进:Linux 内核 Live Update Orchestrator (LUO) 架构设计与热升级演进
linux·服务器·linux kernel·kernel·kho·luo
深圳海导科技36 分钟前
资产防盗追踪系统:物联网高价值资产安全管理|海导科技navynav
科技·物联网·安全
m4Rk_40 分钟前
【论文阅读】Agent 记忆机制(57):MemSearch-o1——从查询词元生长证据,重组 Deep Search 记忆路径
论文阅读·人工智能·学习·开源·github
黑泽明*41 分钟前
KVM虚拟化入门与热迁移实战
运维·服务器