首先抱歉,我几天前问过这个问题,但因为留下了一些敏感信息,所以不得不删除。我本想编辑一下,但得到的回复却重复了同样的信息(对不起 harrymc!)
我们在运行 Win Server 2012 R2 的 Web 服务器上有大量资产遭到入侵并被注入了文件,例如:
- LPT3.H3EgW.asp
- LPT7.PVYMnLcu2.asp
- 辅助功能.Ayqgg1e.asp
- CON.9w84pu.cer
无法通过资源管理器删除这些,因为它会返回无效的文件句柄,因为文件名中包含保留字。
我可以使用以下方法删除它们:
del \\.\D:\path_to_file\CON.9w84pu.cer
我希望能够在主父目录中 搜索所有子目录以查找类似LPT3.*.asp
(和/或) 的模式,并删除找到的任何内容。包含许多 vhost 目录,所以我希望能够一次性找到它们。LPT*.*.asp
D:\inetpub\
我在 PowerShell 中尝试了以下操作:
Get-Childitem -path D:\inetpub\ -Filter *.asp -Recurse | where-object {$_.Name -ilike "LPT3.*.asp"} | Remove-Item -Force
但返回的内容是:“Remove-Item:无法删除项目。\LPT3:找不到文件”。
还尝试在父目录中的命令行中进行以下操作
del /Q /F /S "LPT3.*.asp"
但返回的结果为:“文件名、目录名或卷标语法不正确。”
用户 harrymc 建议:
cd /mnt/d/inetpub
rm `find . -name 'LPT3.*.asp' -print`
但这涉及安装 WSL,我现在想避免安装其他东西,看看是否可行。
2021 年 8 月 20 日更新:
根据用户 harrymc 的评论尝试了以下操作:
Get-Childitem -path \\?\d:\inetpub\ -Filter *.asp -Recurse | where-object {$_.Name -ilike "LPT7.*.asp"} | Remove-Item -Force
没有收到错误,并且 PowerShell(以管理员身份运行)返回了一个新行,准备执行下一个命令,因此看起来它可能已经起作用了,但是当我检查目录时,该文件仍然在那里。
有趣的是,我将上面的行改为更激进的行(它位于 vhosts 目录中,该目录中不应该有任何 .asp 文件)
Get-Childitem -path d:\inetpub\domainname.co.uk\httpdocs\ -Filter *.asp -Recurse | Remove-Item -Force
并得到以下内容:
Remove-Item : Cannot remove item \\.\LPT7: Could not find file
'D:\inetpub\domainname.co.uk\httpdocs\images\LPT7.PVYMnLcu2.asp'.
At line:1 char:85
+ ... asp -Recurse | Remove-Item -Force
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (D:\inetpub\doma...7.PVYMnLcu2.asp:FileInfo) [Remove-Item], FileNotFoundExce
ption
+ FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand
在第一行中,PowerShell 知道它需要\\.\
(就像在 CMD del 命令中一样)但是如果我尝试在路径的开头使用它,我会得到“Get-Childitem:不支持给定路径的格式。”
有没有办法我可以使用批处理文件来查找并循环遍历匹配的项目,然后使用命令del \\.\D:\path_to_found_file\LTP3.foundfilename.asp
并插入要删除的文件名?
答案1
如果Get-Childitem
可以列出这些文件,我建议将文件名写入名为的文本文件f.bat
,使用文本编辑器将列表转换为del \\?\d:\...
,然后执行批处理文件。
此 PowerShell 命令可以获取起始列表:
Get-Childitem -path d:\inetpub\domainname.co.uk\httpdocs\ -Filter *.asp -Recurse | Select-Object -Property FullName | Out-File -FilePath .\f.bat
答案2
所以我最终选择了这个并放弃了 PowerShell 路线。
虽然它不漂亮也不优雅,但是却很管用。
SET "patterncon=CON"
SET "pattern=LPT1"
SET "pattern2=LPT2"
SET "pattern3=LPT3"
SET "pattern4=LPT4"
SET "pattern5=LPT5"
SET "pattern6=LPT6"
SET "pattern7=LPT7"
SET "pattern8=LPT8"
SET "pattern9=LPT9"
SET "pattern10=AUX"
SET "pattern11=CON"
SET "pattern12=PRN"
SET "pattern13=COM1"
SET "pattern14=COM2"
SET "pattern15=COM3"
SET "pattern16=COM4"
SET "pattern17=COM5"
SET "pattern18=COM6"
SET "pattern19=COM7"
SET "pattern20=COM8"
SET "pattern21=COM9"
FOR /R "D:\inetpub" %%# in (*.cer) DO (
ECHO %%~nx# | FIND "%patterncon%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
)
FOR /R "D:\inetpub" %%# in (*.asp) DO (
ECHO %%~nx# | FIND "%pattern%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern2%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern3%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern4%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern5%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern6%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern7%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern8%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern9%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern10%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern11%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern12%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern13%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern14%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern15%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern16%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern17%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern18%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern19%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern20%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
ECHO %%~nx# | FIND "%pattern21%" 1>NUL && (
Echo \\.\%%#
del \\.\%%#
)
)