TryHackMe : Basic Pentesting
Après une petite période sans articles, voici mon writeup personnel sur la box BasicPentesting de chez THM !
On m’a quelques fois demandé des articles sur le monde du Pentest voir de la sécurité informatique de manière générale… alors j’en avais fait quelques-un, rien de très trenscendant car je ne suis en aucun cas un expert dans ce domaine, mais je me suis dit que pour 2021 ce serait l’occasion d’un peu plus se pencher sur cet aspect de l’IT.
J’ai donc décidé de me créer un compte sur le site TryHackMe, qui permet de réaliser du pentest sur des VMs dédiées gratuites (pas comme chez HackTheBox donc, enfin pas tout à fait) et très orientées débutants. Parfait donc !
En parallèle à ça j’ai commencé à lire quelques bricoles et à regarder les vidéos de ce cher Khaos Farbauti Ibn Oblivion, qui propose des vidéos/streams où il explique les différents outils de base pour réaliser du pentesting (dans le cadre de CTF notamment), ainsi qu’un tas d’autre chose bien sympa !
Le lien de sa chaîne ici pour les plus curieux.
I) Pentest, CTF, on parle de quoi au juste ?
Vous le savez maintenant, j’aime bien redéfinir de quoi on parle avant de me lancer à bras le corps dans un sujet. Et petit disclaimer au passage, je suis encore un sacré néophyte en la matière, j’ai à l’heure actuelle terminé 3 rooms seulement, donc pardonnez-moi d’avance si il y a quelques coquilles dans cet article ! 😅
Donc, rapidement :
- Pentest: littéralement penetration testing, ou test de pénétration en français. Comme son nom l’indique, c’est un « morceau » de la cybersécurité qui propose de se mettre dans la peau d’un attaquant et de scanner, tester, bruteforcer… bref de trouver les failles d’un serveur web, d’un réseau informatique entier, ou même d’une simple application et d’ensuite rédiger un rapport expliquant comment corriger ces dites failles.
- CTF: littéralement capture the flag, pas la peine de traduire en français je pense ! C’est un type de jeu -toujours dans le monde de la cybersécurité- où plusieurs joueurs doivent réussir à trouver des drapeaux sur une machine pour gagner. On notera généralement deux flags, le user flag et le root flag, qui se trouvent bien souvent dans le répertoire d’un utilisateur pour le premier et dans un répertoire root/admin pour le second.
Basique, mais ça ne fait jamais de mal de se rappeler un peu des fondamentaux. Pour la suite de l’article je vous rassure nous allons directement attaquer la dite box, c’est-à-dire la VM et je vais tâcher de détailler un maximum la façon de procédé ainsi que l’environnement que j’utilise et ses outils.
*Second petit disclaimer: si vous n’avez pas encore réalisé cette box, ne continuez pas jusqu’en bas car je vais dévoiler toute la solution (ou du moins une des solutions) pour la réussir !
II) Kali-Linux, OpenVPN, et TryHackMe
Une fois inscrit sur TryHackMe (pas de challenge comme chez HTB d’ailleurs, car c’est un site orienté débutants pour rappel), vous devrez installer OpenVPN pour vous connecter à leur réseau et pouvoir faire joujou avec les VMs que vous aurez fraîchement déployées.
Pour ma part, et comme énormément de gens, j’ai décidé de me créer une petite VM Kali-Linux sur mon VMWare Workstation. Classique, et efficace.
Concernant l’install’ de celle-ci rien de très compliqué, personnellement j’ai coché l’option pour avoir les outils facultatifs qui peuvent toujours être utiles.
Ensuite on se rend sur TryHackMe et on télécharge notre fichier de config OpenVPN et on peut se connecter !
Ici nous allons nous attaquer à la box Basic Pentesting, qui est une des plus simples mais qui représente parfaitement ce à quoi on peut s’attendre ici.
On clique donc sur Join the room, puis ensuite Deploy pour démarrer la VM. Cette dernière reste disponible une heure mais on peut rajouter autant d’heures que l’on veut, voir la continuer plus tard.
Ensuite, le site va nous « guider », car c’est une box pour débutants. Donc ici, nous allons devoir encoder au fur et à mesure des réponses, ce qui est bien plus facile que d’autres VMs où nous devons juste encoder le User Flag et le Root Flag.
Bien, une fois votre Kali installée (ou autre distribution du même acabit, comme Parrot OS), votre liaison OpenVPN effective, et votre VM déployée, il est temps de commencer !
III) Footprinting de base
Le footprinting, c’est le fait de scanner la cible, de vérifier la version de l’OS, voir les services qui tournent, quels ports sont ouverts, etc.
Ici et comme dans 90% des cas lors de CTF, on va débuter par un scan via l’utilitaire Nmap.
Le paramètre -A permet d’activer la détection de l’OS, des versions de services, et plus encore.
Ici on peut voir que nous avons un service OpenSSH qui tourne sur le port 22, un Apache sur le port 80, et même un service Samba ainsi qu’un
Tomcat !
En règle général dans les CTF, on ne s’attaquera pas d’amblé sur le service SSH, mais on va plutôt se concentrer sur le service web.
Si l’on se rend sur l’IP en question, voici ce qu’on obtient :
Et si l’on regarde le code-source…
Intéressant ! Mais rien de plus ici… On va donc réaliser de l’énumération maintenant, c’est-à-dire que l’on va utiliser un utilitaire comme dirbuster ou gobuster pour tester toute une série d’URLs et espérer tomber sur quelque chose d’intéressant.
*Quelque chose d’assez utile à faire et de vérifier la présence d’un robots.txt ou d’un sitemap.xml, histoire de directement voir si une url n’est pas déjà présente ici.
Pour démarrer notre énumération, nous utiliserons donc gobuster avec ces différents paramètres :
Le dir permet de lui indiquer que l’on souhaite scanner les répertoires, le -w lui permet d’aller utiliser un dictionnaire, et on peut même rajouter l’option -x qui permettrait de rechercher des extensions de fichiers, comme des .txt, .php ou autre.
Ici notre utilitaire a directement trouvé un /development, allons donc voir ça !
*Dans certains cas il peut être utile de laisser tourner dirbuster/gobuster même un peu après avoir trouvé une ou deux URLs, au cas où. On peut même tester plusieurs dictionnaires.
On a donc deux fichiers .txt, et voici ce qu’ils contiennent respectivement :
‘Pas sûr que ce soit très utile, du simple blabla… quoi que, ces deux initiales K et J pourraient nous êtres utiles si l’on doit rechercher des noms d’utilisateur par la suite.
Une autre note, mais cette fois on apprend que le mot de passe de « J » semble facilement craquable… intéressant !
A partir de là, que peut-on bien faire ? Bruteforcer un serveur SSH sans même avoir de nom d’utilisateur ou juste en ayant une initiale ? Bof. Essayer de trouver une faille dans le service Tomcat ou Apache ? Pourquoi pas, mais un poil avancé déjà non ? Nous n’avons pas encore testé le service SMB… allons voir ça en premier lieu !
IV) Énumération d’utilisateurs via SMB et bruteforce via Hydra
Si l’on se rend sur ce serveur SMB avec le simple explorateur de fichiers de notre Kali, on peut voir qu’un accès anonyme est disponible, avec un fichier .txt à l’intérieur !
Jay et Kay, voilà nos deux utilisateurs ! A noter que nous aurions pu aussi utiliser un utilitaire comme enum4linux qui aurait pu scanner le service SMB et nous détecter les différents utilisateurs, les partages, et plus encore.
Maintenant, que faire de plus ? Peut être serait-il temps de s’attaquer à notre serveur SSH ? On a notre notre utilisateur, donc c’est parti pour un peu de bruteforce avec l’utilitaire Hydra !
Pour bruteforcer un service SSH avec un utilisateur bien défini, il nous suffit de spécifier le dictionnaire à utiliser. Un dictionnaire est un simple fichier .txt rempli de mots différents, nous en avons déjà utilisé un plus haut pour le scan des différentes URLs 😉.
Pour le nom d’utilisateur, nous partirons sur Jan étant donné que dans les précédentes notes l’autre utilisateur lui indiquait que son mot de passe était très facilement craquable.
Comme toujours, on décortique rapidement la commande utilisée !
- -l : pour définir l’utilisateur ;
- -P : pour définir la wordlist à utiliser, ici nous prendrons « rockyou » qui est très connue et souvent utilisée dans le monde des CTFs pour débutants ;
- ssh : pour indiquer que le service à bruteforcer est SSH. Hydra permet de bruteforcer du SMB, du FTP, ainsi que certains formulaires web.
Après, il nous faut simplement patienter. Ici, les CTFs (surtout pour néophytes) sont pensés pour être facilement accessibles et pour ne pas devoir bruteforcer pendant des heures les différents services, donc en 5 à 10 minutes le bruteforce devrait être terminé.
Tadaaaa ! Le mot de passe est armando ! Essayons de nous connecter en SSH maintenant…
V) Privilege Escalation
Une fois connecté, on va devoir essayer de passer root en réalisant ce que l’on appelle de l’escalade de privilèges. C’est quelque chose qui peut s’avérer très simple comme très complexe, et qui dépendra beaucoup des situations. En temps normal, on réalise directement un sudo -l pour voir ce que notre utilisateur est capable de faire avec sudo :
Rien du tout… mais si par exemple il était capable d’utiliser wget, vim, ou encore tar, je peux vous assurer qu’il y a toujours des manières délirantes de pouvoir passer root avec celles-ci ! N’hésitez pas à aller voir sur ce site au passage, il est sacrément utile lors de CTF 😁
On peut aussi exécuter des scripts déjà tout faits qui vont scanner les différentes vulnérabilités présentes sur le système, comme Linepeas même si il en existe d’autres.
On peut aussi, de manière générale :
- Vérifier les crontab, si par exemple notre utilisateur peut éditer un script et que ce dernier est démarré par root via cron, c’est le jackpot ;
- Vérifier si le kernel n’a pas d’exploit connu pour faire apparaître un shell en tant que root ;
- … ;
Il y a vraiment une tonnes de façons différentes de procéder. Ici on va se contenter d’aller fouiller un peu dans le /home/, voir si nous avons d’autres utilisateurs et mieux encore si nous pouvons aller fouiner chez eux :
Bof, rien de très… une petite minute, n’aurais-t-on pas accès au dossier .ssh de notre cher ami Kay ?
Bingo ! C’est le jackpot haha ! Nous avons bien accès à sa clé privée SSH !
On la copie en local, on lui donne les bons droits puis on essaye directement de se connecter !
Sauf que non… la clé SSH est protégée par une passphrase, donc nous allons devoir gruger…
Et pourquoi pas essayer de la bruteforcer tiens ?
VI) Bruteforce de clé SSH via JohnTheRipper
JohnTheRipper est un outil très connu de bruteforce, le soucis, c’est que lui ne peut pas directement bruteforcer une clé SSH comme ça, il faut d’abord extraire son hash en utilisant un second petit outil, nommé ssh2john :
Comme on peut le voir, on obtient donc un hash qui va pouvoir être lu par John directement à ce niveau.
Rien de très compliqué comme commande, on spécifie simplement notre wordlist, ici on repart avec notre fameux rockyou, et on patiente !
Au bout de quelques minutes, on obtient le sésame: beeswax, le fameux mot de passe pour notre clé SSH !
Et la connexion se fait bien ! Niquel ! Si on fait un petit ls, on devrait obtenir le dernier flag…
Tadaaaa ! C’est tout bon ! Comme vous aurez pu le constater, c’est une box relativement facile, mais je l’ai beaucoup aimé car étant débutant elle permet de tester les différents aspects du CTF (nmap, ensuite dirbuster, puis du bruteforce…).
VII) Conclusion
Cet article est désormais terminé, j’espère comme d’habitude vous avoir appris quelques bricoles ou plus, et je sais que vous serez indulgent envers mes « talents » de « pentesteur » 🤡
Si cet article vous a plus, je pense en refaire quelques-un, car pour l’instant tout cet univers me botte, et je dois dire qu’au delà du fait de pouvoir faire mumuse avec Kali, j’ai appris vraiment pas mal de choses en très peu de temps… ça peut être anodin mais le coup des crontab, ou bien le fait de désactiver le shell pour l’utilisateur www-data, ou même encore de pouvoir réaliser de l’escalade de privilèges avec de simples commandes banales données en sudo, et bien c’est assez dingue !
Sur ce, je vous souhaite une bonne journée/soirée, et une bonne année au passage !
2 comments