# 计划任务

在我们获得初始会话之后，我们需要考虑如何让我们的访问持久化。原因很简单，如果我们是通过利用漏洞进来的，对方可能察觉到痕迹然后修补漏洞，如果是通过泄漏的密码进来的，对方可能修改密码，如果是利用社会工程学进来的， 对方不太可能再次上当。此外，目标企业的安全团队与产品也在监视异常情况。

持久化访问，可以通过多种方式达成，并且只要对操作系统足够熟悉、想象力足够丰富，往往能诞生出非常规的持久化方式。持久化的表现形式可以有本地后门，即可以瞬间实现提权或对特定目标的访问，例如给一个低权限帐号设置高权限的 ACL 。还可以是远程控制的形式，即受害主机会以规律或不规律的间隔向 C2 服务器连接。作为从外部突破的红队操作员以及渗透测试人员角度，我们需要的是后者，即能直接提供 C2 会话。现在，我们来介绍常见的持久化技术之一，计划任务。

计划任务，顾名思义，创建特定任务并且在触发特定条件之后执行。这个条件可以是单纯的时间流逝，可以是用户登录，可以是屏幕被锁定/解锁等等。我们以时间的流逝为例，触发条件为每 1 分钟，任务运行 C:\\Windows\\Tasks\\Beacon.exe。代码为：

```powershell
schtasks /create /sc minute /mo 1 /tn Update /tr "C:\Windows\Tasks\Beacon.exe" /ru SYSTEM
```

**/sc** 与 **/mo** 指定了执行间隔为 1 分钟，Update为计划任务名称，可以创建地看起来合理，我们当然不能用 “Backdoor” 之类的字眼。然后是指定的应用以和参数 (这里没有参数)，以及指定以 **SYSTEM**权限执行。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/1IsVsCwk1W9RJabh-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/1IsVsCwk1W9RJabh-image.png)

(为了避免多重 Beacon，图例用了 calc.exe 代替)

我们可以通过命令行或者计划任务 GUI 查看

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/5uxPXqTXw6DNQOy9-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/5uxPXqTXw6DNQOy9-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/gkwiRSaqBL5D87xu-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/gkwiRSaqBL5D87xu-image.png)

同样的，我们也可以通过 **SharPersist** ([https://github.com/mandiant/SharPersist](https://github.com/mandiant/SharPersist) ) 工具来达成目的：

```
SharPersist.exe -t schtask -c "C:\Windows\Tasks\Beacon.exe" -n "Update" -m add -o hourly
```

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/uAFh6jrGuWlaNqnl-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/uAFh6jrGuWlaNqnl-image.png)

**-t** 参数为持久化技术，这里我们选择的是计划任务，当然 SharPersist 还支持其他技术，我们后面会说。其他参数大家都能看出来是什么作用。

但需要注意的是，默认情况下，计划任务持久化不够隐蔽，很容易被发现，并且这也是一个被聚焦在聚光灯下的方法。我们可以通过访问注册表 **HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Schedule\\TaskCache\\Tree\\** 并且删除后门计划任务的SD值，来隐藏计划任务。这样的话通过命令就无法找到了。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/9uYUFJecX8Mdnmkd-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/9uYUFJecX8Mdnmkd-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-03/scaled-1680-/E4tycimSErwlzsbN-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-03/E4tycimSErwlzsbN-image.png)