it-swarm-es.com

¿Cómo secuestrar una sesión?

A pesar del título descarado de la pregunta, esto es realmente para un propósito genuino.

Mi sitio usa un código PHP como este:

    $select="select id from tableA where user_id='".$_SESSION['sess_user_id']."'";

Realmente estoy tratando de pensar como un hacker y descubrir cómo puedo alterar este valor. He leído artículos que hablan "sobre" el secuestro de sesiones, pero soy impreciso sobre cómo se puede hacer eso ...

25
Steve

Básicamente, cuando secuestras la sesión de alguien, tomas su sessionID y finges que es tuyo. Por lo general, el ID de sesión se transfiere en la cookie, lo que significa que si puede acceder a la cookie de otras partes, simplemente puede ponerla en su propia cookie y ha robado su sesión.

Esto se puede hacer de varias maneras, por ejemplo, olfateando la red inalámbrica y mirando los paquetes HTTP que se transfieren o --- ataque XSS donde puede decirle al navegador de las víctimas que le revele su información de cookies.

Me gustaría mencionar que el ejemplo que describe en su pregunta también puede ser vulnerable a la inyección de SQL. Si cambio la ID de sesión de mi cookie a

asdf' OR 1=1-- 

Lo más probable es que sea autenticado como un usuario válido. Para evitar esto, debe asegurarse de tener un saneamiento adecuado de los datos sucios que provienen de sus clientes antes de usar los datos para algo.

10
Chris Dale

Si está interesado en una demostración práctica, Twitter es un muy buen ejemplo de lo fácil que se hace. Necesitarás:

  • Dos computadoras
  • Firefox con Firebug (obviamente, hay otras opciones, pero son populares y fáciles de obtener)
  • Un editor de cookies, como Advanced Cookie Manager (nuevamente, complemento fácilmente instalable a través de Firefox)

En la computadora A con firefox y firebug, inicie sesión en su cuenta de Twitter en el sitio que no sea https. Una vez que haya iniciado sesión, abra Firebug y mire la línea "GET Twitter.com". Cuando lo expanda, busque en la sección Encabezados de respuesta y encuentre Set-Cookie. Allí encontrarás una cookie llamada _Twitter_sess. Resalte y copie el valor (hasta el punto y coma).

Ahora abra Firefox con el administrador de cookies avanzado en la computadora B y vaya a la página de inicio de sesión de Twitter. Abra el Administrador de cookies avanzado y filtre para Twitter.com. Una vez que encuentre el dominio Twitter.com y su lista de cookies, verá una cookie llamada _Twitter_sess. Bórralo. Ahora haga una nueva cookie con el nombre "_Twitter_sess", ruta "/" y "Value" el valor de _Twitter_sess de la otra computadora. Guarda la galleta.

Ahora cierre el administrador de cookies y regrese a la página de inicio de sesión de Twitter, actualice la página y bam, ya está.

Ahora solo invente una forma inteligente de obtener la sesión de otra persona (wifi abierto, xss) y esa es una forma de cómo se realiza el secuestro de sesión.

7
Safado

El código de Karrax es un ataque de inyección SQL (al que su código es vulnerable, esto necesita ser reparado), no un ataque de secuestro de sesión.

$select="select id from tableA where user_id='"
    .mysql_real_escape_string($_SESSION['sess_user_id'], $db_handle)
    ."'";

En el secuestro de sesión, Bob roba el valor de la identificación de sesión que le asignó a Alice. Esto podría haber sido como resultado de un ataque MITM en la secuencia HTML, el rastreo de la red, un error de CSS que le permitió incrustar algunos javacript en su sitio u otros métodos.

Es importante no perder de vista los problemas de fijación de la sesión, incluso si configura las marcas SSL y HTTP solo en una cookie, Y establece use_only_cookies que no resuelve el problema donde Bob ataca la computadora de Alice antes de que ella acceda a su sitio y establezca un valor específico para el id de sesión Bob puede establecer el mismo valor en su computadora y sus solicitudes están vinculadas a la misma sesión que Alice. Entonces, cuando se autentica, debe generar un nuevo ID de sesión: consulte session_regenerate_id ()

4
symcbean

El secuestro de sesión generalmente implica robar una cookie de un usuario. Por ejemplo, Firesheep es un complemento para Firefox que roba sesiones a través de Wifi no seguro. HTTP es un protocolo sin estado, por lo que lo mejor que podemos hacer para autenticar a las personas es con cookies.

El código PHP que tiene en su pregunta es un ejemplo de código que podría ser susceptible a la inyección de SQL. Por lo general, es una buena práctica desinfectar las variables antes de ponerlo en una consulta como esa.

2
WalterJ89