windows杂谈:notepad 的红队利用新手法及工具的实现
字数 1108 2025-08-19 12:42:10
Windows Notepad 红队利用新手法及工具实现
概述
本文详细介绍了Windows自带的Notepad(记事本)程序在红队行动中的新型利用手法,特别是利用Notepad的"记忆"特性实现持久化和其他攻击场景。
Notepad的"记忆"特性分析
当用户使用Notepad打开一个大型文件(如200MB的JAR文件)时,Notepad会尝试加载整个文件到内存,导致程序卡死或崩溃。关键特性在于:
- 会话恢复:Notepad会记住上次打开的文件,并在下次启动时尝试重新打开
- 文件删除不影响记忆:即使原始文件被删除,Notepad仍会尝试打开该路径
- 崩溃循环:对于大文件,这会导致Notepad进入启动即崩溃的循环
利用场景
1. 持久化后门
通过修改注册表,将恶意脚本设置为Notepad默认打开文件:
- 创建恶意脚本(如PowerShell后门)
- 修改注册表使Notepad记住该文件路径
- 设置Notepad为默认打开方式
当用户尝试打开Notepad时,会自动加载恶意脚本。
2. 权限维持
在提权后,利用此特性在系统关键位置植入后门:
- 将恶意DLL伪装成文档
- 通过Notepad特性使其记住该DLL路径
- 结合其他技术实现DLL劫持
3. 用户骚扰
通过使Notepad不断尝试打开不存在的大文件路径,造成用户体验下降。
技术实现
注册表键值分析
Notepad的记忆功能存储在以下注册表位置:
HKEY_CURRENT_USER\Software\Microsoft\Notepad
关键值:
RememberFile:控制是否记住上次打开的文件szFile:存储上次打开的文件路径
手动利用步骤
- 使用Notepad打开目标文件(如
malicious.ps1) - 关闭Notepad(确保路径被记住)
- 验证注册表值是否更新:
Get-ItemProperty -Path "HKCU:\Software\Microsoft\Notepad" -Name "szFile" - 设置Notepad为.ps1文件的默认打开程序(可选)
自动化工具实现
可以使用以下PowerShell脚本自动化此过程:
function Set-NotepadPersistence {
param (
[string]$FilePath,
[switch]$SetAsDefault
)
# 确保文件存在
if (-not (Test-Path $FilePath)) {
New-Item -Path $FilePath -ItemType File -Force | Out-Null
}
# 通过Notepad打开文件以记录路径
Start-Process notepad.exe -ArgumentList $FilePath -Wait
# 验证注册表是否更新
$regPath = "HKCU:\Software\Microsoft\Notepad"
$szFile = (Get-ItemProperty -Path $regPath -Name "szFile" -ErrorAction SilentlyContinue).szFile
if ($szFile -eq $FilePath) {
Write-Host "[+] Notepad persistence successfully set for $FilePath"
} else {
Write-Host "[-] Failed to set Notepad persistence"
return
}
# 可选:设置为特定扩展名的默认打开程序
if ($SetAsDefault) {
$ext = [System.IO.Path]::GetExtension($FilePath)
if ($ext) {
cmd /c "ftype $ext=%SystemRoot%\system32\notepad.exe `"%1`""
cmd /c "assoc .$ext=$ext"
Write-Host "[+] Set Notepad as default for $ext files"
}
}
}
防御措施
-
禁用Notepad记忆功能:
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Notepad" -Name "RememberFile" -Value 0 -
监控注册表修改:
- 监控
HKCU\Software\Microsoft\Notepad键的更改 - 特别关注
szFile值的异常路径
- 监控
-
应用白名单:
- 限制Notepad打开可执行文件或脚本文件
-
用户教育:
- 避免使用Notepad打开不可信的大文件
- 注意异常的文件关联
检测方法
-
检查Notepad相关注册表项中的可疑文件路径:
Get-ItemProperty -Path "HKCU:\Software\Microsoft\Notepad" -Name "szFile" -
查找异常的Notepad进程启动参数:
Get-WmiObject Win32_Process -Filter "name='notepad.exe'" | Select-Object CommandLine -
监控Notepad崩溃日志:
Get-EventLog -LogName Application -Source "Application Error" -Message "*notepad.exe*" -After (Get-Date).AddDays(-1)
总结
Notepad的这一特性虽然看似无害,但在红队行动中可被巧妙利用实现持久化和其他攻击目的。蓝队应关注此类非常规的持久化技术,并在防御策略中加入对标准Windows组件异常行为的监控。