[Writeup/Vulnhub] Challenge Basic_pentesting_1

Préambule

Le challenge que je vous présente pour réaliser ce Writeup, se trouve à l’adresse suivante :
VULNHUB

  • Auteur : Josiah Pierce
  • Catégorie : Basic Pentesting
  • Niveau : Débutant
  • Environnent : Virtualbox / Vmware (non officiel)
  • Télécharger : basic_pentesting_1 (OVA)
  • DHCP service: Activé

Cette démarche est à entreprendre uniquement sur un environnement qui vous appartient ou un scope autorisé par son propriétaire.


Énoncé

Il faut toujours prendre le temps de lire l’énoncé, généralement nous avons à ce niveau, soit :

  • un ou plusieurs indices
  • une ou plusieurs pistes à garder de côté
  • l’objectif ou les objectifs du challenge

C’est une petite machine virtuelle boot2root que j’ai créée pour le groupe de cybersécurité de mon université.

Il contient plusieurs vulnérabilités distantes et plusieurs vecteurs d’escalade de privilèges.

J’ai effectué tous les tests pour cette machine virtuelle sur VirtualBox, donc c’est la plate-forme recommandée.

On m’a informé que cela fonctionnait également avec VMware, mais je ne l’ai pas testé personnellement.

Cette machine virtuelle est spécifiquement destinée aux nouveaux arrivants aux tests d’intrusion.

Si vous êtes débutant, vous devriez espérer que la difficulté de la VM sera parfaite.

Votre objectif est d’attaquer à distance la VM et d’obtenir les privilèges root.

Une fois que vous avez terminé, essayez de trouver d’autres vecteurs que vous auriez peut-être manqués!

Si vous avez apprécié la VM ou avez des questions, n’hésitez pas à me contacter à l’adresse suivante: josiah@vt.edu

Si vous avez terminé la machine virtuelle, envisagez également de publier un article!

Les Writeup vous aident à intérioriser ce sur quoi vous avez travaillé et à aider toute autre personne en difficulté ou désireuse de voir le processus de quelqu’un d’autre.

J’ai hâte de les lire!

Cet énoncé m’apporte pas mal d’informations intéressantes. 🙂

Je sais que je peux attaquer la machine sous différents angles (plusieurs vulnérabilités), qu’une fois l’accès à la machine, l’élévation de privilèges peut se faire de plusieurs manières (plusieurs vecteurs d’escalade de privilèges) et que l’objectif final est d’avoir un accès root sur la machine (obtenir les privilèges root).

TL;DR

Cet encart vous résume les commandes que j’ai utilisées, afin de résoudre ce challenge. Le Writeup complet quant à lui est expliqué et détaillé par la suite.
Je rappelle que cette technique est en aucun cas la seule solution possible. D’autres Writeup disponible sur le net vous proposerons diverses techniques.
L’objectif reste le même pour tout le monde, accomplir la mission !

# Phase 1 : Reconnaissance
$ sudo netdiscover -r 192.168.1.0/24 

# Phase 2 : Enumération
$ nmap -v -Pn -A -n -T4 -O 192.168.1.27 -oX /tmp/basic_pentesting_1.xml
$ gobuster -u 192.168.1.27 -w /usr/share/wfuzz/wordlist/general/common.txt

# Phase 3 : Découverte
$ http://192.168.1.27:80/secret
$ http://192.168.1.27:80/secret/wp-login.php
$ ajout du host vtcsec dans le fichier de conf /etc/hosts de mon poste

# Phase 4 : Exploitation
$ Connexion wordpress | admin:admin
$ Installation plugins wordpress : WP File Manager
$ Injection d'un ShellPHP
$ Récupération utilisateur : marlinspike via un /etc/passwd
$ Connexion en ssh | marlinspike:marlinspike
$ Commande réalisé pour élévation de privilège sudo -s
$ Pwned !

Prérequis

Cette partie décrit que qui est nécessaire d’avoir pour débuter ce challenge.

  • Une plateforme de virtualisation : Virtualbox
    • Celle-ci accueillera la machine pour le challenge
  • Je travaille uniquement sur un environnement Linux pour ce type de challenge, donc soit kali linux ou backbox

Phase 1 : Reconnaissance

Une fois la machine virtuelle allumée sur votre réseau local, la première étape sera de trouvé son adresse IP. Au début du Writeup, on avait comme information que la machine serait en DHCP, cela signifie que cette machine se trouve bien dans le même scope que notre ordinateur.

Je lance de suite un « netdiscover » afin de trouver cette fameuse machine virtuelle.

netdiscover -r 192.168.1.0/24

Ok ! J’ai son ip qui est en 192.168.1.27
J’ai toujours tendance à placer un enregistrement dans mon /etc/hosts

#A supprimer après le challenge
192.168.1.27 Challenge1.fr

Phase 2 : énumération

Pour réaliser ma phase de découverte, je vais utiliser l’outil « nmap » qui me permettra de savoir quels sont les ports/services ouverts sur la machine.

Rapidement, j’observe que 3 ports sont ouverts.

nmap -v -Pn -A -n -T4 -O 192.168.1.27 -oX /tmp/basic_pentesting_1.xml
  • 21/tcp open ftp ProFTPD 1.3.3c
    • il me servira par la suite si je trouve rien coté web, car je sais que la version du service est obsolète et exploitable via un exploit.
  • 22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
    • Le port que j’utilise une fois que j’ai accès à la machine.
  • 80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
    • Généralement tout le travail de recherche de vulnérabilités se passe sur ce port.

