runas是 Windows 自带的一个实用工具,用于以另一个用户的身份运行程序。对攻击者而言,利用 runas
可在目标机器上尝试以更高权限,比如本地管理员或域用户启动恶意负载,从而扩大权限边界或执行受限操作。本文面向对 .NET / Windows 安全有一定了解的读者,结合常见 runas
用法、.NET 中的实现示例、红队可能利用的方式、检测与防御措施,以及若干注意事项和替代方案。
在 .NET 环境下,可以通过两种路径调用 runas
:首选,使用 Process
调用系统可执行文件 runas.exe
或使用 ShellExecute
的 Verb = "runas"
来触发 UAC 提升对话框。还可以结合凭据管理。比如 runas /savecred
或凭据收集技术尝试无提示地以目标凭据运行程序,但此类方式存在许多限制与安全政策约束,如下图所示,因该图纵向篇幅过长,不方便完整展示,所以此处仅截取其上半部分。
runas 或 ShellExecute
+ Verb = "runas"
通常会触发 UAC 提示,由交互式用户确认后才能获得高权限句柄,下面是常见的 .NET 代码示例。
2.1 ProcessStartInfo
可以使用 ProcessStartInfo 调用 runas.exe,这种会提示输入密码,且 runas.exe
不触发 UAC 对话框来自动提升当前交互用户为管理员——它是以指定用户上下文启动程序。
using System.Diagnostics;var psi = new ProcessStartInfo();psi.FileName = "runas.exe";psi.Arguments = "/user:Administrator "C:\path\to\payload.exe""; // 举例psi.UseShellExecute = false;Process.Start(psi);
2.2 ShellExecute
使用 ShellExecute 的 runas verb 简单直接,触发 UAC;缺点:需要用户交互需UAC 确认。
using System.Diagnostics;var psi = new ProcessStartInfo();psi.FileName = "C:\path\to\payload.exe";psi.Verb = "runas"; // 这将触发 UAC 提示以提升到管理员(如果当前用户是管理员组成员)psi.UseShellExecute = true; // 必须为 true 才能使用 Verbtry{Process.Start(psi);}catch (System.ComponentModel.Win32Exception ex){// 用户可能取消了 UAC,或者提升失败}
2.3 Runas.exe
使用保存凭据的情形,/savecred 需要先手动保存凭据,组策略可禁用该功能;凭据管理器中的凭据仅在用户上下文可用。
var psi = new ProcessStartInfo();psi.FileName = "runas";psi.Arguments = "/user:DOMAIN\Admin /savecred "C:\payload.exe"";psi.UseShellExecute = false;Process.Start(psi);
通过目标机器上已对特定账户保存凭据,红队可调用 runas /savecred
来无提示地启动高权限程序。
2.4 分析样本
样本使用 cmd 执行一次 START
来在新窗口中运行 payload.exe,然后退出,具体代码如下所示。
cmd.exe /c START """C:pathtopayload.exe" & EXIT
如果外层是用 Verb=runas
提升的 cmd.exe
,那么新窗口会以管理员权限启动,如下图所示。
ProcessStartInfo.Verb = runas
,但受 UAC 与策略约束;红队通常需要配合社工、凭据窃取或系统错误配置来有效利用它。防御层面应注重最小权限、GPO 管控、监控与应用白名单,结合用户教育减少因交互而导致的权限提升成功率。监控 explorer.exe
或浏览器父进程启动 payload.exe
且命令行含 runas
的情况,或者使用下列方式进行防御配置。
最小权限原则
确保普通用户不是管理员组成员,降低 UAC 提示可能带来的风险。通过组策略,Credentials Delegation
或相关策略禁用 runas /savecred
功能。
启用并严格配置 UAC
不要将 EnableLUA
关闭,避免降低 UAC 的防护强度。只允许受信任程序以管理员权限运行。
监控与告警
对创建进程命令行中含 runas
或 -Verb runas
的事件建立告警。监视/控制 Credential Manager 的写入权限和使用范围。
免责声明:此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。任何未经授权的网络渗透、入侵或对他人网络破坏的活动而造成的直接或间接后果和损失,均由使用者为自身的行为负责并承担全部的法律和连带责任,与本号及作者无关,请务必遵循相关法律法规。本文所提供的工具仅用于学习和本地安全研究和测试,禁止用于其他方面。
以上相关的知识点已收录于新书《.NET安全攻防指南》,全书共计25章,总计1010页,分为上下册,横跨.NET Web代码审计与红队渗透两大领域。
上册深入剖析.NET Web安全审计的核心技术,帮助读者掌握漏洞发现与修复的精髓;下册则聚焦于.NET逆向工程与攻防对抗的实战技巧,揭秘最新的对抗策略与技术方法。
20+专栏文章
海量资源和文档
专属成员交流群
已入驻的大咖们
欢迎加入我们
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...