domingo, 9 de octubre de 2011

Variables Superglobales que deberías vigilar (I)


Saludos,

Tengo el blog (y en general todo lo que es el internet) bastante abandonado por el tema de la universidad que me está absorbiendo demasiado. Aun así os pido disculpas y trataré de ir sacando algún que otro post rápido, como el de hoy.

Normalmente cuando un desarrollador crea una aplicación web en PHP, e intenta securizarla un poco, siempre aplica alguna clase de filtro a las variables que puedan ser manipuladas desde el lado del cliente. También los IDS hacen esto, analizando/filtrando aquellas variables que puedan ser manipuladas maliciosamente: $_GET, $_POST, $_COOKIE y $_REQUEST. Pero... ¿sólamente éstas son manipulables? La respuesta es NO. Existen otras variables que deberíamos de vigilar, como es el caso de $_SERVER y $_SESSION. Hoy veremos un poco de $_SERVER y el próximo día que pueda postear de $_SESSION.


$_SERVER es un array que contiene la información procedente de las cabeceras, así como la ruta de archivos. Los dos ejemplos más clásicos son los XSS (y SQLi) aplicados a PHP_SELF y X-FORWARDED-FOR. La primera variable hace referencia al script que se está ejecutando en relación con el directorio raíz, siendo explotable de esta forma por ejemplo:
www.ejemplo.com/<script>alert(/0verl0ad/)</script>


Por otro lado X-FORWARDED-FOR es utilizado por los proxys para indicar la IP de origen, por lo que suele tener interés para hacer spoofing, aunque últimamente con los sitios de estadísticas y de los que muestran tu propia IP y la geolocalizan, etc. suele emplearse más para inyectar código malicioso (JavaScript o inyecciones de otro tipo).


Al igual que con estas dos variables, existen otras tantas dentro del array de $_SERVER que pueden ser explotadas si son empleadas en el script sin sanitizarlas previamente:


<?php
echo $_SERVER['SERVER_PROTOCOL'];
?>

Si lanzamos una petición corrompida:


GET /p.php <script>alert(8)</script>
Host: ------

HTTP/1.1 200 OK
Date: Sun, 09 Oct 2011 10:59:52 GMT
Server: Apache/2.2.17 (Win32) PHP/5.3.6
X-Powered-By: PHP/5.3.6
Content-Length: 25
Connection: close
Content-Type: text/html

<script>alert(8)</script>



Ya sé que tiene poca chicha esta entrada, espero que la de $_SESSIONS sea más relevante.
5 0verl0ad Labs: Variables Superglobales que deberías vigilar (I) Saludos, Tengo el blog (y en general todo lo que es el internet) bastante abandonado por el tema de la universidad que me está absorbien...
< >