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

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

0x00 前言(扯淡)

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

   一个是《通过Windows RPC批量寻找“出网”机器》(https://payloads.online/archivers/2022-03-04/1/),

   另一篇是《[安全工具] 未授权主机信息收集工具-RPCSCAN》(https://github.com/JDArmy/RPCSCAN)。

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

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

https://github.com/gentilkiwi/mimikatz/blob/e10bde5b16b747dc09ca5146f93f2beaf74dd17a/mimikatz/modules/kuhl_m_rpc.c#L122

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


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

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

0x01 代码(瞎BB)

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

https://docs.microsoft.com/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。


相关文章
|
10月前
|
数据采集 安全 数据挖掘
【编程课堂】 windows计划任务
作为一名懒癌晚期患者,应该有坚决抵制重复的工作的觉悟,所以本周的编程课堂教大家使用 windows 自带的 计划任务 功能定时运行 Python 脚本。
【编程课堂】 windows计划任务
|
Windows
windows计划任务所遇到的闪退、触发器没有按时执行的坑
1、如图:在设置执行程序或脚本时,请一定要给起始于这个bat脚本的目录路径,否则会遇到执行计划任务闪退,对于网上给的尾行加pause也是心很累。
386 0
windows计划任务所遇到的闪退、触发器没有按时执行的坑
|
Windows
Windows 技术篇-设置计划任务,每天自动关机
Windows 技术篇-设置计划任务,每天自动关机
440 0
Windows 技术篇-设置计划任务,每天自动关机
|
存储 Oracle 关系型数据库
windows计划任务+批处理文件实现oracle数据库的定时备份与恢复
1.  备份: PS:2014-1-15 如果导出的dmp数据文件不大的话,就直接每天导出好了,不要只保存七天的数据。然后顶起通过winrar对文件进行打包,我发现dmp文件的压缩包还是很高的。 那么就需要考虑在导出的dmp文件末尾加上日期了。
2457 0
|
Web App开发 Windows

热门文章

最新文章