miércoles, septiembre 09, 2009

Reto Hacking X: Solucionario (III de III)

*****************************************************************************************
- Reto Hacking X: Solucionario (I de III)
- Reto Hacking X: Solucionario (II de III)
- Reto Hacking X: Solucionario (III de III)
*****************************************************************************************

De nuevo nos encontramos ante uno de esos pasos que normalmente necesitan de muchas pruebas, alguna idea feliz y algo de suerte, porque con los datos que tenemos no está claro cuál es nuestro siguiente objetivo. Si lo pensamos bien, hemos obtenido algún nuevo dato al que aún no le hemos dado uso (el nombre del autor y una parte de una ruta local que seguramente sería la típica “Documents and settings”), así que a pesar de no estar seguros de que éste sea el camino correcto, nos centraremos en averiguar la ruta correspondiente a dicho usuario (pero podría haber sido un ataque por diccionario o fuerza bruta al servidor FTP o cualquier otra ocurrencia, quién sabe).

Tras varias pruebas sin éxito basadas en multitud de combinaciones factibles entre el nombre y el apellido (incluyendo solamente las iniciales, con y sin el punto que los separa, etc), junto con palabras que empiecen por “docu” y alguna prueba más, finalmente obtenemos una ruta que nos devuelve un error diferente al 404 (como curiosidad, esta prueba se le ocurrió a Dani recordando el servicio de páginas personales de la universidad y de tantas otras aunque en realidad éstas suelen estar basadas en Unix y no en Windows –que era el caso del reto–):

http://retohackingx.elladodelmal.com/~way.smithers

Parece que vamos por buen camino, puesto que tirando del hilo hemos dado con la ruta del usuario, pero en esta ocasión el servidor no nos lista el contenido del directorio, así que también tocará averiguar el fichero concreto que buscamos. Por los datos que obtuvimos anteriormente, resulta bastante obvio que el nombre del fichero más probable es “peticion_homer_simpson.doc” y así resultó ser. Lógicamente, se trata de un simple fichero de Word (en su formato binario clásico) y podemos abrirlo para ver que su contenido era el siguiente:

Estimado trabajador Homer J. Simpson,

El consejo de administración de la central nuclear de Springfield se pone en contacto con Ud. para solicitar su asistencia en una labor rutinaria carente de todo peligro.

Creemos que Ud. es la persona adecuada para realizar la compra de un material de oficina que le facilitara su labor. Para ello, desde su domicilio, use su terminal para navegar por la siguiente URL:

X

Acuda a la sección Sacapuntas atómicos y compre el modelo AtomicSharpener Krusty Edition. No olvide usar su tarjeta de crédito para realizar la compra.
Al finalizar esta tarea acuda a la cafetería de su centro de trabajo donde tendrá DONUTS GRATIS durante toda la jornada.


Seguramente más de uno estará pensando que esa X la hemos reemplazado nosotros para no exponer la solución final, pero no es así. En el documento no aparecía ninguna URL, por más que intentáramos localizar objetos ocultos desde el propio Word, intentando seleccionarlos, activando el control de revisiones, etc. Nuevamente volvemos a intentar extraer algún metadato con la FOCA y en esta ocasión únicamente obtenemos el nombre de dos usuarios (“Administrator” y “Ultimateuser”), lo que nos podría haber sido de utilidad en algún paso posterior, pero ya os adelantamos que no.

Sin embargo, otro dato que también aparece (incluso en la ficha de propiedades, sin usar la FOCA) es el número de revisiones del documento y en este caso observamos que nuestro documento ha sido modificado y guardado en 5 ocasiones, lo que nos hace sospechar que en alguna de ellas se eliminó algún contenido que seguramente nos pudiera interesar.

En las versiones relativamente antiguas de Word existía una opción de guardado rápido, la cual aceleraba el guardado de las modificaciones de un documento, a costa de aumentar su tamaño y almacenar los cambios de forma incremental. Esta opción se deshabilitó por completo en el SP3 de Office 2003 (tal y como se indica en este artículo de la KB de Microsoft), precisamente para evitar situaciones como esta, en la que veremos cómo podremos recuperar una información que había sido eliminada por el usuario que editó y guardó el documento.