Dans la foulée, je vais tout de suite faire une énumération des sous-sites sur le port 80 -http.
Je vais utiliser l’outil « Gobuster » qui fait le job.

gobuster -u 192.168.1.27 -w /usr/share/wfuzz/wordlist/general/common.txt

Phase 3 : Découverte

Pour ce faire, je vais tout simplement me rendre sur la page web avec mon navigateur.

Page d’accueil du site web

Je tombe sur une page par défaut qui ne m’apporte rien d’intéressant. Je jette un œil dans le code source, mais rien en vue.

Gobuster m’avait identifié un sous-site en « /secret ».

http://192.168.1.27:80/secret

Je remarque que nous sommes sur un site tournant sous wordpress. Je pourrais refaire un Gobuster de ce sous-site pour qu’il m’énumère le contenu de celui-ci mais je tente directement la page de login d’un wordpress par défaut, à savoir : wp-login.php

http://192.168.1.27:80/secret/wp-login.php

Je vais faire un tour dans le code source de la page et je remarque que les différentes requêtes sont renvoyés non pas sur mon adresse ip en 192.168.1.27 mais sur le nom : vtcsec
Je retourne de suite dans mon /etc/hosts et au lieu de marquer challenge1.fr, je le renomme en vtcsec

ping vtcsec

Phase 3 : Exploitation

J’envisage de tester un couple d’identifiant le plus simple du monde, à savoir : admin/admin

identifiant : admin/admin

BINGO !!!
Je suis admin du site wordpress, mais attention cela ne signifie pas que je suis root du serveur.
Je continue donc mon exploration. 🙂

Installation plugins

Je me dirige dans la partie « plugin » du wordpress afin d’ajouter le plugin suivant : WP File Manager
Il me permettra de télécharger/envoyer n’importe quels dossiers/fichiers sur le serveur.

Installation plugins wordpress : WP File Manager

Injection ShellPHP

Je décide d’injecter un ShellPHP sur le serveur et voir comment il réagit.
Le ShellPHP me permettra de naviguer aisément sur le serveur en gardant en tête que mon objectif est d’être root de la machine.

Injection du ShellPHP

Le ShellPHP s’injecte bien sans que le wordpress ou autre mécanisme me bloque.
Maintenant lançons-le !! 😀

Execution du ShellPHP

Nice ! Le ShellPHP s’exécute bien sûr le serveur.
On peut de suite vérifier son bon fonctionnement en naviguant comme dans un terminal.

cat /etc/passwd

En revanche à ce stade je ne sais pas si c’est mon ShellPHP, ma VM ou le contexte qui pose problème, mais impossible d’interagir avec un sudo -s pour tester une élévation de privilège. Je tente donc autrement car j’ai récupéré des informations qui pourraient me servir.

Escalade de privilège.

Quand j’énumère les utilisateurs, je remarque qu’un utilisateur intéressant apparaît dans la liste : marlinspike
Cet utilisateur est intéressant car ce n’est pas un compte par défaut du système.
Je décide de faire un test logique avant de sortir l’arsenal ( Même test que pour les identifiants WordPress) en me connectant en ssh sur la machine depuis le compte trouvé.
Je tente donc une connexion avec comme identifiant et mot de passe : marlinspike

ssh marlinspike@192.168.1.27

C’est bien ce qu’il me semblait !
La démarche des identifiants reste la même sur cette machine.
Il me reste donc à faire une élévation de privilège depuis le compte utilisé pour devenir « root » du serveur.
Je lance un simple « id » au niveau du terminal pour savoir qu’elles sont les groupes d’appartenance du compte marlinspike.

Commande dans le terminal : id

Et là c’est le drame ….
C’est bien ce qu’il me semblait, vu le niveau de sécurité mis en place.
L’utilisateur a tout simplement les privilèges « root » sur la machine car il appartient au groupe : 27(sudo)

Pwned ! 🙂

Une simple commande me permettra d’être « root » de la machine et ainsi terminer ce challenge. 🙂

Commande dans le terminal : sudo -s

Mission accompli, je suis « root » du serveur !!!

Retex

Si je fais un petit bilan de ce challenge.

J’ai commencé par une phase de reconnaissance et celle-ci m’a permis de comprendre le contexte.

Ensuite j’ai travaillé ma phase d’énumération, et j’ai remarqué que certains services étaient obsolètes, notamment la partie FTP, même si je ne l’ai pas exploité.

Dans ma phase de découverte, j’ai découvert qu’un site pouvait en cacher un autre car un WordPress était placé en arrière-plan.

Et pour finir dans ma phase d’exploitation, malheureusement ou heureusement pour moi, il y avait une politique de mot de passe faible voire null..

La possibilité de se connecter facilement en SSH de par un manque de sécurité également.

Et le bouquet final, un utilisateur appartenant au groupe sudo.

J’espère que vous aurez pris plaisir à lire ce premier writeup d’une longue série qui s’annonce.
N’hésitez pas à me faire part de vos retours ou vos questions concernant ce writeup, via Twitter (@Security_hack3r ou @crach60) ou directement en commentaire sur le site.
Je me ferai une joie de vous répondre 😉


Leave a Comment