文章总结: 本文揭示了Windows凭据管理中Runas存储凭据的安全风险,攻击者可通过cmdkey列出保存的管理员凭据并利用runas/savecred参数实现静默提权。文章详细分析了攻击链条从枚举到权限接管的完整过程,指出该漏洞源于授权边界模糊和用户习惯问题,并提出了定期清理凭据、避免使用/savecred参数、实施最小权限原则等防御措施。 综合评分: 85 文章分类: 内网渗透,渗透测试,终端安全,安全意识,安全运营
【提权基础入门第十节】在Windows Credentials Manager里发现的“定时炸弹”
幻泉之洲
2026年4月3日 18:46 北京
Windows凭据管理器本是为了方便,但它保存的密码一旦泄露,就成了攻击者“开箱即用”的提权工具。本文详解了这种名为“Runas存储凭据”的攻击手法,从原理到实践,再到防御,并探讨了其背后更广泛的安全管理问题。
很多人觉得,把密码保存在Windows的凭据管理器里,既安全又省事。
实际上,这常常是个危险的便利。
当你点击“记住此密码”时,系统就把你的登录信息加密后存了起来。下次登录同一网站或网络共享,不用再输密码。这个功能(凭据管理器)本身没问题,问题在于它的使用方式和使用者。
设想一个场景:你在一台共享的工作站上,用管理员权限运行了一个程序并保存了凭据。之后,任何能登录这台机器的普通用户,都能利用这些保存的凭据,直接“变成”管理员。
听起来像电影情节?不,这只是Windows内置的runas命令和凭据管理器交互产生的一个经典漏洞。
凭据管理器:藏起来的钥匙串
Windows凭据管理器就像系统自带的一个钥匙串。它可以保管三种钥匙:
- 网络地址和共享文件夹的密码(Windows凭据)
- 网站登录信息(Web凭据)
- 应用的证书(基于证书的凭据)
它的设计初衷是好的,减少用户重复输入密码的麻烦,提升体验。
但安全领域有句老话:便利性和安全性往往是跷跷板的两端。为了便利,系统记住了密码;为了安全,密码本该被遗忘。
漏洞的核心在于runas命令的/savecred参数。运行runas /savecred /user:Administrator cmd.exe时,如果管理员密码输入正确,这条凭据就会被保存在当前用户的凭据库中。关键在于,之后再次运行带/savecred的任何runas命令,都不需要再输入密码。
这就像是管理员给自己当前用户留了一把万能钥匙,却没管紧谁有机会拿到复制品。
攻击链条:从枚举到接管
整个攻击过程出奇地简单直白,这也是它危险的原因。攻击者几乎不需要高级技巧。
第一步:侦察
攻击者拿到一个普通用户权限后,首先会看看有没有“遗落的钥匙”。只需一个命令:
cmdkey /list
这会列出当前用户存储的所有凭据。如果在输出里看到了Administrator或者别的管理员账户,那基本就等于中奖了。
第二步:利用
看到有存储的管理员凭据后,攻击者可以直接用runas以管理员身份启动任何程序。假设他上传了一个后门程序backdoor.exe到C:\Windows\Tasks\目录下(这个目录通常有写入权限),那么执行:
runas /savecred /user:WORKGROUP\Administrator “C:\Windows\Tasks\backdoor.exe”
系统会瞬间以管理员权限启动这个后门,而整个过程完全静默,不会有任何密码提示框。
攻击链就此闭合,权限顺利提升。
整个流程里,最讽刺的是/savecred这个参数。它本意是“为用户保存凭据以方便下次使用”,结果却成了“为攻击者保存凭据以供随时盗用”。
为什么这是个棘手的问题?
这种攻击手法之所以难以根除,有几个深层次原因:
首先是功能设计的矛盾。runas /savecred的功能逻辑是:第一次验证成功后,后续使用都信任。这在单用户、物理安全有保障的环境下或许可行。但在企业多用户环境、或者终端可能被他人接触的情况下,这种信任模型就崩塌了。
其次是安全意识不足。很多用户,甚至系统管理员,并不知道凭据管理器里具体存了什么,更不了解cmdkey /list这个命令。安全风险往往来源于未知。
一个常见的坏习惯是:IT管理员为了方便维护,在用户电脑上直接用管理员账户登录操作,为了方便反复操作而保存凭据。这无异于把管理权限的门禁卡忘在了公共休息室。
最后是清理机制的缺失。Windows没有自动清理或定期提示机制。除非用户手动去控制面板删除,否则这些凭据会一直躺在那里,成为一个持续的威胁。
如何拆除这颗“定时炸弹”?
防御措施其实很明确,关键在于执行和习惯。
1. 定期检查与清理
最直接的方法就是去控制面板清理。路径是“控制面板 > 用户账户 > 凭据管理器”。
在里面找到“Windows凭据”,检查是否有不应存在的管理员级别凭据,果断移除。
2. 改变操作习惯
-
绝不随意使用
/savecred参数。除非在完全受控的私有环境,否则应避免使用这个功能。
-
使用最小权限原则。
日常操作坚决不使用管理员账户登录。需要提权时,使用不带
/savecred的runas或“以管理员身份运行”,每次手动输入密码。 -
清理共享环境。
对于公共或共用电脑,每次使用后应主动检查并清理可能遗留的凭据。
3. 技术管控(针对企业)
对于企业IT管理员,可以通过组策略来限制或监控:
- 考虑通过组策略禁止存储某些特定类型的凭据,尽管这可能影响部分便利性。
- 部署终端安全产品,监控
cmdkey /list和runas /savecred命令的执行,将其视为可疑行为。 - 定期通过脚本在企业范围内扫描和汇报存在存储凭据的终端。
更深一层的思考
“Runas存储凭据”漏洞的本质,其实是一个授权(Authorization)和身份验证(Authentication)边界模糊的问题。
系统第一次验证了你是你(输入了正确密码),然后就把代表“你是你”的凭证(Token)存储起来,并允许用这个凭证去做任何事。但它没有绑定“事”的上下文。第一次可能只是想启动一个管理控制台,存储的凭据却被用来启动了恶意程序。
安全的授权机制应该是情境化的,应该问:“当前这个动作,在这个时间,在这个环境下,是否被允许?” 而不是简单地“你有凭证,所以一切放行”。
微软的文档(Interactive Logon Authentication Microsoft(https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-authsod/bfc67803-2c41-4fde-8519-adace79465f6))详细描述了交互式登录的认证协议,但协议是理想的,使用方式却是千差万别的。
最后,说点实在的。下次当你图方便点击“记住密码”或者顺手加了/savecred参数时,可以先停一秒问自己:我是不是在创造一颗未来可能被他人利用的“定时炸弹”?
在安全的世界里,最危险的漏洞,往往不是那些需要复杂利用的零日漏洞,而是这种被遗忘的、由善意便利功能转化而来的“特性”。管理和使用好自己的凭据,是网络安全最基础,也最容易被忽视的一课。
回到文章开头那句话:密码管理器是安全的,不安全的永远是人使用它的方式。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:幻泉之洲 《【提权基础入门第十节】在Windows Credentials Manager里发现的“定时炸弹”》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论