Si abrimos y analizamos el documento con un editor hexadecimal, observaremos que hay una cabecera de un fichero PNG que comienza a partir del byte 5.346 y que termina (IEND) en el byte 37.255. Puesto que en el documento no veíamos ninguna imagen por ningún sitio, parece que el siguiente paso más lógico es el de extraer dicho fragmento y ver qué se esconde en esa imagen. Al hacerlo, vemos una imagen completamente negra de 443 x 50 píxeles, lo que de momento parece bastante inútil.

Seguimos analizando el contenido del fichero y nos encontramos con otra cabecera de otro formato de imagen muy conocido (GIF89a), pero resulta que esa cabecera no aparece en otra parte del documento, sino dentro del PNG que acabamos de extraer hace un momento. Si truncamos la parte inicial de ese fichero hasta llegar a la nueva cabecera y le asignamos la extensión GIF, la imagen es perfectamente visible. Es más, la solución de Román es más simple todavía: cargar el documento Word con un editor hexadecimal y eliminar todos los bytes desde el principio del fichero hasta el comienzo de la cabecera GIF (es decir, justo antes de la cadena “GIF89a”). Parece que a los visores GIF no les importa demasiado que haya “porquería” al final del fichero o al menos al visor que utilizamos, que fue el de Windows.

El caso es que al abrir el fichero resultante con un visualizador adecuado (que contemple las animaciones del GIF), veremos una imagen animada (también de 443 x 50 y formada por 38 fotogramas). El último fotograma de la imagen es el que se muestra a continuación (el resto de fotogramas mostraba poco a poco la imagen con un efecto cortina de izquierda a derecha y no tenía más utilidad):


Mensaje en Braille

Si la propia imagen no nos dice nada ya de por sí sola, también teníamos una pista a nuestra disposición, ya que el fragmento de la imagen en el fichero binario iba precedido del texto “braile” (lo que probablemente se correspondería con el nombre del fichero original). Efectivamente, se trata de un texto codificado en Braille, el conocidísimo alfabeto de los ciegos, así que para averiguar lo que está escrito no tenemos más que comparar los signos con los de cualquier tabla de referencia de dicho alfabeto, teniendo en cuenta que cada signo está formado por una matriz de tres filas y dos columnas de puntos (presentes o ausentes):


Alfabeto Braille

Si utilizamos como referencia cualquiera de las tablas que aparecen en las primeras posiciones de cualquier buscador, veremos que van saliendo la mayoría de los símbolos y es fácil intuir que se trata de una URL, por lo que podemos ir deduciendo algunos de ellos muy fácilmente (como los dos puntos y las barras), pero hay otros que no encontramos por ningún sitio y la cosa se complica un poco:

http://retohackingx.elladodelmal.com

/?r?t?????????????solved/theend.aspx

Todo parece indicar que ya estamos muy cerca del final, pero aún nos falta un buen trozo de la URL y tendremos que encontrar los símbolos que nos faltan, o intentar deducirlos, ya que algunos de ellos se repiten y puede que eso nos permita encontrar algún patrón o pista para intuir alguna palabra.

La verdad es que en el caso de Dani se tuvo la suerte de encontrar una tipografía (fuente o tipo de letra) que contenía exactamente todos los símbolos restantes y ayudándose del mapa de caracteres de Windows los fue sacando cómodamente. Bueno, al decir que tuvo suerte tampoco queremos decir que lo encontrara en cuestión de segundos, porque estuvo un buen rato buscando y no encontró nada útil hasta que pensó que tal vez existiera algún tipo de Braille adaptado al mundo de la informática y buscó la cadena “Unicode Braille” en Google, encontrando entre los primeros 5 resultados una página web con diferentes ficheros TTF de tipografías de Braille descargables desde ahí mismo y probó con la primera de las que aparecían, resultando ser perfectamente válida y adecuada para esta fase del reto.

