---
# System prepended metadata

title: Séance TP - DVWA

---

# Séance TP - DVWA

Dayrice Bhiki

Hugo Gouin

Hippolyte Quéré

Saglier Antoine

## Exercice I - Attaque par Force Brute

### Low

Via le path traversal on peut recupererle path *http://localhost:8080/hackable/users/*, on peut ensuite retrouver les images de chaque utilisateurs avec leurs noms : `1337, admin, gordonb, pablo, smithy` que l'on sauvegarde dans un fichier afin d'afinner notre bruteforce par la suite sur ces utilisateurs.0

Une fois cette liste de users recupere, on se rend sous burp suite en mode intruder avec les parametres utilisateur et password:
![](https://i.imgur.com/OCqc2c4.png)

On ajoute la liste d'utilisateurs comme suivant:
![](https://i.imgur.com/g2vgjlE.png)

Et un dictionnaire de mots de passe(ici rockyou):
![](https://i.imgur.com/prWL4Mc.png)

Maintenant nous trions par length de retour, le retour par defaut quand un mot de passe est errone est de 5198 caracteres, donc toutes les requetes d'une longueur differente correspondent a un combo utilisateur mot de passe reussi:
![](https://i.imgur.com/L25jRMH.png)

### Medium

![](https://i.imgur.com/dIKrPpW.png)
En difficult medium on observe une latence supplementaire lors d'un echec de combinaison mot de passe/username. On en deduit qu un sleep a du etre ajoute dans le code ce qui rend le bruteforce plus long mais il reste possible.

### Exercice bonus
Voici le resultat bien plus rapide en utilisant ffuf:
![](https://i.imgur.com/FnaB2Zg.png)


<br>

## Exercice II - Créer une attaque par méthode “File Upload”

### **Difficulté Easy**

On créer un fichier php executant le code envoyé en paramètre GET "cmd" :

![](https://i.imgur.com/fVUXTXF.png)

On upload notre fichier :

![](https://i.imgur.com/HdTL5Lz.png)

On peut ensuite exécuter des commandes on requêtant l'URL donnée par l'application où a été upload notre fichier :

![](https://i.imgur.com/Asaqeje.png)

### 7.

Cette attaque est très puissante car elle permet d'avoir un accès total à la machine hôte avec des droits du serveur web. Il peut ensuite être possible de faire de l'élévation de privilèges.

### **Difficulté Medium**

Code vulnérable :

```php
if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) )
```

On va pouvoir donc modifier le mime type envoyé par le navigateur dans Burp Suite :

![](https://i.imgur.com/AhSUpVE.png)

Notre fichier a bien été uploadé :

![](https://i.imgur.com/F49lVYu.png)


### **Difficulté High**

Code vulnérable :
```php
if( ( strtolower( $uploaded_ext ) == "jpg"
    || strtolower( $uploaded_ext ) == "jpeg"
    || strtolower( $uploaded_ext ) == "png" )
    && ( $uploaded_size < 100000 )
    && getimagesize( $uploaded_tmp ) )
```

Si l'on upload un fichier comme précédement, cela ne fonctionne plus, on peut par contre utiliser une vulnérabilité de PHP < 5.3 appellée null byte, on upload le fichier php en modifiant son nom en `rce.png%00.php` et le mime type dans Burp Suite. Il faut également contourner le check sur la taille de l'image (`getimagesize()`) en créant un vrai fichier png ou jpg et en ajoutant notre code PHP à la fin.

Notre payload final :   
![](https://i.imgur.com/uwdN7zu.png)


Modification du nom dans burp suite :   
![](https://i.imgur.com/1szMynP.png)

On peut ensuite requêter le fichier comme précédement :   
![](https://i.imgur.com/ZOx9ttF.png)

<br>

## Exercice III - Créer une attaque en utilisant le CAPTCHA

### Low


![](https://i.imgur.com/YIfLAO2.png)

Cela étant, le changement du mot de passe s'effectue notamment en deux étape. La première consiste à vérifier le Captcha et la deuxième étapes désigne la confirmation du changement (voir ci-dessous la seconde étape)

![](https://i.imgur.com/9LGdhx3.png)


Nous pouvons ensuite envoyer le paquet au repeater et modifier les valeurs de password_new de meme que password_conf avant d'envoyer le paquet.


![](https://i.imgur.com/lvmYucF.png)

En somme, en refaisant le login nous sommes obligés de saisir le nouveau password.

### **Difficulté Medium**


Nous pouvons distinguer que la deuxième requête dispose d'un nouveau paramètre nommé passed_captcha avec la valeur true :

![](https://i.imgur.com/pUbFoB0.png)

En outre, nous allons procéder comme précédemment avec Send dans le Repeater sur le paquet. Nous pouvons donc changer les valeurs de password_new et password_conf dans le repeater de meme que changer le variable passed_captcha avec true. Finalement, nous pouvons envoyer le paquet modifié.



![](https://i.imgur.com/KWUubWr.png)

En somme, en refaisant le login nous sommes obligés de saisir le nouveau password.

### **Difficulté High**


Comme nous pouvons le voir au niveau du code source, la logique de vérification du serveur est que lorsque $resp fait référence au résultat de vérification envoyé par Google reCAPTCHA. Cela étant, nous ne pouvons pas contrôler le paramètre $resp, nous allons donc modifier les paramètres g-recaptcha_response avec hidd3n_valu3 de meme que l'entête User-Agent avec la valeur reCAPTCHA :

 

![](https://i.imgur.com/uTatR9j.png)




Nous parvenons donc à contourner la politique de sécurité du contenu.