【问题标题】:How to check for log4j vulnerability on windows (surface go)如何检查 Windows 上的 log4j 漏洞(Surface Go)
【发布时间】:2022-01-19 22:55:52
【问题描述】:

在这篇文章中: https://gist.github.com/Neo23x0/e4c8b03ff8cdf1fa63b7d15db6e3860b 声称以下 powershell 命令可以检查 log4j 漏洞:

gci 'C:\' -rec -force -include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path

这会导致访问被拒绝错误。 进一步检查显示必须以管理员身份运行 powershell。 https://docs.microsoft.com/en-us/answers/questions/32390/access-is-denied-while-i-am-running-a-command-in-p.html

这样做仍然会出现拒绝访问错误。 在上面的文章中,它对第一个问题说:

Set-ExecutionPolicy AllSigned

这仍然会导致访问被拒绝。

执行此操作还需要什么?

【问题讨论】:

  • 访问被拒绝错误意味着您当前的用户没有读取文件的权限,ExecutionPolicy 与此无关。
  • -ea 0-ErrorAction SilentlyContinue 的缩写,通常会抑制错误消息。你是说你还在买吗?请注意,即使以管理员身份运行,也可能存在不允许您访问的文件夹。
  • 您现在可以做的是运行您当前拥有的脚本,并获取那些以后无法读取的文件的列表。
  • 请注意,存在系统定义的联结(指向其他文件夹的链接)仅用于向后兼容,即使以管理员身份运行,也不允许枚举其内容 - 但是,这不是一个问题,因为它们只是指向允许枚举 的其他文件夹(只有 Windows PowerShell 抱怨这些,PowerShell (Core) 7+ 悄悄地跳过它们) - 请参阅this answer
  • 顺便说一句:你可以大大加快命令(仍然会运行很长时间)如下:gci C:\ -rec -force -filter *.jar -ea silentlycontinue | select-string "JndiLookup.class" | select -exp Path

标签: windows powershell log4j


【解决方案1】:

tl;dr

使用以下简化版本的命令,它的性能也会更好。

# Run WITH ELEVATION (as admin):
gci C:\ -rec -file -force -filter *.jar -ev errs 2>$null | # Use -filter, not -include
  select-string "JndiLookup.class" |  # Pipe directly to select-string
    select -exp Path

注意:-ea 0 - 简写:-ErrorAction SilentlyContinue - 应该通常使任何错误消息静音,但如果由于某种原因这对您不起作用,2>$null 应该是有效的。

-ev errs - 缩写:-ErrorVariable errs - 收集变量$errs 中出现的所有错误,您可以在事后检查这些错误以确定这些错误是否表明实际 权限问题

错误会出现在 Windows PowerShell 中,即使是在高程运行时,即与隐藏的系统连接有关,如下所述。但是,您可以忽略这些错误。

PowerShell (Core) 7+ 中,这些错误不再发生,您可以省略上面的 -ev errs 2>$null。然后出现的任何错误都表明存在真正的权限问题。


背景信息:

  • 一般来说,即使使用提升(以管理员身份)运行也不能保证可以访问 所有 目录。目录级别的文件系统 ACL 甚至可以阻止提升的进程枚举目录的文件和子目录。

  • 值得注意的是,有几个隐藏的系统连接(指向其他目录的链接),仅为 Vista 之前的向后兼容性而定义 - 例如 C:\Documents and SettingsC:\Users\<username>\My Documents - 即使是提升的进程'不允许枚举的子级。

    • 在文件系统枚举期间,这一事实仅在 Windows PowerShell 中变得明显,它报告这些连接的访问​​被拒绝错误。 PowerShell (Core) 7+ 相比之下,悄悄地跳过它们。
    • 即使在 Windows PowerShell 中,问题也只是一个装饰问题,因为这些联结点仅指向目录,可以用高程枚举,因此 em> 使用 -Recursive 枚举整个驱动器。
  • 要找到所有这些隐藏的系统连接:

     # Run WITH ELEVATION (as admin):
     cmd /c dir c:\ /s /b ashdl
    

更多信息在this answer

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 2022-01-16
    • 2022-01-20
    • 2022-01-17
    • 2022-01-22
    • 2022-01-17
    • 2022-01-17
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多