En cualquier caso, de no haber encontrado la tipografía exacta, podíamos haber aplicado un proceso deductivo, basándonos en las dos letras que habíamos logrado decodificar y en el símbolo de la fila de tres puntos a la derecha, que tenía pinta de ser algún tipo de separador, así como del símbolo que más se repetía (el de los tres puntos representando una especie de esquina inferior derecha).


|r_t*|_*|_**_|*_|solved

Si logramos intuir que la primera palabra era “reto”, escrita al más puro estilo hacker (“r3t0”), ya tenemos un paso importante, puesto que ahora podremos reemplazar el símbolo del asterisco por ese cero que acabamos de encontrar y tal vez podamos asumir que todos los símbolos restantes fueran dígitos y lanzar un pequeño ataque de fuerza bruta, aunque si seguimos con la racha de contextualizar más aún la URL, podemos intuir que el segundo bloque es un 10 (recordemos que estamos ante el décimo reto) y que el siguiente se corresponde con la fecha (año y mes). De todas formas, aún no hemos dado con el carácter separador, pero eso ya os lo dejamos como ejercicio si os apetece intentarlo... ;-)

El razonamiento de Román fue similar. Él no tuvo la suerte de encontrar el TTF adecuado pero viendo que faltaban los números y comparando las agrupaciones de puntos que faltaban por resolver con una tabla Braille se podía observar que los puntos estaban incorrectamente trasladados una fila hacia abajo y que tampoco se había utilizado el símbolo especial para designar números. Deshaciendo el “shift” anterior era trivial obtener los caracteres numéricos restantes y con éstos el separador también era fácil de adivinar.

Tal vez más de uno se extrañe de ver esa representación tan peculiar de los dígitos en Braile, puesto que lo normal (tal y como aparece en la inmensa mayoría de referencias y como estamos acostumbrados a ver en ascensores y otros lugares) sería prefijar con el símbolo de número (una L reflejada horizontalmente) las primeras letras del abecedario (a=1, b=2, c=3, etc). ¿Y por qué no se hizo así? Pues la verdad es que no tenemos ni idea, pero parece que alguno estaba empeñado en complicarnos las cosas con pequeños detalles cuya resolución lleva más tiempo del que parece. O simplemente se equivocaron (bien al traducir a mano o bien por utilizar un .ttf erróneo y arrastrando por tanto los fallos), que es la opción más probable.

En fin, tras este último paso termina el reto (queda resuelto de forma automática al acceder a la URL correcta):


Fin

Apareciendo nuestro nombre de usuario en el ansiado Hall of Fame y dándonos la satisfacción que ello conlleva.


Hall of Fame

Como curiosidad para terminar, añadir que ambos finalizamos el reto casi al mismo tiempo (y antes de las 24h del inicio del mismo) pero Román decidió no “firmar” hasta pasados tres días. La razón es que inicialmente él utilizó el XML obtenido con la herramienta de Dani para continuar con el resto de pruebas, puesto que el método del WebScarab era más lento así que posteriormente decidió compensar esa ventaja auto-penalizándose con tres días (que podrían haber sido muchos menos pero de alguna forma se quiso premiar y reconocer el trabajo de los que crearan su propia herramienta de Blind XPath Injection así como darle más emoción al reto).

Agradecimientos y comentarios

Suponemos que a nadie se le habrá escapado el detalle de que por primera vez ambos nos hemos aliado para resolver un reto de Informática 64, así como para redactar este documento. También nos gustaría conocer las impresiones, técnicas y trucos del resto de participantes, ya que no han sido pocos los que han resuelto el reto.

Quién sabe si la próxima vez volveremos a participar juntos o por separado, pero en cualquier caso ha sido una experiencia divertida y motivadora. De no haber sido así, seguramente nos habríamos aburrido mucho antes y no habríamos estado conectados hasta las tantas de la madrugada... ;-)

En fin, queremos terminar este documento agradeciéndole al equipo de I64 por la organización del reto y, sobre todo, al resto de participantes porque sin ellos los retos no tendrían sentido… Y cómo no, a Dreyer y Uri, dos de los más brillantes “Pwndas”.

