======================================================== | Mini WriteUp | | WarGames SCT | | aka Defcon Captura la Bandera | | Campus Party Mexico #3 (2011) | | http://www.campus-labs.com/webapp/reto/ver/wargamessct | ======================================================== | Por: g30rg3_x | -------------------------------------------------------- Atencion ======== Este mini writeup no es oficial, ya que no participe de manera oficial en este WarGame/Torneo por lo que mi punto de vista del wargame es totalmente externo y no se debe tomar como desde el punto de vista de un participante regular. Notas ===== Este WarGame tenia transiciones entre-niveles por lo que a estas transiciones también las considere como mini stages. Stage 1 ======= A traves de la cuenta de twitter (@retosctcpmx3) del WarGame me entere de que la IP inicial era 201.166.142.251, un escaneo rápido nos indica 2 servicios/puertos muy básicos en un servidor actual, 22/ssh y 80/http. Al entrar a http://201.166.142.251/ nos encontramos con un formulario de login el cual al parecer esta mantenido por un servidor Microsoft-IIS 7.0 y la información del formulario se procesaba por un script ASP en http://201.166.142.251/procesar.asp Rápidamente descartamos lo anterior al ver la cabecera HTTP "X-Powered-By: PHP/5.3.6" así como al acceder directamente al script marcaba un notificación de PHP: Notice: Undefined index: usuario in /var/www/html/procesar.asp on line 12 Notice: Undefined index: password in /var/www/html/procesar.asp on line 13 Sin embargo una simple inspección al login nos daba un SQLi clásico, para no hacer mas largo este writeup básicamente era lo de siempre sacar las tablas encontrar el usuario de administrador y loguearse. Una vez encontrado el usuario (adminuser) sacabamos el password el cual estaba -al parecer en un hash md5-, tratar de crackear el hash md5 parecía imposible y para colmo el password cambiaba cada cierto tiempo así que lo mas seguro, es que no se tratara de crackear el hash, lo cual nos deja con simplemente intentar loguearse con el user y el pass-md5 lo cual resulto ser lo correcto al mostrarnos el mensaje: adminuser e7b295dedc226227f50807d3bec1f912 Script Kiddie!!! Sigue Avanzando...Primer paso completado, hasta ahora todo ha sido un juego de niños ... tienes que agudizar la Vista ... el que tenga mejores reflejos lo lograra antes ... Stage 1.5 ========= Acabamos de terminar el Stage 1 y solo nos dan la indicación de "agudizar la Vista" lo primero que se viene a la cabeza es ver el código fuente de la anterior respuesta en el cual hay un comentario HTML: 3128 es un puerto asociado por lo regular con un proxy-http (normalmente squid), por lo que se deduce que debe a ver algo ahí, así que abrimos http://201.166.142.251:3128/ Para nuestra suerte, parece ser que es el camino correcto ya que nos encontramos con el siguiente mensaje: No creas que has superado tu etapa de script kiddie, para ser un verdadero h4x0r deberás pasar la Etapa 2, por que no intentas tus habilidades con este numero 3383135996 El numero 3383135996 corresponde a la versión entera de la IP en decimal: 201.166.142.252 (se podía obtener esto con un convertidor como este http://www.silisoftware.com/tools/ipconverter.php). Nota: Este paso era obligatorio ya que parecía que este hacia una especie de web port knocking el cual se confirmo al tener un fallo-técnico resuelto y comunicado por uno de los administradores del WarGame en su cuenta de twitter: http://twitter.com/#!/toorandom/status/94607546039533568 Stage 2 ======= Un escaneo rápido a la IP 201.166.142.252 nos da nuevamente los puertos 22/ssh y 80/http. Al entrar a http://201.166.142.252/ se nos mostraba el mensaje por default de Apache 2 (el de "It Works!") pero como decían anteriormente, agudizando la vista veíamos que en un comentario HTML en el código fuente estaba el /etc/passwd del servidor? Para el momento que entre al WarGame ya habían dado una pista en el twitter del torneo que decía: Atentos campuseros!!! Pista para Stage 2!!!! "Debian PRNG" #cpin_sr #cpmx3 http://twitter.com/#!/retosctcpmx3/status/94198629874675712 Con lo anterior ya esta etapa era muy fácil de hacer, ya que solo era cuestión de usar el "Remote host key scanner for Debian SSH por Hubert Seiwert" el cual se puede obtener de la web itsecurity.net para obtener la llave privada que le corresponde al servidor así como bajar la llave necesaria de http://digitaloffense.net/tools/debian-openssl/ Así que procedamos... g30rg3x@localhost$ ./debian_ssh_scan_v4.py 201.166.142.252 201691 fingerprints loaded. 201.166.142.252:22 sshd fingerprint c9f959131a5aee5abc9b8e81ac99840c VULNERABLE (RSA 1024 bit key, pid 1337) De todos los usuarios mainadmin22312 era el único que se podia identificar, el cual al parecer como pista también tenia en el nombre de usuario, el numero de proceso (la semilla debil usada) asociado con la llave privada RSA. Ya con la llave privada era solo cuestión de identificarse: g30rg3x@localhost$ ssh -i rsa/1024/c9f959131a5aee5abc9b8e81ac99840c-22312 mainadmin22312@201.166.142.252 mainadmin221312@stg2:~$ Stage 2.5 ========= Atención: Este "stage transitorio" nadie lo paso, aquí es hasta donde llego Julio Barrera aka @hdstryOwrld Ya dentro del servidor del stage2 había una carpeta tools que contenía un README con el siguiente mensaje: muy bien ahora dale de comer al calamar y estaras a un paso de stage 3 donde hay un connectback en el irdmi inactivo.... Junto a este README estaba una carpeta bin que contenía 2 enlaces simbólicos, uno hacia netcat y otro hacia tcpdump. Analizando el mensaje podía deducirse que había que hacer algo con el servidor localizado en http://201.166.142.251:3128/ que era parte del stage 1.5, se probaron varias cosas, se le escaneo con nikto, skipfish, etc... inclusive probé abrir el archivo http://201.166.142.251:3128/bacaladillas (el cual deduje del mensaje y de buscar en google que comen los calamares, aunque no me fije que decía calamares gigantes xD). Según uno de los administradores del WarGame (@toorandom) este Stage-Transitorio se pasaba de la siguiente manera: Se abría el archivo http://201.166.142.251:3128/peces del cual obteníamos una IP (desconocida/no-anunciada) el cual no contaba con ningún puerto abierto, por lo que se debía deducir (posiblemente de un mensaje adjunto a la IP en el archivo peces) que la cuestión era enviar (255) paquetes ICMP echo request 8 con codigo 133 hasta obtener la conexión inversa hacia el puerto 8000 el cual daba el acceso al siguiente stage. Stage 3 ======= No se llego a ver este stage, pero seguro había al menos unos 2 o mas stages con sus respectivos stages transitorios, una lastima por que seguro eran muchísimo mas difíciles/divertidos que los anteriores pero ni modos serán para el siguiente año. Conclusiones ============ Aunque solo se vio muy poco del WarGame se veía bien formado, con ideas claras hacia que se quería evaluar pero tengo que decir que tampoco todo estuvo bien, según leo en el twitter, el stage 1.5 estuvo un largo periodo de tiempo offline (al parecer 5 o 7 horas offline) tiempo que obviamente no se le devolvió al participante, también no me puedo ir sin decir que el Stage 2.5 era muy difícil de deducir y tal vez se hubiera guardado este mismo para los stages mas difíciles o inclusive para el final (si este era el stage final entonces mis mas sinceras disculpas, les quedo perfecto xD). En general veo con felicidad que poco a poco los WarGames van tomando mas cabida en México y claro mas gente interesada en participar, esto es bueno por que muchas veces la mayoría de las investigaciones de seguridad actuales son poco probables de encontrar en la vida real, por lo que los WarGames ofrecen la posibilidad de encontrarse con estos escenarios improbables y poder probar nuestras habilidades/conocimientos de una manera legal. Sin mas que añadir solo me resta felicitar a Eduardo Ruiz Duarte aka beck y Omar Lara Salazar aka elchito así como la Secretaría de Comunicaciones y Transportes por el esfuerzo realizado al desarrollar este WarGame. EoF