文章总结: 文章披露Windows系统SystemSettingsAdminFlows.exe在高权限执行cleanmgradminhelper操作时存在DLL劫持漏洞,通过逆向分析发现其通过COM接口{a7246883-0625-4321-94d2-a9b121e7e63a}代理加载settingshandlers_storagesense.dll并调用CreateProcessW,普通用户可在环境变量路径放置恶意exe实现权限提升或持久化,建议EDR关注相关进程创建事件与环境变量路径异常文件 综合评分: 87 文章分类: 漏洞分析,二进制安全,内网渗透,终端安全
送你一个BYPASS
原创
WZ WZ
不吃猹的瓜
2026年5月5日 21:02 北京
在小说阅读器读本章
去阅读
在Windows上清理临时文件的时候发现, 系统会启动一个High权限的SystemSettingsAdminFlows.exe的进程, 命令行是:
"C:\Windows\System32\SystemSettingsAdminFlows.exe" CleanmgrAdminHelper
点击删除文件的时候, 在ProcessMonitor中发现其运行时会试图启动一大堆不存在的exe,并且会在普通用户等环境变量路径中去寻找:
我们随便找一个exe放到环境变量的目录下, 重新清理临时文件:
很明显以High权限启动了我们拷贝过去的Windows.exe, 但是这些操作都是需要图形化界面去点击文件清理, 在实际环境中不是很方便, 通过这个调用栈我们发现这很可能是一个rpc/com接口:
先让AI对SettingsHandlers_StorageSense.dll文件分析一下:
通过对当前在 IDA 中打开的文件 (SettingsHandlers_StorageSense.dll) 的深度分析,文件中包含大量的 COM 和 WinRT 接口(主要用于 Windows 设置的 DataModel),核心的自定义 COM 接口包括:
• UICleanmgrAdminHelper / UICleanmgrHelper• AgentToolList• AgentToolMcpServerList• AgentToolCapabilityList• CStartupListSetting• CAppSizesFilter• CAppAdvancedInfoDynamicDatabase• CAppTileData• 大量的标准 WinRT 集合接口(如针对 ISettingItem 和 IInspectable 的 IVector, IIterable,IObservableVector 等)
通过对CreateProcessW的交叉引用(Xrefs)进行逆向追踪,共有3个COM对象的接口方法最终会调用到CreateProcessW:
- UICleanmgrHelper接口:
• 触发路径:调用其Purge方法->内部调用CleanmgrHelper::_ExecuteCmd -> CreateProcessW。
注:该接口通常由UICleanmgrAdminHelper::CreateCleanmgrHelper方法创建。
- AgentToolList对象(实现了ISettingItem等接口):
• 触发路径:调用其DoGetValueAsyncWork方法-> GetUnfilteredMcpClientInfo -> CreateProcessW。
- AgentToolMcpServerList对象:
• 触发路径:调用其DoGetValueAsyncWork方法-> GetUnfilteredMcpServerDefinitions -> ExecuteOdrCommand -> CreateProcessW。
看起来是有进程创建的接口的, 但是让AI给一个最小Demo编译运行时发现有问题, z在分析这个com接口之前忘记确认这个接口是不是可以跨进程调用的了….实际确认发现不是跨进程调用的, 是In-Proc的; 于是让AI直接分析SystemSettingsAdminFlows.exe:
通过对 SystemSettingsAdminFlows.exe 的逆向分析,以下是关于 {A7246883-0625-4321-94D2-A9B121E7E63A}接口运作机制的完整剖析:
1.这个CLSID并不在DLL内部实现
{A7246883-0625-4321-94D2-A9B121E7E63A}是专属于SystemSettingsAdminFlows.exe (管理员提权服务进程)的CLSID。它被硬编码在EXE中,作为进程外服务器(Out-of-Proc Server)暴露给系统。
2.它的真实作用:权限“跳板”(Proxy / Broker)
当我们在SystemSettingsAdminFlows.exe的RunComServerFlowWork函数中看到它的行为时,会发现如下逻辑:
•EXE启动后,它调用GetRunningObjectTable和CreateClassMoniker。
• 它将自身实现的CCleanmgrAdminHelper对象以CLSID {A7246883-0625…}注册到系统的运行对象表(ROT)中。
3.当客户端调用时的调用链
如果通过CoCreateInstance请求这个CLSID,请求会被路由到正在以管理员权限运行的SystemSettingsAdminFlows.exe进程中。
当在客户端拿到接口并调用CreateCleanmgrHelper(UICleanmgrHelper**)时,SystemSettingsAdminFlows.exe的内部实现如下:
HRESULT __fastcallCCleanmgrAdminHelper::CreateCleanmgrHelper( CCleanmgrAdminHelper *this, LPVOID *ppv){// CLSID_CleanmgrHelper = {4E781F7F-9430-4F56-A233-70E6E0AC1AF9}// IID_UICleanmgrHelper = {77a2017f-02e9-467f-b9a5-7ed80aadd8b8}return CoCreateInstance( &CLSID_CleanmgrHelper, 0, CLSCTX_INPROC_SERVER, &IID_UICleanmgrHelper, ppv);}
1.接口在哪:{A7246883-0625-4321-94D2-A9B121E7E63A}这个CLSID完全在SystemSettingsAdminFlows.exe内部实现,用来接收外部进程的请求。
2.代理实例化:一旦请求到达,高权限的EXE会调用底层的CoCreateInstance({4E781F7F-9430-4F56-A233-70E6E0AC1AF9})。
3.加载DLL:{4E781F7F…}才是真正在SettingsHandlers_StorageSense.dll中实现的In-Proc服务器!这意味着这个DLL会被强行加载到高权限的EXE进程内存空间中。
4.最终提权:在普通权限的客户端获取到的UICleanmgrHelper代理,其真正的宿主是管理员权限的SystemSettingsAdminFlows.exe。当在客户端调用Purge,RPC会将调用封装并发送给EXE处理,EXE再调用DLL内部的代码,从而在Admin上下文里触发CreateProcessW。
最终让AI整理一下给出Demo编译后, 在Win10和Win11下都可以正常运行:
总结与检测
- 这个SystemSettingsAdminFlows.exe启动的这些exe不仅可以做提权, 还可以做持久化;
- EDR等终端产品可以关注父父进程是SystemSettingsAdminFlows.exe进程创建的事件, 关注环境变量路径创建未知可执行文件的情况;
注: 文章仅供学习研究, 请勿滥用! 源码可以关注回复clear获取
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:不吃猹的瓜 WZ WZ《送你一个BYPASS》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论