Saludos,

Daniel Kachakil (dani@kachakil.com)
Román Medina-Heigl Hernández (roman@rs-labs.com)

PS: Puedes descargar el pdf con el solucionario completo de:

- http://www.rs-labs.com/papers/i64_reto_10.pdf
- http://www.kachakil.com/retos/I64_Reto_10.pdf

*****************************************************************************************
- Reto Hacking X: Solucionario (I de III)
- Reto Hacking X: Solucionario (II de III)
- Reto Hacking X: Solucionario (III de III)
*****************************************************************************************

17 comentarios:

Anónimo dijo...

1... 2... 3... 4....
...SAAAAAAAAAAAAMMMBAAAAA

Que calladitos estamos hoy :D

Anónimo dijo...

Si mejor no decir NADA, que con la que está cayendo ultimamente...
Por cierto, mu chulo el solucionario.
Un sALudo.
Manolo.

RoMaNSoFt dijo...

Ummm, qué raro, mi máquina con Vista me está dando pantallazos azules muy extraños desde anteayer......... xDDDDD

Qué raro con el maligno no haya comentado nada :-P

-r

Anónimo dijo...

@Romansoft ¿Cómo va a hacerlo? recuerda que el Maligno usaba (así, en pasado xDDD) windows vista y luego windows 7 y luego se puso un w2008 server y luego... seguro que le han winnukeao...
;-P

Un sALudo.
Manolo.

Maligno dijo...

Últimamente es que el tal Chema ese no habla de na. Mira que saltarse el hackeo de la web de Apache, la troyanización de squiremail y las elevaciones e privilegios en Linux.. y ahora se salta esto del Nuke... vaya rollazo de blog!

@Román, es raro que le pase eso a tu máquina, cuando creo que usas XP, pero mi Vista, conectado a Inet todavía va bien, aunque a lo mejor es pq mi vista trae un Firewall NO tecnicoless edition, porque tenemos la beta de TMG y se puede filtrar con GAPA o porque... quién sabe...

Saludos!

agux dijo...

A la primera pista de todas, la del zurditorium... ¿cómo inyecta un zurdo SQL?

Muy fácil:

1='1" ro '

Por poner un ejemplo. ¿Sabeís la de pruebas que estuve haciendo para intentar inyectar esto? Y además, tanto con el usuario como la contraseña.

Por supuesto, en dos o tres días abandoné esperando que publicarais la solución. Casi me tiro de los pelos cuando vi que me acerqué, pero no lo suficiente.

agux dijo...

Creo que sobra decir que mi idea era que hicieran una especie de strreverse o similar.

dreyercito dijo...

Vaya tela! Pues anda que no habia trabajo ni nada en la segunda parte. Felicidades a ambos, muy currado. Chema mariquita, ultimamente te pasas metiendo cosas para que la gente vaya lenta!

Maligno dijo...

@dreyercito... te juro que no fuy yo sólo....

pero no era un reto tan imposible.

Saludos!

Anónimo dijo...

@Maligno No te piques, jejeje, que te lo decimos desde el cariño.
Hay que tomarse las cosas con buen humor, que si no este curro no lo aguanta nadie.

El post/reto/solucionario está genial.

Un sALudo.
"\x00\x26" xDDDD

Pedro Laguna dijo...

Bueno, despues de leer las tres partes de la solucion me descubro ante dos grandes genios, los felicito publicamente y les pido disculpas por pensar que tardarian mas de 24 horas en resolverlo.

Yo unicamente puedo hablar de la parte mia (la del XPath) y he de decir que la codificacion de los caracteres - y , no fue algo arbitrario (en realidad cualquiera caracter URLscapado hubiese colador en la aplicacion). El motivo real de hacer esto fue que:
- El navegador (y por tando ASP.Net) separa los idiomas por comas y puntos y coma, asi que debiamos permitirlos para poder realizar la inyeccion.
- El guion era el caracter que delimitaba los pares de idiomas por idioma-pais, asi que tambien debiamos de dejar mostrarlos, porque haciamos un split para quedarnos con el idioma (nos daba igual un es-es que un es-ar)

