lunes 16 de noviembre de 2009

PenTest: Session Prediction

Bueno previo de explicar como funciona quiero decirles que cuando las autentificaciones no están bien formuladas y nosotros obtenemos el cookie de una personas podriamos ponerlo y entraríamos como esa persona, según como lo hagamos se podría denominasr session fixation o cookie poisoning... ahora y eso que aquí la ponemos difícil miren las sigueinte cabecera:

Host: www.seguridadblanca.org
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; es-ES; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer:
Cookie: PHPSESID=de2se1e95f0d01fd0efb8c66d5c1b7d0
Cache-Control: max-age=0


Bueno ahora ustedes lo ven normal ven todo parecido a sus headers si es que fuese real... pero hay algo que cambió

esta línea:

Cookie: PHPSESID=de2se1e95f0d01fd0efb8c66d5c1b7d0

En este caso la cookie está encriptada en MD5

Ahora si empesemos con una breve explicación de que cosa es el Session Prediction, aquí ustedes pueden apreciarlo encritpado en MD5 pero imaginense la siguiente situación, me registro en www.sitiox.com y mis datos son:

user: Camilo
pass: ju$tat3st


ahora imaginen que ya estamos en el index de la web queremos no se administrar nuestro perfil y pues se nos ocurre poner el live http headers y cuando vemos los headers vemos esto:


Host: www.sitiox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; es-ES; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer:
Cookie: XSESID=camilositiox01
Cache-Control: max-age=0

vemos que la encriptación no está y la cookie que pasa con ella? mmm a ver la cookie segun lo que veo aquí es mi user + sitiox + 01 mmm veamos... nos salimos y creamos una cuenta en este caso los datos serán lo siguientes:

user: dedalo
pass: test2

y cuando volvemos a poner el live http headers vemos que dice esto:

Host: www.sitiox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; es-ES; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer:
Cookie: XSESID=dedalositiox01
Cache-Control: max-age=0

hemos visto como es el algoritmo de creación ya lo tenemos resuelto... digamos que ahora usamos un amiguito en PHP o PERL que contenga unas lineas con SOCKETS o CURL y pues ponemos el algoritmo o si no hacemos un exploit creo que una opción para sacar entrar como admin sería cambiar nuestro XSESID por XSESID=nombredeladminsitiox01.

Digamos que el 01 fuese por el numero de dias que lleva el sitio en la red con ayuda de sitios como archive o whois podríamos encontrar maneras de saber cuantos dias lleva en la red o pues ya tocaría usar la iamginación para desifrar que tipo de algoritmo usó para hacer su sesión.


Fix?

Para reparar este error antes que todo deberíamos de agregarle un MD5() antes de mostrar sus cookies para evitar estos errores... ahora tambien deberíamos agregar una variable que diga que si el user y pass son correctos verifique la cookie como lo dije en el anterior tutorial de Argument injection


Espero hayan entendido ya que no me fue fácil explicar como funcionaba esto... espero les guste...


Saludos
Dr.White