如何实现一个Atexec

倾旋
倾旋
技术分享|2020-6-28|最后更新: 2023-6-22|
type
status
date
slug
summary
tags
category
icon
password
URL

0x01 Atexec,一种横向方式

Atexec是一个除了Psexec以外,被高频使用的横向方式,该技术手段主要通过任务计划实现,与时间有关。
Atexec的主要特点是通过135端口进行任务计划任务的创建,同时通过445端口进行SMB认证,取回命令执行的结果。

0x02 执行过程

首先,我们用成品来进行一次命令执行:
 
notion image
执行完成,能够看到whoami的结果是SYSTEM权限,通过流量上分析:
 
notion image
首先,源主机192.168.164.1向目标主机192.168.164.140的135端口建立连接,由于是RPC协议,所以会进行一次端口随机的协商,于是源主机端口变成57523,目标主机源端口变成49154,这使得流量设备在数据传输上不能轻易的监控传输内容。
 
notion image
紧接着,源主机向目标主机进行SMB认证,完成文件的读取(命令执行结果),最终断开连接。
 
在操作系统的事件查看器中,(默认情况下)仅仅捕获了几条Windows认证的日志,关于服务、文件操作、应用程序等都没有相关日志。
 
notion image

0x03 实现过程

要实现一个Atexec并不难,首先需要梳理一下实现思路,第一步需要根据提供的凭证创建任务计划,然后程序等待任务计划完成后,获取任务计划的执行结果。

如何远程创建任务计划?

这里主要涉及到COM组件的操作,我用封装函数的方式来实现使得程序可读性变高。
使用凭证连接远程主机的任务计划接口:
Task Scheduler提供了许多函数及接口来操作任务计划,但是凡是涉及COM组件的操作,都变得有些复杂,但至少实现Atexec涉及到的知识点并不多。
如何创建任务计划:
这里主要是利用COM对象的接口函数来创建触发器、设置触发时间、执行频次等。
可以看到,这个函数中针对每个任务创建完成后,等待了大约10s来确保任务计划命令执行完毕,这就是我实现这个Atexec的一个缺点,其实还有更好的办法,就是每隔1s查询该任务计划的状态来确保任务计划执行。

如何获得执行结果?

这里我主要采用的是cmd /c command > 重定向到文件的方式,涉及到了SMB服务的连接、文件读取操作,这个和之前如何实现一个Psexec文中的内容有些相似。
这里默认主要是将命令执行结果写入了ADMIN$共享目录下,当然还可以更改为其他的。

0x04 Atexec完整代码

0x05 其他Atexec

impacket-atexec.py 是基于impacket库实现了MS-TSCH协议(只走445端口)来进行横向的脚本。
在我测试的过程中,Windows Server 2008上安装了360安全卫士后,横向无法取回结果,关闭360安全卫士后,成功执行,但我自己写的atexec就能够在360安全卫士开启的状态下完成命令执行、命令结果取回。
 
notion image
 
©2021-2024 倾旋. All rights reserved.