CTF – Mr Robot

Prendre des résolutions pour la nouvelle année c’est pas vraiment mon truc mais je commence 2017 en me lançant dans les CTF. Avec les capture the flag ont peut (on doit plutôt) mettre en oeuvre toute la méthodologie d’une attaque de la reconnaissance de la cible jusqu’à l’escalade des privilèges (pas de besoin de clear les traces de notre passage ahah )

 

0x01 Présentation du CTF Mr Robot

Je voulais attendre avant de débuter les CTF mais je me suis dit que j’allais apprendre encore plus en mettant en oeuvre ce que je connaissais déjà. 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 )

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

 

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 )

Pour cela on peut se réferer à un article que j’ai écris précédement. Cependant j’ai entre temps découvert d’autres outils très performants  nommés uniscan, dirsearch et nikto ! Je vais donc mettre à jour l’article et détailler l’utilisation d’uniscan et nikto.

  • -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)
  2. 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.dic gardons ç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 a connais maintenant 3 choses intéressantes :

  1. C’est un wordpress
  2. un dico
  3. elliot:ER28-0652

(Etant donné que j’ai découvert elliot: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 utilisateurs WP (nmap –script http-wordpress-enum cible) n’a rien ressortit et le scan WPScan (wpsan –enumerate u) non plus.

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 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és soit 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é

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 de naviguer 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 installer le nouveau plugin je remarque qu’on peut uploader dans /wp-content/ reste plus qu’à envoyer un shell coder à 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.

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

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 :

  1. key-2-of-3.txt (mais on n’a pas les droits pour l’ouvrir)
  2. password.raw-md5 qui une fois déchiffrer (vulgaire hash md5 très connue maintenant) nous donne robot:abcdefghijklmnopqrstuvwxyz 

Essayons de se logger

Bingo ! On affiche key-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 supposer que le flag se cache dans /root (encore du guess oui je déteste ça). 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

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é !