Pense durante un momento el no permitir esos caracteres pero no se podria haber completado el reto. (¿Alguien acepta el reto? ;-) )

A ver con que nos deleita el sotano de I64 para el proximo reto, que yo ya tengo ganas de la adrenalina de los retos :-)

Un saludo y de nuevo felicidades a todos los que lo habeis completado!

Anónimo dijo...

Di que sí Maligno, que digan lo que quieran, que en todas partes cuecen habas. Que sin el programa de seguridad en el desarrollo ese que implantaron los de Spectra, no sé qué hubiera pasado.

Que eso de las regresiones es para Linux, que no tienen ni orden, ni programa de seguridad, ni estrategia de actualizaciones ni nada; aficionados...

Y no pongas ahora un post de esos de los tuyos contando vulnerabilidades de los últimos 6 meses en Linux y Windows porque...

¿y las risas que nos echamos?

Saludetes.

Dani Kachakil dijo...

@agux: Sí, me hago la idea de las pruebas que hiciste, porque a todos nos pasó lo mismo y es muy desesperante. Por cierto, yo también probé más de una inyección con la cadena invertida, tal y como comentas. Si no llega a ser por la chorra que tuvo Uri...

@Pedro: Nada que disculpar, hombre, faltaría más... El cachondeo no fue porque pensaras que no lo íbamos a sacar en menos de 24 horas, sino porque Chema podría habernos soltado pistas para asegurarse la victoria y hacerte pagar la cena sí o sí, así que no entiendo cómo pudiste aceptarla.

Nos vemos en el próximo reto! (y no será el de intentar sacar el XPath sin esos caracteres, porque estoy de acuerdo en que no parece factible. Sin el guión creo que sí, pero sin la coma lo dudo mucho...) ;-)

vierito5 dijo...

Estáis hechos unos cracks :) Felicidades!

Jandro dijo...

increible el reto hacking.

parece que antes de pensar el reto hacking os visteis los simpsons desde el primer capitulo hasta el ultimo emitido en los usa sin ni un minuto de descanso porque.....

Respecto a los del solucionario.... mas de lo mismo, increible vamos. me quito el sombrero.

Respecto al winnuke que quereis que os diga, en mi win7 rtm sin firewall y sin na, es decir, que peor escenario ni hay, no hay forma de tumbarlo, me quedo con las ganas de ver un pantallazo azul en el 7.....

Jandro dijo...

parece ser que con el 2008 y el 7 en versiones RTM (salio a principios de agosto) ya no se puede hacer el defacement, si es que eso os pasa por utilizar software antiguo.....

RoMaNSoFt dijo...

@maligno: Me encanta discutir contigo! xDD O sea, que sale un fallo en los *últimos* Windows (ni SDL ni gaitas xD) que es de vergüenza (estoy por actualizar mi doc de ircwar para incluirlo xDDDDD), y sales del paso comparándolo con:
a) Un compromiso de un site por una clave SSH (¿esto qué tiene que ver con un fallo de SO?)
b) Otro hackeo de otro site (squirrelmail) (más de lo mismo)
c) Fallos de kernel de linux (aquí hace más pupa pero al menos éstos son casi siempre locales; sin embargo, el 0day-nuke este tumba windows remotamente que es un gusto xD).

Por cierto, ¿y ese solucionario "interno" que íbais a publicar? Ya te lo pido por aquí, a ver si surte efecto...

@dreyer: estoy contigo, ya se pasan poniendo cosas raras xDD

@pedro: tranqui, pero es que lo de la apuesta tuvo su gracia y ya sabes que somos un poquito cabr... }:-) Podrás perdonarnos xD (pero del papeo de Dani y mío te escaqueaste vilmente)

Entrada destacada

Infraestructuras Críticas y Sistemas Industriales: Auditorías de Seguridad y Fortificación de @0xWord

Desde hoy está disponible a la venta un nuevo libro de 0xWord centrado en la seguridad de los Sistemas Industriales y las Infraestructuras...

Entradas populares