在文件内搜索文件名

在文件内搜索文件名

有人在我服务器上的每个 WordPress 实例上放置了大量恶意代码。第二次。 (至少)每个js文件都被修改了。不过有一个模式,代码总是如下所示:

/*[file-name]*/[malicious code]/*file-name*/

有什么方法可以使用 grep 和 sed 来删除这些碎片吗?之前的攻击在文件中放置了类似的代码,我使用它摆脱了它

grep -rnwl './' -e "[/*]d754948f7cc08347e64716505bd652ae[*/].*[/*]d754948f7cc08347e64716505bd652ae[*/]" | xargs sed -i "s/[/*]d754948f7cc08347e64716505bd652ae[*/].*[/*]d754948f7cc08347e64716505bd652ae[*/]//g"

有没有办法修改此表达式以使用每个文件名而不是像“d754948f7cc08347e64716505bd652ae”这样的固定字符串?

答案1

我逐步创建最终代码,首先我们找到所有 js 文件:

find <project_dir> -type f -name '*.js'

然后我们迭代这些文件:

find <project_dir> -type f -name '*.js' | while read file_path; do
    # Code here run once for every file
done

然后我们使用文件名创建一个模式,并使用它sed来消除文件中的恶意代码:

find <project_dir> -type f -name '*.js' | while read file_path; do
    file_name=$(basename "$file_path")
    pattern="/\*$file_name\*/.*/\*$file_name\*/"
    sed -ri "s:$pattern::g" "$file_path"
done

一些注意事项:

  • 第零步是备份您的文件。
  • sed命令中我使用"s:$pattern::g"而不是"s/$pattern//g",因为我们的搜索模式中已经有“/”,这会让人感到sed困惑。
  • 这段代码处理包含空格的文件名,至少我尝试处理它。

相关内容