[Script] Tratar cookies esnifadas con Wireshark en PHP

Un sitio web puede tener más de una cookie en el ordenador del usuario que navega, pero las cookies críticas son las que nos permiten la identificación del usuario en la página web. De esta manera, mediante técnicas como los conocidos XSS o los MITM seriamos capaces de obtener cookies críticas que nos permitan falsificar y hacer creer al sistema que nosotros somos el usuario objetivo.

El problema viene cuando el objetivo de un esnifado de red es únicamente saber las cookies críticas del que navega. Con todos los paquetes de datos que recibimos, incluso filtrándolos por HTTP en Wireshark, tendriamos mucho trabajo por delante.

De este problema me surgió la necesidad de crear un script en PHP, el cual quiero compartir en el blog, que nos permite, no solo ordenar y obtener las cookies de manera agradable para la vista, sino que, incluyo una función en la que a partir de un array cuyo índice sea el domino y el valor sea el nombre de la cookie crítica de ese sitio, nos lo colorea de rojo, permitiéndonos así localizarlas más fácilmente. De la misma manera, nos quita las cookies de los hosts repetidos.

El código está completamente comentado y dividio en dos funciones que nos hacen el entendimiento más fácil. El archivo que tenemos que pasarle al script, ha de ser el fichero pcap guardado del wireshark una vez esté filtrado usando el siguiente filtro:
http contains "Cookie: "
Esto nos permite obtener los paquetes que contenga “Cookie:” que son los que nos interesan.

Este es un ejemplo del resultado. Sabemos que la cookie crítica de twitter es auth_token:

Script:





Documento sin título





0)
    $final[] = $valor;
}

//La matriz "final" contiene por cada valor, un paquete con host y cookie
//"resultado" es una matriz vacia en la que se almacenará el resultado devuelto
parsear_matriz($final,$resultado);


//Printeamos el resultado
foreach($resultado as $clave => $valor){

  echo $clave;
  unset($final);
		$nuevo = explode(";",$valor);
		foreach($nuevo as $valor2)
			$final .= "" . $valor2 . "
"; echo $final . "
"; } //FUNCIONES function parsear_matriz($matriz,&$resultado) { foreach($matriz as $valor) { $host = explode("Host: ",$valor); $host = explode("\r\nUser",$host[1]); //Host[0] tiene cada host $cookie = explode("Cookie: ",$valor); //Cookie[1] tiene el valor de la cookie en cada host detectar_cookies_criticas($host[0],$cookie[1]); $host[0] = "" . $host[0] . ":
"; $resultado[$host[0]] = $cookie[1]; //Devolvemos el resultado } } function detectar_cookies_criticas($host,&$cookie){ $buscar = array("twitter.com" => "auth_token"); //Esta matriz contiene el host y la cookie crítica que destacará en el caso de que la encuentre if(array_key_exists($host,$buscar)){ $nuevo = explode($buscar[$host],$cookie); $cookie = $nuevo[0] . "" . $buscar[$host]; $nuevo = explode(";",$nuevo[1]); $cookie .= $nuevo[0] . ";" . $nuevo[1]; } } ?>

Leave a Reply

Your email address will not be published. Required fields are marked *