用途限制声明
本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。
在内网后渗透攻击中,进行信息收集后就是要进行权限的提升,通常在渗透中很有可能只能获得一个系统的Guest或者User权限,低权限会受到很多的限制,在实施横向渗透或者提权攻击会很困难,所以我们需要进行权限的提升,比如将访问权限从Guset提升到User,再到Administrator,最后到System级别。
渗透的最终目的是获取服务器的最高权限,既是windows管理员账号的权限,或者linux系统的root权限。提升权限的方式有以下两类。
纵向提权:低权限角色获得高权限角色的权限。例如,一个webshell权限通过提权之后拥有管理员的权限,那么就是纵向提权。
横向提权:获得同级别角色的权限。
那么,如何进行权限提升呢,有四种方法:
-
利用系统或软件漏洞的权限提升
主要通过攻击目标系统(如 Windows、Linux)或运行的应用软件(如数据库、Web 服务等)存在的安全漏洞(如内核漏洞、缓冲区溢出、提权漏洞等),从低权限账户直接提升至最高权限(管理员 /root)。 -
利用配置错误的权限提升
针对目标系统或服务的不安全配置(如弱密码、默认凭证、不当的文件 / 服务权限设置、凭证泄露、服务以高权限运行但存在可利用的配置缺陷等),通过获取高权限凭证、滥用配置缺陷等方式提升权限。 -
令牌窃取
-
Hash攻击
一、利用系统或软件漏洞的权限提升
接下来进行操作,首先我们已经通过漏洞获得一个内网服务器的权限,查看当前的权限,
命令:whoami/groups
通过查询可以看到属于标准用户,那么就需要将提升至管理员权限。
我们使用第一个办法来进行权限提升,就是本地溢出漏洞来进行提高权限,我先介绍以下原理以及流程。
一、核心原理
本地溢出提权的本质是 “滥用高权限程序的内存漏洞”,具体逻辑如下:
-
程序权限与漏洞基础
目标系统中存在某些以高权限(如 Windows 的SYSTEM
、Linux 的root
)运行的程序(如系统服务、SUID 程序、驱动等),这些程序因开发时未严格校验输入长度(如未限制用户输入的字符串长度),存在缓冲区溢出漏洞。缓冲区是程序在内存中开辟的一块连续存储空间,用于临时存放数据。当输入数据的长度超过缓冲区的容量时,多余的数据会 “溢出” 到相邻的内存区域(如存放程序执行地址、函数返回值的区域)。
-
控制程序执行流
攻击者构造的恶意输入(即 “ exploit )会包含两部分:- 大量填充数据(用于填满缓冲区,覆盖相邻内存);
- 恶意代码(如获取高权限 shell 的代码,称为 “payload”);
- 特定的 “返回地址”(指向恶意代码在内存中的位置)。
当有漏洞的高权限程序处理该输入时,溢出的数据会覆盖程序原本的 “返回地址”(即程序执行完当前函数后应跳转的位置),迫使程序跳转到攻击者预先设置的恶意代码地址,从而执行 payload。
-
继承高权限
由于触发漏洞的程序本身以高权限运行(如root
),其执行的恶意代码也会继承该权限,攻击者因此获得目标系统的最高权限(如root
shell)。
二、操作逻辑(简化流程)
在授权测试中,利用本地溢出漏洞提权的大致步骤如下(具体细节因漏洞和系统而异)
-
信息收集:定位目标漏洞
- 确认目标系统版本(如 Linux 内核版本、Windows 系统版本)、已安装的程序 / 服务,排查已知的本地溢出漏洞(可参考漏洞库如 CVE、Exploit-DB)。
- 重点关注以高权限运行的程序:
- Linux 中可通过
ps aux
查看进程权限,或find / -perm -4000 2>/dev/null
查找 SUID 程序(SUID 程序执行时会继承所有者权限,若所有者为 root 则风险极高); - Windows 中可通过 “服务” 管理界面查看以 “Local System” 权限运行的服务。
- Linux 中可通过
-
漏洞分析:确定溢出细节
- 若漏洞已公开,可直接获取公开的 exploit 代码(需注意适配系统版本);
- 若为未知漏洞,需通过调试工具(如 GDB、x64dbg)分析程序:确定缓冲区大小(通过 “模糊测试” 逐步增加输入长度,观察程序崩溃时的输入长度)、找到可覆盖的返回地址位置、判断内存保护机制(如 ASLR、DEP 是否开启,需针对性绕过)。
-
构造并调试 exploit
- 根据漏洞细节构造 exploit:用填充数据覆盖缓冲区,设置返回地址指向 payload,加入适配系统的 payload(如 Linux 的
execve("/bin/sh", ...)
、Windows 的CreateProcessA
启动 cmd)。 - 若系统开启内存保护(如 ASLR 随机化内存地址),需通过 “信息泄露” 漏洞获取内存地址,或利用 “ROP 链”(Return-Oriented Programming)绕过保护。
- 根据漏洞细节构造 exploit:用填充数据覆盖缓冲区,设置返回地址指向 payload,加入适配系统的 payload(如 Linux 的
-
执行 exploit,获取权限
- 在目标系统中以低权限执行 exploit,触发有漏洞的高权限程序;
- 若成功,程序会执行 payload,返回高权限 shell(如 Linux 的
#
提示符、Windows 的 “管理员” cmd)。
首先输入getuid命令查看已经获得的权限
先尝试利用getsystem进行提权
无法提权,那就利用系统相关漏洞进行提权了,首先查询系统相关信息以及补丁
我们可以看到属于windows7 并且只打了两个补丁,我们可以使用最新的ms16-032来尝试提权,对应的补丁编号是KB3139914,基本每一个补丁都对应一个漏洞。
接下来准备提权,先把会话转为后台执行,然后搜索ms16_032
然后使用,设置“session"进行提权操作,这里指定”session"为5,在使用本地提权模块前,必须先建立一个低权限会话(例如通过远程漏洞攻击或其他方式获得的普通用户权限),然后指定该会话 ID,
直接进行exploit或者run即可.
成功,使用getuid查看当前权限
成功提权至system级别的权限。那么除了这种办法,还有其他方法进行权限提升,比如令牌窃取、Hash攻击,接下来我先介绍一下这两个操作,
一、令牌窃取(Token Stealing)
简介:令牌(Token)是操作系统(如 Windows、Linux)用于标识进程或用户权限的凭证。令牌窃取通过劫持或伪造这些凭证,让攻击者的进程继承高权限用户(如管理员、root)的访问权限,无需破解密码即可获得控制权。
核心原理
-
Windows 令牌机制
- Windows 使用访问令牌(Access Token)存储用户权限信息(如用户 SID、组成员身份、特权列表)。当用户登录时,系统创建主令牌(Primary Token),进程启动时会继承该令牌。
- 高权限进程(如系统服务)运行时携带管理员或 SYSTEM 级令牌。
-
令牌窃取技术
- 进程注入:通过漏洞或工具(如 Mimikatz 的
sekurlsa::pth
)将代码注入高权限进程,获取其令牌。 - 令牌复制:利用 Windows API(如
DuplicateTokenEx
)复制高权限进程的令牌,将其附加到攻击者控制的进程中。 - 会话劫持:针对已登录的高权限用户会话(如 RDP 会话),直接接管其令牌。
- 进程注入:通过漏洞或工具(如 Mimikatz 的
-
典型场景
- 攻击者已获得低权限 shell,发现系统中存在高权限进程(如 SYSTEM 权限的服务),通过令牌窃取提升权限。
- 横向移动:在域环境中,窃取域管理员令牌后访问其他域内主机。
Hash 攻击
简介:Hash 攻击是指通过获取、破解或利用系统存储的密码哈希值(而非明文密码)来获取权限的技术。操作系统通常不存储明文密码,而是存储经过哈希算法处理后的密码哈希值,攻击者通过各种手段获取这些哈希值并尝试还原或直接利用。
核心原理
-
密码哈希存储机制
- Windows:在 SAM 数据库或域控的 NTDS.DIT 文件中存储 NTLM 哈希(如
LM:NTLM
格式)。 - Linux:在
/etc/shadow
文件中存储经盐值(salt)处理的 SHA-512/MD5 哈希。
- Windows:在 SAM 数据库或域控的 NTDS.DIT 文件中存储 NTLM 哈希(如
-
Hash 攻击的两种方式
-
Offline Cracking(离线破解)
- 获取哈希值:通过漏洞(如 LSASS 内存转储)或工具(如 Mimikatz、LaZagne)提取哈希。
- 暴力破解:使用字典或掩码攻击(如 Hashcat、John the Ripper)尝试匹配哈希值对应的明文密码。
- 彩虹表攻击:预计算大量密码哈希值的对照表,直接查表匹配(适用于无盐值或盐值可预测的场景)。
-
Pass-the-Hash(哈希传递)
无需破解哈希,直接利用获取的 NTLM 哈希值进行认证。例如:- Windows 中使用
psexec
或 Mimikatz 的sekurlsa::pth
,将哈希值注入新会话,通过 SMB/NTLM 协议访问其他主机。 - 域环境中,利用域管理员的 NTLM 哈希可直接访问域内任意主机(黄金票据攻击的基础)。
- Windows 中使用
-
我们比较一下四种方法的区别
技术类型 | 依赖条件 | 是否需要破解密码 | 权限来源 | 典型工具 |
---|---|---|---|---|
令牌窃取 | 已有低权限会话、高权限进程 | 否 | 劫持现存高权限令牌 | Mimikatz、Incognito |
Hash 攻击 | 能获取密码哈希值 | 部分需要(离线破解) | 破解或利用存储的哈希凭证 | Mimikatz、Hashcat、psexec |
漏洞利用(如溢出) | 系统 / 软件存在提权漏洞 | 否 | 利用漏洞执行高权限代码 | msfvenom、自定义 exploit |
配置错误利用 | 弱密码、SUID 程序、服务权限错 | 可能需要(弱密码) | 滥用错误配置的高权限资源 | LinPEAS、WinPEAS |
二、令牌窃取
接下来我们来使用令牌窃取进行权限提升,上面我们已经介绍关于令牌的简介以及原理,通过令牌窃取我们可以通过假冒令牌来进行权限提升,在假冒令牌中我们需要使用Kerberos协议,所以在使用假冒令牌前我们先来介绍kerberos协议。
Kerberos 协议是一种网络身份认证协议,旨在解决非安全网络环境中(如互联网)实体(用户、服务、设备)的身份验证问题,核心目标是在不可信网络中安全地验证 “谁是谁”,并防止窃听、重放攻击、中间人攻击等威胁。它广泛应用于 Windows 域环境、企业内网(如 Hadoop、LDAP)等场景,是现代网络认证的核心协议之一。
Kerberos 协议涉及 3 个核心角色,以及两种关键 “票据”:
1. 核心角色
- 客户端(Client):需要访问服务的用户或设备(如用户的 PC、应用程序)。
- 服务端(Service):提供资源的服务(如文件服务器、数据库、邮件服务)。
- 密钥分发中心(KDC,Key Distribution Center):协议的 “核心信任机构”,负责管理认证逻辑,包含两个子组件:
- 认证服务器(AS,Authentication Server):验证客户端身份,发放 “票据授予票据(TGT)”;
- 票据授予服务器(TGS,Ticket Granting Server):基于 TGT 向客户端发放访问特定服务的 “服务票据(ST)”。
2. 关键票据
- TGT(Ticket Granting Ticket,票据授予票据):由 AS 发放,相当于 “身份凭证的凭证”,客户端用它向 TGS 请求访问具体服务的权限。
- ST(Service Ticket,服务票据):由 TGS 发放,客户端用它向目标服务证明自己的身份,获取服务访问权限。
认证流程(核心步骤)
Kerberos 的认证过程可简化为 “三次交互”,核心是通过对称加密(避免非对称加密的性能开销)和 “票据” 传递实现安全认证。假设用户 “Alice” 需要访问 “文件服务器(Service)”,流程如下:
步骤 1:客户端向 AS 请求 TGT(获取 “身份凭证的凭证”)
- Alice 在客户端输入用户名 / 密码,客户端将密码通过哈希算法(如 AES)生成用户密钥(Client Key)(密钥不会传输,仅在客户端本地保存);
- 客户端向 AS 发送 “认证请求”,包含:用户名(Alice)、目标服务类型(如 “需要访问文件服务”)、时间戳(防止重放攻击);
- AS 验证 Alice 的身份(查询本地用户数据库,如 Windows 的 SAM 或域控的 NTDS.DIT),生成:
- 会话密钥(Session Key AS-C):用于后续客户端与 AS/TGS 的加密通信;
- TGT:包含 Alice 的身份(SID)、会话密钥 AS-C、有效期(通常 8 小时),并用TGS 的密钥(TGS Key) 加密(客户端无法解密 TGT 内容,仅 TGS 可解密);
- AS 将 “加密的 TGT” 和 “用 Alice 的密钥加密的会话密钥 AS-C” 返回给客户端;
- 客户端用自己的用户密钥解密得到会话密钥 AS-C(若密码错误,解密失败,认证终止)。
步骤 2:客户端向 TGS 请求服务票据 ST(获取 “访问服务的凭证”)
- 客户端生成 “票据请求”,包含:
- 之前获取的 TGT(完整转发,无需解密);
- 用会话密钥 AS-C 加密的 “客户端信息 + 时间戳”(证明自己拥有会话密钥,即身份合法);
- 目标服务的名称(如 “文件服务器”);
- TGS 收到请求后,用自己的密钥(TGS Key)解密 TGT,得到会话密钥 AS-C;
- TGS 用会话密钥 AS-C 解密客户端发送的加密信息,验证时间戳(防重放)和身份合法性;
- 验证通过后,TGS 生成:
- 服务会话密钥(Session Key C-S):用于后续客户端与服务端的加密通信;
- ST(服务票据):包含 Alice 的身份、服务会话密钥 C-S、有效期,并用目标服务的密钥(Service Key) 加密(仅目标服务可解密);
- TGS 将 “加密的 ST” 和 “用会话密钥 AS-C 加密的服务会话密钥 C-S” 返回给客户端;
- 客户端用会话密钥 AS-C 解密得到服务会话密钥 C-S。
步骤 3:客户端用 ST 访问服务端(完成最终认证)
- 客户端向目标服务(如文件服务器)发送 “服务访问请求”,包含:
- 之前获取的 ST(完整转发,无需解密);
- 用服务会话密钥 C-S 加密的 “客户端信息 + 时间戳”;
- 服务端用自己的密钥(Service Key)解密 ST,得到服务会话密钥 C-S;
- 服务端用服务会话密钥 C-S 解密客户端发送的加密信息,验证时间戳和身份合法性;
- 验证通过后,服务端返回 “用服务会话密钥 C-S 加密的确认信息”(双向认证:客户端验证服务端是否拥有正确密钥);
- 客户端解密确认信息,验证服务端合法性,最终建立安全连接。
接下来就是通过假冒令牌来进行权限提升,首先通过getuid来查询当前权限,
尝试使用getsystem来进行权限提升,
不出意料,失败了,那么先输入use incognito命令,然后输入list_tokens -u列出可用的token,
输出信息分析一下,
1. Delegation Tokens(委派令牌)
委派令牌允许进程代表用户访问 远程资源(如其他计算机上的共享文件、服务)。你获得的委派令牌包括:
HACK\jie123
:域用户jie123
的委派令牌,属于域HACK
。这意味着该用户可以通过此令牌访问域内其他资源。NT AUTHORITY\LOCAL SERVICE
:Windows 系统内置的低权限账户,用于运行某些服务。通常具有有限的系统访问权限。NT AUTHORITY\NETWORK SERVICE
:比 LOCAL SERVICE 权限略高的内置账户,可访问网络资源,常用于网络服务(如 IIS)。NT AUTHORITY\SYSTEM
:Windows 系统中权限最高的账户,拥有完全控制权限,可访问系统的所有资源。
2. Impersonation Tokens(模拟令牌)
模拟令牌允许进程临时 模拟用户身份 访问 本地资源,但不能用于远程访问。你的输出显示 No tokens available
,表示当前没有可用的模拟令牌。
那么接下来我们就是在incognito中调用impersonate_token命令假冒System用户来进行攻击,
假设我们需要将权限变成HACK\jie123,
那么我们只需要使用命令,
命令:impersonate_token HACK\\jie123
知识点:在输入HOSTNAME\USERNAME时需要输入两个反斜杠
超时了没有成功,更改其超时时间就行,这里就不再演示,成功了我们就能够在shell命令输入whomai即可.
三、Hash攻击
最后我们使用Hash攻击来进行提权.
1、使用Hashdump来抓取密码
先介绍一下Hashdump,hashdump
是 Metasploit 中用于提取 Windows 系统密码哈希的模块,其原理和作用涉及 Windows 系统安全机制的核心概念,
一、原理:Windows 密码哈希存储机制
1. SAM 数据库
- Windows 将本地用户账户的密码哈希存储在
%SystemRoot%\System32\config\SAM
文件中(即 Security Account Manager 数据库)。 - 该文件加密存储,密钥来自系统启动时生成的
SYSTEM
注册表项(%SystemRoot%\System32\config\SYSTEM
)。
2. 密码哈希格式
- Windows 使用 LM Hash 和 NTLM Hash 两种格式存储密码:
plaintext
用户名:RID:LM哈希:NTLM哈希
- LM Hash:已过时,易被破解(将密码转为大写、分割为 7 字节处理)。
- NTLM Hash:
NTLM = MD4(UTF-16LE(明文密码))
,安全性较高,但仍可通过彩虹表或暴力破解。
3. hashdump 的工作流程
- 权限要求:必须以
SYSTEM
权限运行(因 SAM 文件仅 SYSTEM 可访问)。 - 内存提取:
- 从内存中读取
lsass.exe
进程(Local Security Authority Subsystem Service),该进程包含解密后的 SAM 数据库。 - 提取
SYSTEM
注册表项中的密钥,用于解密 SAM 文件。 - 导出用户名和对应的哈希值。
- 从内存中读取
二、作用:密码哈希的价值
1. 横向移动(Lateral Movement)
- Pass-the-Hash(PtH)攻击:利用提取的 NTLM 哈希直接进行认证,无需破解明文密码。例如:
meterpreter > psexec_psh -d cmd.exe -u Administrator -H <NTLM哈希> -c
2. 离线破解
- 将哈希导出后,使用工具(如 John the Ripper、Hashcat)尝试破解明文密码:
hashcat -m 1000 <哈希文件> <字典文件> # 破解NTLM哈希
在shell提示符下输入hashdump命令,导出目标机SAM数据库中Hash
只能通过SYSTEM权限来运行hashdump命令,不然会失败.
还有另一个模块smart_hashdump的功能更加强大,可以导出域所有用户的Hash,
smart_hashdump
是 Metasploit 中用于提取 Windows 系统密码哈希的高级模块,相比传统的 hashdump
,它集成了多种技术以绕过防御机制。以下是其功能和工作流程的详细说明:
核心功能
-
多技术融合
自动尝试多种哈希提取方法(如直接读取lsass.exe
、卷影复制服务、WMI 等),根据目标环境选择最优方案。 -
防御绕过
- 检测并绕过 Credential Guard(需配合
mimikatz
或特殊技术)。 - 规避杀毒软件对
lsass.exe
的监控。
- 检测并绕过 Credential Guard(需配合
-
域环境支持
可提取域控制器中的域用户哈希(通过lsadump::dcsync
等技术)。 -
哈希质量提升
尝试获取更完整的哈希信息(如 Kerberos 票据),支持 Pass-the-Ticket 攻击。
工作流程
阶段 1:环境探测
-
权限检查
验证当前会话是否具有SYSTEM
或管理员权限(必要条件)。meterpreter > getuid # 需为 NT AUTHORITY\SYSTEM
-
系统版本识别
检测目标 Windows 版本(如 Win10/Server 2016+),判断是否启用 Credential Guard:meterpreter > run post/windows/recon/checkvm # 检查虚拟化/安全功能
-
防御机制检测
扫描内存保护工具(如 Defender、第三方 AV)和安全策略(如 UAC、LSA 保护)。
阶段 2:哈希提取策略选择
根据探测结果选择以下方法之一:
方法 1:直接内存读取(传统方法)
- 适用场景:无 Credential Guard 且无严格 AV 监控。
- 流程:
- 注入
lsass.exe
进程。 - 提取内存中的 NTLM/LM 哈希。
- 格式化为
用户名:RID:LM哈希:NTLM哈希
。
- 注入
方法 2:卷影复制服务(VSS)
- 适用场景:文件被锁定或直接读取失败。
- 流程:
- 使用 VSS 创建 SAM 和 SYSTEM 文件的影子副本。
- 从副本中提取加密的哈希和密钥。
- 离线解密(需导出文件至攻击机)。
方法 3:WMI 远程执行
- 适用场景:目标存在 WMI 漏洞或权限允许。
- 流程:
- 通过 WMI 远程调用目标系统的命令行工具(如
reg.exe
)。 - 导出 SAM 和 SYSTEM 注册表项。
- 解密并提取哈希。
- 通过 WMI 远程调用目标系统的命令行工具(如
方法 4:域控哈希提取(针对域环境)
- 适用场景:当前会话为域管理员权限。
- 流程:
- 使用
lsadump::dcsync
从域控制器同步用户哈希。 - 获取域用户的
krbtgt
账户哈希(用于 Golden Ticket 攻击)。
- 使用
与传统 hashdump 的对比
特性 | smart_hashdump | hashdump |
---|---|---|
自动化程度 | 自动选择最优提取方法 | 单一方法(直接读取 lsass) |
防御绕过能力 | 支持 Credential Guard 检测与绕过 | 易被 Credential Guard 阻断 |
域环境支持 | 支持域控哈希提取(dcsync) | 仅支持本地账户 |
错误恢复机制 | 失败后自动尝试其他方法 | 失败即终止 |
输出信息 | 包含 Kerberos 票据等高级凭证 | 仅输出 NTLM/LM 哈希 |
那么使用smart_hash_dump模块
能够看出抓取的信息更加详细,对于抓取的Hash可以使用暴力或者彩虹表进行破解,推荐一个网站md5在线解密破解,md5解密加密
2、使用Quarks PwDump抓取密码
Quarks PwDump 是一款用于从 Windows 系统中提取密码哈希的工具,常用于渗透测试和安全审计。下面说一下原理以及如何使用,
一、工作原理
1. 密码哈希存储机制
- Windows 将本地用户密码以哈希形式存储在 SAM 数据库(
%SystemRoot%\System32\config\SAM
)中。 - 域环境中,用户密码哈希存储在 Active Directory 中,由域控制器管理。
2. Quarks PwDump 的核心技术
- 内存提取:从
lsass.exe
进程(Local Security Authority Subsystem Service)中提取明文密码或 NTLM/LM 哈希。 - 解密密钥:从
SYSTEM
注册表项获取解密 SAM 数据库所需的密钥。 - 多版本兼容:支持 Windows XP 至 Windows 10/Server 2019 等多个版本。
二、使用流程
步骤 1:获取管理员权限
Quarks PwDump 需要管理员或 SYSTEM 权限才能运行
步骤 2:上传并执行 Quarks PwDump
将工具上传至目标系统并执行:
# 上传 QuarksPwDump.exe 到目标系统
# 执行工具(-o 选项指定输出格式)
QuarksPwDump.exe -o file.txt
步骤 3:获取输出结果
工具会生成包含密码哈希的文件(如 file.txt
),格式如下:
RID 用户名 LM哈希 NTLM哈希
500 Administrator aad3b435b51404eeaad3b435b51404ee 31d6cfe0d16ae931b73c59d7e0c089c
1000 user1 aad3b435b51404eeaad3b435b51404ee 202cb962ac59075b964b07152d234b70
步骤 4:离线破解哈希
将哈希导出到攻击机,使用工具(如 Hashcat)破解:
# 破解 NTLM 哈希
hashcat -m 1000 hashes.txt /path/to/wordlist.txt
三、高级用法
1. 静默模式
在后台执行并隐藏窗口:
QuarksPwDump.exe -s -o file.txt
2. 导出域用户哈希
若当前用户有域管理员权限,可导出域控制器中的用户哈希:
QuarksPwDump.exe -d -o domain_hashes.txt
3. 与 Metasploit 集成
在 Meterpreter 会话中执行 Quarks PwDump:
meterpreter > upload QuarksPwDump.exe C:\\temp\\
meterpreter > shell
C:\> cd C:\temp\
C:\temp> QuarksPwDump.exe -o hashes.txt
3、使用windwos credentials Editor抓取密码
Windows Credentials Editor (WCE) 是一款用于从 Windows 系统中提取明文密码和哈希的工具,尤其擅长绕过内存保护机制。以下是其原理和使用流程的详细说明:
一、工作原理
1. 密码存储机制
- Windows 将用户密码以加密形式存储在内存中的
lsass.exe
进程(Local Security Authority Subsystem Service)。 - 域环境中,Kerberos 票据和 NTLM 哈希也存储在该进程中。
2. WCE 的核心技术
- 内存注入:通过 DLL 注入技术访问
lsass.exe
的内存空间。 - 解密算法:实现 Windows 密码加密算法的逆向工程,提取明文密码或哈希。
- 多版本兼容:支持从 Windows XP 到 Windows 11/Server 2022 等多个版本。
二、使用流程
步骤 1:获取管理员权限
WCE 需要管理员或 SYSTEM 权限才能运行:
# 在目标系统上以管理员身份启动命令提示符
步骤 2:上传并执行 WCE
将工具上传至目标系统并执行:
# 上传 wce.exe 到目标系统
# 执行工具(-w 选项提取明文密码,-h 提取哈希)
wce.exe -w # 提取明文密码
wce.exe -h # 提取 NTLM/LM 哈希
步骤 3:获取输出结果
工具会直接在命令行输出结果,格式如下:
[0;2223;000003e7;Administrator;770c3a82b319c9a4a8a08308736b360;]
[0;1000;000003e9;user1;password123;]
- 第一列为会话 ID,第二列为 RID,第三列为用户名,第四列为明文密码或哈希。
步骤 4:后处理
将结果保存用于后续攻击(如 Pass-the-Hash):
wce.exe -w > passwords.txt # 保存明文密码到文件
4、使用Mimikatz抓取密码
着重讲这个工具,Mimikatz 是一款强大的 Windows 安全工具,专门用于从内存中提取明文密码、哈希值、Kerberos 票据等敏感信息,此工具已经作为脚本集成在msfconsole中,不需要上传软件到目标主机上了。
我们需要加载mimikatz
命令:load mimikatz
Meterpreter 中的 Mimikatz 扩展已被新的Kiwi 扩展取代,并且 Kiwi 扩展已经加载到当前会话中。
那就直接使用help kiwi,Kiwi(即 Mimikatz for Metasploit)是一款强大的 Windows 凭证提取工具,集成于 Metasploit 框架中。其核心原理与 Mimikatz 一致,但通过 Meterpreter 会话提供更便捷的交互方式,原理是一致的
使用命令抓取hash
kiwi_cmd sekurlsa::logonpasswords
使用命令抓取票据
kiwi_cmd kerberos::list /export
还有其他功能,这里就不再演示。
总结,以上就是通过三种方法来进行权限提升,还有一种方法这里不再讲解,下一步我们进行横向移动。