windows杂谈:notepad 的红队利用新手法及工具的实现
字数 1108 2025-08-19 12:42:10

Windows Notepad 红队利用新手法及工具实现

概述

本文详细介绍了Windows自带的Notepad(记事本)程序在红队行动中的新型利用手法,特别是利用Notepad的"记忆"特性实现持久化和其他攻击场景。

Notepad的"记忆"特性分析

当用户使用Notepad打开一个大型文件(如200MB的JAR文件)时,Notepad会尝试加载整个文件到内存,导致程序卡死或崩溃。关键特性在于:

  1. 会话恢复:Notepad会记住上次打开的文件,并在下次启动时尝试重新打开
  2. 文件删除不影响记忆:即使原始文件被删除,Notepad仍会尝试打开该路径
  3. 崩溃循环:对于大文件,这会导致Notepad进入启动即崩溃的循环

利用场景

1. 持久化后门

通过修改注册表,将恶意脚本设置为Notepad默认打开文件:

  1. 创建恶意脚本(如PowerShell后门)
  2. 修改注册表使Notepad记住该文件路径
  3. 设置Notepad为默认打开方式

当用户尝试打开Notepad时,会自动加载恶意脚本。

2. 权限维持

在提权后,利用此特性在系统关键位置植入后门:

  1. 将恶意DLL伪装成文档
  2. 通过Notepad特性使其记住该DLL路径
  3. 结合其他技术实现DLL劫持

3. 用户骚扰

通过使Notepad不断尝试打开不存在的大文件路径,造成用户体验下降。

技术实现

注册表键值分析

Notepad的记忆功能存储在以下注册表位置:

HKEY_CURRENT_USER\Software\Microsoft\Notepad

关键值:

  • RememberFile:控制是否记住上次打开的文件
  • szFile:存储上次打开的文件路径

手动利用步骤

  1. 使用Notepad打开目标文件(如malicious.ps1
  2. 关闭Notepad(确保路径被记住)
  3. 验证注册表值是否更新:
    Get-ItemProperty -Path "HKCU:\Software\Microsoft\Notepad" -Name "szFile"
    
  4. 设置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"
        }
    }
}

防御措施

  1. 禁用Notepad记忆功能

    Set-ItemProperty -Path "HKCU:\Software\Microsoft\Notepad" -Name "RememberFile" -Value 0
    
  2. 监控注册表修改

    • 监控HKCU\Software\Microsoft\Notepad键的更改
    • 特别关注szFile值的异常路径
  3. 应用白名单

    • 限制Notepad打开可执行文件或脚本文件
  4. 用户教育

    • 避免使用Notepad打开不可信的大文件
    • 注意异常的文件关联

检测方法

  1. 检查Notepad相关注册表项中的可疑文件路径:

    Get-ItemProperty -Path "HKCU:\Software\Microsoft\Notepad" -Name "szFile"
    
  2. 查找异常的Notepad进程启动参数:

    Get-WmiObject Win32_Process -Filter "name='notepad.exe'" | Select-Object CommandLine
    
  3. 监控Notepad崩溃日志:

    Get-EventLog -LogName Application -Source "Application Error" -Message "*notepad.exe*" -After (Get-Date).AddDays(-1)
    

总结

Notepad的这一特性虽然看似无害,但在红队行动中可被巧妙利用实现持久化和其他攻击目的。蓝队应关注此类非常规的持久化技术,并在防御策略中加入对标准Windows组件异常行为的监控。

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的记忆功能存储在以下注册表位置: 关键值: RememberFile :控制是否记住上次打开的文件 szFile :存储上次打开的文件路径 手动利用步骤 使用Notepad打开目标文件(如 malicious.ps1 ) 关闭Notepad(确保路径被记住) 验证注册表值是否更新: 设置Notepad为.ps1文件的默认打开程序(可选) 自动化工具实现 可以使用以下PowerShell脚本自动化此过程: 防御措施 禁用Notepad记忆功能 : 监控注册表修改 : 监控 HKCU\Software\Microsoft\Notepad 键的更改 特别关注 szFile 值的异常路径 应用白名单 : 限制Notepad打开可执行文件或脚本文件 用户教育 : 避免使用Notepad打开不可信的大文件 注意异常的文件关联 检测方法 检查Notepad相关注册表项中的可疑文件路径: 查找异常的Notepad进程启动参数: 监控Notepad崩溃日志: 总结 Notepad的这一特性虽然看似无害,但在红队行动中可被巧妙利用实现持久化和其他攻击目的。蓝队应关注此类非常规的持久化技术,并在防御策略中加入对标准Windows组件异常行为的监控。