You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复MS13-098的PowerShell脚本推送失败,咨询Windows安全设置

MS13-098漏洞修复脚本推送时注册表导入失败的问题分析与解决

问题背景

我编写了一个PowerShell脚本,通过修改注册表项修复MS13-098漏洞,脚本分为两步:创建注册表文件、导入注册表文件。脚本在本地运行正常,但通过Automox Worklet或Dameware推送执行时,仅第一步创建文件的操作生效,第二步注册表导入无法执行。想了解Windows中是否存在阻止PowerShell脚本修改注册表的安全设置,以及如何解决该问题。

用户提供的脚本如下:

$ScriptAlreadyRun = Test-Path "C:\Tempt\Reg\patch.reg"

if (!($ScriptAlreadyRun)) {
New-Item -ItemType Directory -Path C:\Tempt\Reg 
New-Item "C:\Tempt\Reg\patch.reg" -ItemType File -Value ""
Add-Content "C:\Tempt\Reg\patch.reg" "Windows Registry Editor Version 5.00"
Add-Content "C:\Tempt\Reg\patch.reg" "[HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Wintrust\Config]"
Add-Content "C:\Tempt\Reg\patch.reg" "`\"EnableCertPaddingCheck`\"=`\"1`\""
Add-Content "C:\Tempt\Reg\patch.reg" ""
Add-Content "C:\Tempt\Reg\patch.reg" "[HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Cryptography\Wintrust\Config]"
Add-Content "C:\Tempt\Reg\patch.reg" "`\"EnableCertPaddingCheck`\"=`\"1`\""
 
regedit /s import C:\Tempt\Reg\patch.reg
}

可能的原因分析

  1. regedit命令语法错误:脚本中使用的regedit /s import C:\Tempt\Reg\patch.reg存在语法错误,import是多余参数,正确的静默导入命令应为regedit /s "C:\Tempt\Reg\patch.reg",这是导致导入失败的最直接原因。
  2. 权限不足:推送工具运行脚本时未获取管理员权限,修改HKEY_LOCAL_MACHINE下的注册表项需要管理员权限,若脚本以普通用户权限执行,导入操作会被系统阻止。
  3. 32位/64位环境差异:如果推送工具在32位PowerShell环境下执行脚本,regedit会自动重定向到32位注册表路径,可能导致导入逻辑混乱;同时,C:\Tempt目录在32位环境下的访问权限也可能存在差异。
  4. 安全软件拦截:Windows Defender或第三方杀毒软件可能将静默导入注册表的操作判定为恶意行为,从而拦截regedit的执行或脚本生成的reg文件。
  5. 临时路径权限问题:虽然脚本创建了C:\Tempt\Reg目录,但运行脚本的账户对该目录可能缺少读写权限,导致reg文件无法正常读取或执行。

解决方案

1. 修正regedit命令语法

将脚本中的导入命令修改为正确格式:

regedit /s "C:\Tempt\Reg\patch.reg"

2. 直接用PowerShell操作注册表(推荐)

避免依赖外部工具regedit,直接使用PowerShell的注册表操作命令,更稳定且不易被拦截:

$ScriptAlreadyRun = Test-Path "C:\Tempt\Reg\patch.reg"

if (!($ScriptAlreadyRun)) {
    # 创建标记目录和文件(用于判断脚本是否已执行)
    New-Item -ItemType Directory -Path C:\Tempt\Reg -Force
    New-Item "C:\Tempt\Reg\patch.reg" -ItemType File -Value "" -Force

    # 处理64位注册表项
    $regPath64 = "HKLM:\Software\Microsoft\Cryptography\Wintrust\Config"
    if (-not (Test-Path $regPath64)) {
        New-Item -Path $regPath64 -Force | Out-Null
    }
    Set-ItemProperty -Path $regPath64 -Name "EnableCertPaddingCheck" -Value "1" -Type String

    # 处理32位注册表项
    $regPath32 = "HKLM:\Software\Wow6432Node\Microsoft\Cryptography\Wintrust\Config"
    if (-not (Test-Path $regPath32)) {
        New-Item -Path $regPath32 -Force | Out-Null
    }
    Set-ItemProperty -Path $regPath32 -Name "EnableCertPaddingCheck" -Value "1" -Type String
}

3. 确保脚本以管理员权限执行

在Automox Worklet或Dameware的任务配置中,勾选“以管理员身份运行”选项,确保脚本拥有修改HKLM注册表的权限。

4. 排查安全软件拦截

  • 临时关闭Windows Defender实时保护或第三方杀毒软件,测试脚本是否能正常执行。
  • 若确认是安全软件拦截,将脚本路径、C:\Tempt\Reg目录添加到安全软件的信任列表中。

5. 更换临时文件路径

改用系统默认的临时目录存放reg文件,避免自定义路径的权限问题:

$tempPath = Join-Path -Path $env:TEMP -ChildPath "Reg"
$regFile = Join-Path -Path $tempPath -ChildPath "patch.reg"
$ScriptAlreadyRun = Test-Path $regFile

if (!($ScriptAlreadyRun)) {
    New-Item -ItemType Directory -Path $tempPath -Force
    # 后续操作使用$regFile路径替代原路径
}

内容的提问来源于stack exchange,提问作者Huy Than

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 09:02:17