Hacker Lab


Prêt pour un aperçu des différentes étapes d'une compromission de serveur ?

1/ Découverte des ports réseaux et services accessibles du réseau
2/ Accès à un compte utilisateur de l'application web
3/ Exploitation d'un bug de l'application web pour obtenir un shell sur la machine
4/ Elévation de privilège pour obtenir un shell superadmin, et passer maître de la machine.

A chaque étape correspond des outils, et des méthodologies adaptés.

Démarrez votre serveur dédié en cliquant sur [Start server].


Server status : stopped


1 / 7 - Scanner les ports du serveur
1

Tu ne connais qu'une simple adresse IP ou un nom de serveur. Il va falloir devenir superadmin...

Pour commencer, on ouvre le terminal, et ping le serveur, puis on lance un nmap dessus.

ping -c 3 ctf-demo_ 

Ping permet de savoir si le serveur est présent sur le réseau et est atteignable.

nmap -sV ctf-demo_ 

nmap va tester les ports fréquement utilisés et essayer de détecter le logiciel et qui tourne dessus ainsi que sa version.
Le scan prend une vingtaine de secondes. On voit que les ports 22 et 80 sont ouverts.
Ce sont des ports classiques: 22 pour l'accès shell en ssh, 80 pour le serveur web.
Le flag est le nom du logiciel du serveur web.

2 / 7 - Brute-forcer un mot de passe avec la liste Rockyou
1

On commence par jeter un oeil sur la page web.

Dans le navigateur: http://yoloctf.org/ctf-demo_/ 

Une appli web commence généralement par un formulaire de login.
Que peut-on faire pour entrer ?
1/ Avec le nom et la version du serveur web, il est possible de vérifier si cette version est à jours, ou possède des failles de sécurité non patchées.
2/ Il est possible de chercher une faille par nous même. Tester pour une LFI, une SQLi,...
3/ Le plus simple est de tester les mots de passe les plus fréquents.


Récupère la liste des mots de passe Rockyou dans le Hacker Guide: http://yoloctf.org/yoloctf/toolbox/toolbox.php?id=rockyou
Teste à la main cette liste pour entrer avec le compte 'admin'.

Le flag est le mot de passe.

3 / 7 - Trouver une faille de type Injection de commande, et l'exploiter
1

Cette application permet de tester la connection vers d'autres serveurs en lançant la commande 'ping'.
Elle prend l'adresse saisie en argument et lance une commande shell sur le serveur de la forme:
system("ping "+$adresse_ip)

Si nous entrons: 127.0.0.1
la commande sera $ ping 127.0.0.1

Si nous entrons: 127.0.0.1;id;ls
la commande sera $ ping 127.0.0.1;id;ls
En plus de la commande ping, nous obtenons l'identifiant de login sous lequel tourne le serveur web, et la liste des fichiers du répertoire.

Nous venons de réaliser une injection de commande.
Cette faille est facile à identifier. Elle affiche le résultat d'une commande shell lancée par le serveur.

Deux fichiers intéressants sont accessibles. Injecte la commande 'cat nomdefichier' pour en afficher le contenu.
Le flag est dans un des deux fichiers.
Le second fichier contient des identifiants utiles pour continuer l'exploitation.

4 / 7 - Trouver des identifiants sur le serveur
1

Avec un accès en lecture au serveur, on trouve souvent des identifiants login/password.
Il faut chercher dans les fichiers de config, dans les codes sources de l'application, dans les commentaires des applications, dans des mails ou des notes, dans l'historique des commandes tapées...
Il existe des listes de fichiers qui permettent d'automatiser la découverte des fichiers et l'extraction des logn/mots de passe.

Ici, le document server_credential.txt, contient un identifiant.
Le flag est le login

5 / 7 - Utilisons cet identifiant sur l'accès ssh.
1
ssh logindunutilisateur@ctf-demo_ 

Utilise ton terminal pour ouvrir une connection ssh.
Le flag est dans le répertoire de l'utilisateur.

6 / 7 - Vérifier ses droits en SUDO
1

Sur un serveur, normalement personne ne se connecte avec le compte root.
On utilise des comptes d'administration ou utilisateurs et la commande 'sudo' permet d'obtenir des droits supplémebntaires pour lancer des commandes.
La première chose à faire en arrivant sur un serveur est de lister ses droits sudo.

sudo -l 

Bingo, notre gentil utilisateur possède des droits sudo.
Notre utilisateur peut lancer la commande /bin/cat comme s'il était 'admin'.

ls -al /home 
ls -al /home/admin 
cat /home/admin/flag_admin.txt 

Chaque utilisateurs de la machine a un répertoire sous /home.
Regardons chez admin, et essayons de lire son flag. Perdu seul admin peut lire ce fichier.

Utilisons 'sudo' pourr lire le flag

sudo -u admin cat /home/admin/flag_admin.txt 
7 / 7 - Trouver les droits
1

Dans le répertoire /home nous avons vu qu'il existe un superadmin.

ls -al /home/superadmin 
cat /home/superadmin/flag_superadmin.txt 

Nous ne pouvons pas lire son fichier.

sudo -l 

L'utilisateur possède des droits sudo sur la commande find.
Utilisons cette commande pour lire le flag en tant que superadmin

sudo -u superadmin find /home/superadmin -name flag* -exec cat {} \; 

En tant que superadmin, 'find' va chercher les fichiers dont le nom commençe par flag dans le répertoire /home/admin et va lancer la commande 'cat' dessus.

Tant que nous y sommes, utilisons là pour ouvrir un shell /bin/ash en tant que superadmin.

sudo -u superadmin find /home/superadmin -name flag* -exec /bin/ash \; 

Bon ben, on est chez nous maintenant :)

Have fun !