Hacker101 CTF — Micro-CMS v2— ALL FLAGS (Español)

2 years ago 392
BOOK THIS SPACE FOR AD
ARTICLE AD

gus

Que tal humanos? Yo de nuevo.

Han pasado 21 días desde mi ultima publicación en la cual les compartía mi walk -through para “Micro-CMS v1”, espero que les haya servido y hayan aprendido bastante.

Es momento de que continúe con el siguiente nivel de Hacker101 CTF, el cual lleva por nombre Micro-CMS v2, dificultad Moderada y 3 flags, básicamente, la versión “mejorada” del nivel anterior.

Hacker101 CTF — Micro-CMS v2

Doy click en Go y veo la misma pagina de la v1 pero en este caso la primera pagina tiene un nombre diferente, “Micro-CMS Changelog”, donde puedo entrar y ver un resumen de los cambios que se hicieron en esta v2:

Hacker101 CTF — Micro-CMS v2

Al leer el changelog, los comentarios mas importantes para mi fueron:

we added user authentication

By default, users need to be an admin to add or edit pages now

Así que, teniendo esa información en cuenta, empecemos con el primer flag!

Pistas:

Hacker101 CTF — Micro-CMS v2 — FLAG0

La primera pista lo que me hace pensar es que debo conseguir iniciar sesión para encontrar este flag, ya que posiblemente una vez que lo logre podre visualizar otras paginas, la segunda pista tiene una palabra clave, “union” la cual a mi parecer me dice que debo usar un ataque de SQL injection, y la tercera básicamente podría significar que no necesito la contraseña, por lo tanto todo me lleva a la conclusión de que debería tratar de hacer un Login Bypass usando un query SQL en el espacio del Username para poder conseguir el flag

Entonces, lo primero que haré es ir a la pagina de login de este nivel, para ello puedo simplemente:

1- Agregar“/login” a la URL

2- Tratar de crear una pagina

3- Entrar en una de las que ya están creadas y tratar de editarla

Recuerda que crear o editar una pagina te va a llevar a la pagina de login debido a que esa fue una de las mejoras de esta v2, que ahora se necesita autenticarse para realizar ciertas acciones.

FLAG0

Ahora que estoy en esta pagina, colocare un ‘ en el form de username, tal cual como sale en la imagen de arriba, y así compruebo si es vulnerable a SQL injection.

FLAG0

Al obtener este output puedo ver claramente que si es vulnerable, ya que la base de datos ha intentado ejecutar el query que he insertado y termino dándome un error (syntax error), adicional, el error me ha otorgado el nombre de la tabla que atacare, la cual es “admins”. Esto es oro, oro puro.

Ahora si, es hora de armar mi query, y no es por jugar de vivo pero no me llevo muchos intentos conseguir loguearme como admin, ya que luego de intentar alrededor de unos 10 queries diferentes pude recordar un statement de SQL que use una vez en OWASP Juice Shop, el cual es AS, así que decidí crear el siguiente query:

Username: ‘ UNION SELECT ‘costarica’ AS password FROM admins WHERE ‘1’=’1'

Password: costarica

Sin embargo seguía obteniendo un error y recordé un consejo de SQL injection attacks que un buen pentester compartió por medio de Twitter, básicamente consiste en que si tienes un al final de tu query, eliminarlo y correr otra vez el código.

Voilà!

FLAG0

Ahora que estoy logueado, la pagina automáticamente redireccionara al Home o puedo clickear en el botón “Go Home”

FLAG0

Una vez en Home, puedo ver dos cosas nuevas, un botón de “log out” y una nueva pagina llamada “Private Page”, haré click en la pagina ya que ahí debe estar el primer flag.

Listo, sumamos 3 puntos mas!

NOTA: Este flag se puede conseguir usando solo el comando cURL pero decidí usar cURL y BurpSuite para ser mas ilustrativo.

Pistas:

Honestamente, creo que este fue el mas tricky para mi, me tomo como 2 horas conseguir el flag, porque para ser franco no tenia ni idea de que hacer, hasta que poco a poco me fui encaminando.

Okay, primero lo primero, las pistas, la primera pista quiere que recuerde lo que podía hacer en el nivel anterior sin loguearme y cuales de esas acciones no puedo hacer en este nivel, para lo cual la respuesta seria: crear paginas y editar paginas.

