El reto comenzó como Chema había prometido, a las 20:00 del día 31 de agosto de 2007… ¡¡¡justo cuando estaba mudándome!!! No se como se las apaña para que siempre que publica un reto a mi me pille en mitad de algo y no pueda ponerme 100% con el… no se, el próximo debería de publicarlo un 31 de diciembre a las 23:55, seguro que no me pilla haciendo nada…
SyntaxEntramos en la página del reto… Y nos encontramos que esta ambientada en la serie de Alias. Muy bien, para una serie que no sigo y ahora me va a tocar ponerme al día… Menos mal que para los primeros compases se nos pone en antecedentes… Somos una espía que esta trozo de potable y que debemos entrar en la red de Profeta 5. La cosa pinta bien.
Observamos tres apartados:
• Acceso: Nos ofrece el típico usuario/contraseña. Esta parte tiene pinta de que no vamos a tener que tocarla hasta el final del reto
• Recursos: Aquí observamos que podemos listar los recursos de tipo impresora o terminal que hay en las distintas plantas. Tiene buena pinta y parece el punto critico de la aplicación
• Recuperar contraseña: Interesante funcionalidad para un servicio de alta seguridad como se presupone a una organización ultra secreta. De todas formas seguro que llegado el momento podemos sacarle alguna utilidad.
VagaryVamos a empezar a jugar con la aplicación, a ver que tiene para ofrecernos. Vamos a empezar por realizar un listado de los parámetros que puede recibir la pagina Default.aspx
• usuario
• password
• recurso – Puede tomar de la aplicación los valores Impresora y Terminal
• planta – Toma los valores de Primera Planta, Segunda Planta y Tercera Planta
• uid
• rPassword – Este parámetro recibe por defecto un valor true
• respuesta
De aquí podemos empezar a jugar con algunas cosas. Para empezar vamos a ver que pasa si modificamos alguno de los parámetros del buscador, por ejemplo:
http://retohacking4.elladodelmal.com/Default.aspx?recurso=Terminal&planta=Primera+Planta and 1=1Vaya, parece que esta vez no va a ir de Blind SQL Injection…
PurgationOk, parece que esto no es vulnerable a Blind SQL Injection… pero… ¿es que acaso hay algo más? Pues si, hay muchísimos más tipos de vulnerabilidades, como por ejemplo el XSS o el CSRF.
La OWASP (The Open Web Application Security Project) tiene una guía sobre vulnerabilidades, soluciones y recomendaciones donde podemos encontrar todo un listado con los últimos fallos de seguridad y una explicación teórica de su fundamento y su manera de explotarlos.
http://www.owasp.org/index.php/Guide_Table_of_ContentsAhora tenemos una lista con un montón de fallos y una pagina vulnerable. Veamos como podemos asociarlas… Aparte de los parámetros que tenemos para hacer las búsquedas en los recursos de la sociedad secreta vemos que hay uno que nos puede servir de pista: uid. Vamos a usar el buscador del Wiki de la OWASP para buscar si hay alguna técnica que use un parámetro llamado uid… ¡Bingo! ¡Los primeros resultados que nos muestra mencionan LDAP Injection!
Harbinger¿Y si estuviésemos consultando un árbol LDAP? Bien, vale, espera… ¿No sabes lo que es LDAP? Así para resumirlo un poco y que al menos sepas de lo que vamos a hablar te comentare que un árbol LDAP es una estructura que guarda datos referentes a la configuración física y lógica de un conjunto de ordenadores, personas, impresoras y resto de dispositivos que puedan conectarse a una red.
Este árbol puede ser consultado para que nos devuelva los datos que contiene. Esto se hace mendiante sentencias LDAP que pueden ser algo como: (cn=retos) y nos devolvería todo aquello que perteneciese al atributo reto o por ejemplo… (recurso=Impresora)(planta=Primera+Planta), que podría ser lo que estuviera haciendo por debajo la aplicación.
PerspicacityBien, ahora que sabemos que la sentencia LDAP (si es que es LDAP) debería de ser una cosa como “(cn=”.$recurso.”)(planta=”.$planta.”)” podríamos pensar que si sustituimos el valor de los recursos y las plantas por el comodín (*) nos debería de devolver todos los recursos disponibles en todas las plantas. Probemos:
http://retohacking4.elladodelmal.com/Default.aspx?recurso=*&planta=*Total: 12 O lo que es lo mismo… ¡Todas las impresoras y todos los terminales que hay en todas las plantas! (Compruébalo si no me crees) Parece que vamos bien…
ParadigmAntes de empezar a meter asteriscos, paréntesis e iguales como locos vamos a pararnos a pensar… Si hemos afirmado que la sentencia es “(cn=”.$recurso.”)(planta=”.$planta.”)” si introdujésemos en el valor de $recurso la cadena “Impresora)(planta=Primera Planta)” y eliminásemos el parámetro planta deberíamos de obtener los mismos resultados que si seleccionásemos la búsqueda por defecto, ¿no?
http://retohacking4.elladodelmal.com/Default.aspx?recurso=Impresora)(planta=Primera%20Planta)Total: 3 Por lo que nuestra suposición parece correcta, parece que hemos acertado acerca de la sentencia que ejecuta la aplicación contra el árbol LDAP.
WhimsyAhora que sabemos que nos enfrentamos a un árbol LDAP y que según la introducción al reto debemos de encontrar un usuario valido del sistema, se nos plantea la duda de como conseguirlo.
Muy bien, sabemos que con el carácter * podemos completar todo o una parte de un campo y que a Chema le encanta ir ciego… por lo tanto, ¿porque no pensar en
Blind LDAP Injection?
Quizás si vamos preguntando poco a poco a la aplicación sobre si un determinado campo empieza con una determinada letra y nos devuelve cierto (numero de impresoras/terminales conocidos) o nos devuelve falso (Total: 0) podamos determinar los valores de ciertos campos del árbol.
Quandary¿Que campos contendrá el árbol LDAP? ¿Cuál podrá sernos útil? ¿Cuál es el sentido de la vida, el universo y todo lo demás?
Para la ultima pregunta la respuesta es fácil, 42. Para las otras dos la respuesta la vuelve a tener la aplicación: uid
http://retohacking4.elladodelmal.com/Default.aspx?recurso=*)(uid=*)Total: 1
¡Esto marcha!
LamentationLa informática es la ciencia de automatizar las áreas repetitivas, así que vamos a buscar algo en Google que haga lo que nosotros queremos.
http://www.google.com/search?hl=en&q=%22blind+ldap+injection%22&btnG=Google+SearchVaya, parece que no hay nada sobre este tema… Tendremos que trabajar nosotros.
JuxtapositionSi en el Blind SQL Injection íbamos preguntando carácter a carácter, aquí vamos a realizar lo mismo, iremos probando sentencias como sigue:
http://retohacking4.elladodelmal.com/Default.aspx?recurso=*)(uid=*) – Total: 1
http://retohacking4.elladodelmal.com/Default.aspx?recurso=*)(uid=a*) – Total: 0
http://retohacking4.elladodelmal.com/Default.aspx?recurso=*)(uid=b*) – Total: 0
http://retohacking4.elladodelmal.com/Default.aspx?recurso=*)(uid=s*) – Total: 1Por tanto vamos a seguir el mismo proceso que para el Blind SQL Injection. (Realmente no es el mismo, pues en SQL podemos preguntar por el valor ASCII de un determinado carácter, aquí debemos probar uno a uno)
CatharsisHa llegado el momento de abrir nuestro IDE favorito (si, el notepad también vale, o el emacs…) y programarnos nuestra pequeña aplicación que automatice este proceso (También puedes hacerlo a mano…).
Yo en mi caso he usado C#, con un simple WebClient que realizaba las peticiones y comprobaba si estas contenían el texto “Total: 1” para comprobar si habíamos encontrado un valor válido.
Vilification ¡Genial! Con este usuario (sd6.sloane.arvin) ya podemos irnos a la parte de recuperación de contraseñas…
DenouementUna vez introducimos el usuario y pulsamos el botón de Check , nos muestra la pregunta secreta del usuario, en este caso:
“¿Dónde se cerro el Circulo?”Para responder a esta pregunta deberíamos de habernos visto la serie, los 105 capítulos de los que se compone, pero haciendo un uso apropiado de Google podremos encontrar la respuesta fácilmente… ¡Y esto ya os lo dejo a vosotros!
Pedro Laguna Durán