OffSec VIKINGS

Primero que nada con lo basico buscar los puertos abiertos en la maquina.
# Nmap 7.94SVN scan initiated Fri Feb 16 11:53:00 2024 as: nmap -sCV -p22,80 -oN taregt.txt 192.168.1.170
Nmap scan report for 192.168.1.170
Host is up (0.00073s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 59:d4:c0:fd:62:45:97:83:15:c0:15:b2:ac:25:60:99 (RSA)
| 256 7e:37:f0:11:63:80:15:a3:d3:9d:43:c6:09:be:fb:da (ECDSA)
|_ 256 52:e9:4f:71:bc:14:dc:00:34:f2:a7:b3:58:b5:0d:ce (ED25519)
80/tcp open http Apache httpd 2.4.29
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Index of /
| http-ls: Volume /
| SIZE TIME FILENAME
| - 2020-10-29 21:07 site/
|_
Service Info: Host: 127.0.0.1; OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Fri Feb 16 11:53:12 2024 -- 1 IP address (1 host up) scanned in 11.98 seconds
Ahora con los puertos abiertos observamos las versiones y servicios que corren para cada uno de los puertos.

Si nos vamos ah observar la pagina web observamos que es una pagina web simple.

Haciendo fuzing en la pagina web encuntro el directorio war, yo le habia concatenado la extencion .txt, lo que significa que este directorio es war.txt.

Si nos vamos al txt, observamos que nos estan dando un nuevo directorio, si vamos a este directorio es una traya de info.

Asi que hice lo siguiente descargar todo el contenido.
Luego decodificarlo de base64 y pasarlo a un archivo zip.
7z

Si hacemos uso de 7z l nos lista que dentro del zip hay un archivo llamado king.
Haciendo uso de 7z x para extraer el contenido observamos que me pide contraseña, contraseña que no poseemos.
Binwalk

Hice uso de binwalk y no me pidio contraseña para extraer, observamos que se extrae una carpeta.

Entramos a la carpeta y hay un archivo user.
Tenemos varias posibles contraseñas y usuarios.
Me creo un pass.txt con todas las palabras que se me dieron para hacer un ataque de fuerza bruta, como floki esta en la lista usare este como usuario principal.

Fuerza bruta por SSH y tenemos un usuario y una contraseña para loguearnos.
Escalada de privilegios lxd

Observamos que floki esta en el grupo lxd, el cual podemos usar para escalar privilegios a root creando un contenedor.

Buscamos con search el exploit.
Nos lo descargamos a local y lo renombramos lx.sh.

Echale un ojo, al script y sigue las instrucciones, descarga primero el alpine, luego hacer un bash buil-alpine que nos creara el alpine .gz.
Nota todo esto se hace en local en tu maquina atacante no en la victima ya que para hacer el bash build necesitas ser root.

Tenemos todo preparado.
Primero nos compartimos un servidor con python3 desde local.
Luego desde la maquina victima nos descargamos el lx.sh.
Tambien el alpine.gz.

Ejecutamos el alpine.gz. y observamos que si hacemos un whoami somos root, pero no en la maquina real si no en el contenedor que fue creado. Pero ya con esto podemos darle permisos SUID a la bash, porque el contenedor se monta trayendose la raiz de la maquina real.
En una segunda terminal nos conectamos de nuevo por SSH como floki, y observamos que la bash no tiene permisos SUID.

Estando en el contenedor nos vamos a donde se llevo la raiz de la maquina HOST, /mnt/root, y le asignamos permisos SUID a la bas.
Ahora observamos que la bash si tiene permisos SUID, hacemos un bash -p y somos root y pues tenemos la bandera de root.txt
Maquina resuelta.
Última actualización