Pues sabiendo eso avanzare a la próxima pista y aquí hay dos palabras claves: “request” y “method”, la primera palabra me hace pensar en HTTP request y la segunda en HTTP request methods, los cuales son por ejemplo GET, POST, PUT, HEAD etc…

La tercera pista me confundió un poco, como que entendía pero no entendía a la vez.

Perfecto, ya se que tengo que jugar con los methods de crear nueva pagina o de editar pagina, entonces (sin loguearme) decidi abrir mi BurpSuite, activar el proxy e interceptar los request, primero intercepte el request de crear nueva pagina y copie la url http://[ip]/[instance]/page/create y use cURL en mi terminal para saber cuales son los methods que esta url me permite usar:

cURL:

FLAG1

Perfecto, entre al tab Proxy de Burp, hice click derecho y envié mi request al repeater y cambie el method de GET a POST pero no logre nada, me redireccionaba a la pagina de login igualmente.

Burp:

Ahora lo que seguiría es hacer lo mismo con la url de editar pagina, confirmar con cURL los methods permitidos en la url http://[ip]/[instance]/page/edit/4 (puede ser cualquier numero de pagina), los cuales eran los mismos que la url de crear pagina, siguiente de esto, en Burp cambiar el method de GET a POST y boom! Ahí estaba el flag!

cURL:

FLAG 1

NOTA:Como les comente al principio de este flag, este se podría conseguir solo usando cURL, ya que en la imagen de arriba pueden ver que con esta herramienta también puedo enviar request con un respectivo method.

Burp:

3 putos mas! Ahora podemos avanzar al siguiente flag!

Pistas:

FLAG2

Fácil, consigue las credenciales y conseguirás el flag, entonces bien, de alguna forma debo saber cuales son las credenciales reales de algún usuario y entrar, este flag lo puedo conseguir de dos formas, haciendo una enumeración de la base de datos usando SQL map o manualmente con ataques de SQL injection hasta conseguir las credenciales y la otra opción seria hacer un ataque de fuerza bruta al login form, yo en este caso tomare la segunda opción.

Para el ataque de fuerza bruta usare Turbo Intruder, una extensión de Burp suite, que me permite realizar el ataque de una forma mas rápida y teniendo un poco mas de control que usando el Intruder que el mismo Burp trae.

Lo primero que haré es entrar a la pagina de login, activar el proxy de Burp y colocar cualquier cosa en username, igual en contraseña y le doy click en “Log In”.

FLAG2

Voy a Burp y en el tab Proxy vamos podre ver el request, selecciono lo que esta en username que seria “sadad”, le doy click derecho y luego click a “Send to turbo intruder” para iniciar el ataque de fuerza bruta al form de username, luego haré lo mismo con el form de password.

Proxy tab en Burp Suite:

FLAG2

Luego de enviarlo a Turbo Intruder se abre la siguiente ventana:

FLAG2

Esta es la ventana de Turbo Intruder, aquí puedo ver arriba el request del login y abajo una parte del script de la herramienta que realiza el ataque de fuerza bruta, puedo modificar las variables “concurrectConnections” y “requestsPerConnection” a mi gusto para mas velocidad o bien lo puedo dejar así, lo importante aquí es colocar en el segundo for loop el path del diccionario de usernames/password que usare para el ataque y en la parte de abajo, al final de la ventana hay un botón que dice Attack para iniciar el ataque.

Una vez doy click en Attack, la ventana cambiara, en la parte de abajo de la misma verán el avance del ataque y en la parte de arriba se empezaran a listar los posibles usuarios encontrados en la columna Payload.

Turbo intruder (username/password encontrados):

Cuando consigo un posible usuario, vuelvo a Burp, cambio el username “sadad” por el usuario que hayan conseguido con el ataque, selecciono el password incorrecto que puse y lo envío al turbo intruder para hacer el mismo ataque en el password form ya con mi usuario existente agregado, si alguna contraseña coincide, ya podremos probarlo en la pagina directamente.

En mi caso las credenciales era nicholas:morton, recuerden que estas seran diferentes para cada persona.

FLAG2

Apenas entre con las credenciales obtuve el flag.

FLAG2

Diccionarios de usuario/contraseña recomendados: https://github.com/danielmiessler/SecLists/tree/master/Passwords

Y hemos terminado! Otro nivel completado! Wujuuu!

Read Entire Article