¿Cómo secuestrar una sesión?

24

A pesar del descarado título de la pregunta, esto es en realidad con un propósito genuino.

Mi sitio utiliza código PHP como este:

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

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

    
pregunta Steve 10.02.2011 - 08:51
fuente

4 respuestas

9

Básicamente, cuando secuestras la sesión de alguien, tomas su ID de sesión y finges que es la tuya. Por lo general, la 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 habrá robado su sesión.

Esto se puede hacer de varias maneras, por ejemplo, detectando la red inalámbrica y observando los paquetes HTTP que se transfieren o XSS attack donde puedes decirle al navegador de las víctimas que te revele la información de sus 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 cocinero a

asdf' OR 1=1-- 

Lo más probable es que esté autenticado como usuario válido. Para evitar esto, debe asegurarse de tener una correcta desinfección de los datos sucios provenientes de sus clientes antes de utilizar los datos para cualquier cosa.

    
respondido por el Chris Dale 10.02.2011 - 10:00
fuente
7

Si estás interesado en una demostración práctica, Twitter es un muy buen ejemplo de lo fácil que es hacerlo. 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 es https. Una vez que hayas iniciado sesión, abre Firebug y mira la línea "GET twitter.com". Cuando lo expanda, mire en la sección Encabezados de respuesta y busque 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 avanzado de cookies 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 "Valor" el valor de _twitter_sess desde la otra computadora. Guarda la cookie.

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

Ahora, cree 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 la sesión.

    
respondido por el Safado 06.12.2011 - 17:00
fuente
4

El código de Karrax es un ataque de inyección SQL (al que su código es vulnerable, esto debe solucionarse) 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 la sesión, Bob roba el valor del ID de sesión que le asignó a Alice. Esto podría haber sido el 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 reparación de la sesión, incluso si configura los indicadores SSL y HTTP solo en una cookie, Y establece use_only_cookies que no resuelve el problema en el que Bob ataca la computadora de Alice antes de que acceda a su sitio y establezca una 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 autentique, debe generar un nuevo ID de sesión - vea session_regenerate_id ()

    
respondido por el symcbean 11.02.2011 - 15:09
fuente
2

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 las cookies.

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

    
respondido por el WalterJ89 10.02.2011 - 09:59
fuente

Lea otras preguntas en las etiquetas