> For the complete documentation index, see [llms.txt](https://dcollao.gitbook.io/my-pentest-book/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dcollao.gitbook.io/my-pentest-book/writeups/htb-hackthebox/htb-bizness.md).

# HTB - Bizness

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

## Información General

* **Nombre de la Máquina:  Bizness**
* **IP de la Máquina:**  10.10.11.252
* **Sistema Operativo: Linux**
* **Dificultad: Easy**
* **Fecha de Publicación:**  06 Jan 2024

***

### **Enumeration**

#### **Establecer el objetivo**

Primero, establecemos el objetivo utilizando el comando `settarget` con la dirección IP de la máquina objetivo:

```bash
settarget 10.10.11.252
```

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

#### **Ping de reconocimiento**

Realizamos un ping a la máquina objetivo para verificar la conectividad y obtener información sobre la ruta utilizando la opción `-R` para incluir la ruta de retorno:

```bash
ping -c 1 10.10.11.252 -R
```

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

#### **Escaneo de puertos con Nmap**

Luego, realizamos un escaneo de puertos utilizando Nmap para identificar los puertos abiertos en la máquina objetivo. Utilizamos las opciones `-p-` para escanear todos los puertos, `--open` para mostrar solo los puertos abiertos, `-sS` para un escaneo de tipo TCP SYN, `--min-rate 5000` para establecer la velocidad mínima de paquetes y `-vvv` para un nivel de verbosidad alto. Además, utilizamos `-n` para desactivar la resolución de DNS, `-Pn` para no realizar el escaneo de ping, y `-oG allPorts` para guardar la salida en un archivo con formato Greppable:

{% code overflow="wrap" %}

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

{% endcode %}

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

#### **Escaneo detallado con Nmap**

Posteriormente, realizamos un escaneo más detallado de los puertos identificados utilizando la opción `-sCV` para detección de versiones y scripts de enumeración de servicios. Específicamente, indicamos los puertos a escanear con `-p __PORTS__` (reemplazando `__PORTS__` con los puertos identificados en el paso anterior) y guardamos la salida en un archivo de texto con el nombre `targeted`:

```bash
sudo nmap -sCV -p22,80,443 10.10.11.252 -oN targeted
```

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

```
cat targeted -l java
```

Para añadir la entrada "10.10.11.252 bizness.htb" al archivo `/etc/hosts`, puedes usar el siguiente comando en la terminal:

```bash
echo "10.10.11.252 bizness.htb" | sudo tee -a /etc/hosts
```

Este comando añade la dirección IP `10.10.11.252` asociada al nombre de host `bizness.htb` al archivo `/etc/hosts` de tu sistema.

Para realizar un descubrimiento de directorios en un sitio web utilizando Dirsearch (<https://github.com/maurosoria/dirsearch>).&#x20;

{% code overflow="wrap" %}

```bash
 sudo python3 dirsearch.py -u https://bizness.htb/ --exclude-status 403,404,500,502,400,401
```

{% endcode %}

<figure><img src="/files/QZC4YE8jgqPAnwt1wvf3" alt=""><figcaption><p>dirsearch.py </p></figcaption></figure>

### Explotation

Durante una evaluación de seguridad, al revisar el endpoint `/control/login` de la aplicación web, se identificó que la aplicación estaba utilizando Apache OFBiz. Tras investigar, se encontraron dos posibles vulnerabilidades: CVE-2023-51467 y CVE-2023-49070. Estas vulnerabilidades podrían permitir un bypass de autenticación en OFBiz.

Para verificar si el sitio era vulnerable manualmente, se realizaron pruebas exploratorias en el endpoint `/control/login`. Posteriormente, se decidió probar el exploit disponible en el repositorio [jakabakos/Apache-OFBiz-Authentication-Bypass](https://github.com/jakabakos/Apache-OFBiz-Authentication-Bypass) para confirmar la vulnerabilidad.

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

Probamos inyectando manualmente para ver si es vulnerable:

<figure><img src="/files/Af5GcDbVt6YK0VkRRE0O" alt=""><figcaption><p>It's!</p></figcaption></figure>

Ejecutamos el payload para tener nuestra reverse shell.

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

### Privilege Escalation&#x20;

Durante la investigación de seguridad, se descubrió un archivo llamado `AdminUserLoginData.xml` ubicado en `/opt/ofbiz/framework/resources/templates`. Este archivo contiene información relacionada con el inicio de sesión de los usuarios administrativos, incluyendo hashes de contraseñas.

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

Con ayuda de ChatGPT creamos un script para crackear el hash:

{% code overflow="wrap" %}

```python
#sha1_bruteforce.py --sha1 "SHA1"

import hashlib
import base64
import argparse
from colorama import Fore, Style

def crypt_password(salt, password):
    return hashlib.sha1((salt + password).encode('utf-8')).digest()

def crack_password(salt, search_hash, wordlist_path):
    with open(wordlist_path, 'r', encoding='latin-1') as f:
        for password in f:
            password = password.strip()
            hashed_password = base64.urlsafe_b64encode(crypt_password(salt, password)).decode('utf-8').replace('+', '.')
            if hashed_password == search_hash:
                return password
    return None

# Parse command line arguments
parser = argparse.ArgumentParser(description='Crack SHA-1 hashed password')
parser.add_argument('--sha1', type=str, help='SHA-1 hash to crack', required=True)
args = parser.parse_args()

salt = "d"
search_hash = args.sha1
wordlist_path = '/usr/share/wordlists/rockyou.txt'

print(f"{Fore.GREEN}Creado por ChatGPT{Style.RESET_ALL}")
print("="*30)

password = crack_password(salt, search_hash, wordlist_path)

if password:
    print(f'{Fore.YELLOW}Contraseña encontrada: {password}{Style.RESET_ALL}')
else:
    print(f'{Fore.RED}Contraseña no encontrada en el diccionario.{Style.RESET_ALL}')
```

{% endcode %}

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

Con eso tenemos ya las credenciales para obtener nuestro root.txt como nuestro user.txtç

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