有人在我服务器上的每个 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
困惑。 - 这段代码处理包含空格的文件名,至少我尝试处理它。