Skip to: [ home ] [ search ] [ menus ] [ content ] [ mostrar/esconder menu de contenido ]


01010010011000010110010001101001011011110101001001100101011000100110010101101100011001000110010100100001

header() Passtrhough vía GET

Si bien esta no es una técnica, se podría tomar como una ya que se logra acceder a información que no debería ser vista por ningún usuario ya que no presenta los requisitos o privilegios para ello. A lo que me refiero es el traspaso de header() por medio de un HTTP GET desde una terminal, esto lo había visto hace rato y me intereso mucho. Su solución es tan simple como su modo de conseguir el traspaso. Supongamos que estamos desarrollando una aplicación web y estamos por su sección de administración, a este nivel seguro se utilizaran cookies y/o tokens para saber quien debería ver el archivo de administración y quien no, y para eso elegimos (como muchos..) a la función header() para redireccionar al usuario si no cumple con estas medidas de seguridad. Un codigo simple:

<?php
session_start();
if(!session_is_registered(’username’)){
header(’Location: http://www.victima.com/login.php’);
}
?>

<html>

<body>
SECRET CODE: 564132138
</body>
</html>

Bueno, el código funciona perfectamente si tratamos de acceder a el sin habernos registrado, porque nos va a redireccionar a “http://www.victima.com/login.php”.. Pero que pasaria si hacemos esto:

root@c1c4tr1z:/# nc www.victima.com 80
GET /admin.php HTTP/1.0

HTTP/1.1 302 Found
Date: Mon, 03 Mar 2008 19:20:02 GMT
Server: Apache PHP/5.2.3

X-Powered-By: PHP/5.2.3

Set-Cookie: PHPSESSID=73a12c965dd12b413b4713e9a25dc437; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: http://www.victima.com/login.php
Content-Length: 55
Connection: close
Content-Type: text/html

<html>
<body>
SECRET CODE: 564132138
</body>
</html>

De este modo podemos “atravesar”la funcion header() mediante un GET para que tome todo lo que se encuentra en HTML y llegar a lo que queríamos ver, que es la información que se evita transmitir. Para solucionar esto se necesita simplemente colocarle un exit() al bucle que checkea la si existe una sesión.

<?php
session_start();
if(!session_is_registered(’username’)){
header(’Location: http://www.victima.com/login.php’);

exit;
}
?>

Que termina la lectura de el archivo y redirecciona, cerrando la conexión en el momento del exit(). O sea:

root@c1c4tr1z:/# nc www.victima.com 80

GET /admin.php HTTP/1.0

HTTP/1.1 302 Found
Date: Mon, 03 Mar 2008 19:29:40 GMT
Server: Apache PHP/5.2.3

X-Powered-By: PHP/5.2.3

Set-Cookie: PHPSESSID=005d06971141aefae56af9ff4ad93abf; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: http://www.victima.com/login.php
Content-Length: 0
Connection: close
Content-Type: text/html

2 Comments to “header() Passtrhough vía GET”

  (RSS feed for these comments)

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Si, igual esto es medio “absurdo” :) .. Te recomendaria (si usas Java) que pruebes la suite Burp, ya que tiene spiders, artilugios excelentes para modificar cookies, intrusion, etc.. Yo hace poco hize un articulo para New-Bytes sobre spoofing de cabezeras y XSS usando ese programa.

Saludos!

C1c4Tr1Z said this on March 29th, 2008 at 8:22 pm

muy bueno bro… de este tema hay mucho que profundizar… si bien no es exactamente lo mismo, pero el uso de achilles o tamper data ayuda mucho a este tipo de tecnicas por decirlo de esa manera… muy bueno salu2

Mr.S!k[R]!O said this on March 28th, 2008 at 5:15 pm